February was a month of meaningful progress for PrestaShop. Two new releases (9.0.3, 8.2.4), a major milestone for the Hummingbird theme, and two important announcements about upcoming features make it a month worth looking back at in detail.

Core Monthly banner

Dear community,

February brought a solid mix of stability work and forward-looking announcements. We shipped two releases: a targeted security fix for the 8.2 branch, and a broader maintenance update for PrestaShop 9 that combines that same fix with a solid batch of bug fixes and improvements. Beyond releases, the team published important news about the platform’s future, from the B2B effort getting its first lines of code merged, to an exciting announcement about the one-page checkout. It was also a great month for front-end developers, with Hummingbird reaching its v2.0 milestone. Let’s take a closer look.

Two new releases land on the same day

On February 3rd, we released PrestaShop 9.0.3 and PrestaShop 8.2.4 simultaneously. Both releases address the same security issue: a time-based user enumeration vulnerability in the front office login form that could allow attackers to detect whether a customer account exists based on response times. The severity is rated as moderate (5.3/10), and we decided to ship the fix to both active branches at once.

Beyond the security fix, PrestaShop 9.0.3 brings a significant number of bug fixes and improvements. The back office received some UX attention, with help boxes added to the product page and improved setting descriptions. The multishop experience was also improved, with several issues related to feature display and redirections fixed. Developer-facing changes include new hooks for country and currency selection logic, Admin API improvements, and a fix for the legacy profiler. If you are running a PrestaShop 9 shop, this is a recommended update.

For PrestaShop 8.2.x, 8.2.4 is a focused security release. The 8.2 branch currently receives security patches only, and this is a good reminder to plan your migration to PrestaShop 9 when you are ready.

Hummingbird v2: a solid foundation for theme development

The Hummingbird v2 article was published on February 19th, and it marks a real milestone. Hummingbird is now the official reference theme for PrestaShop, and v2 introduces a clearer and more predictable architecture for theme developers and module authors.

The big change in v2 is how styles are organized. Bootstrap and PrestaShop styles are now explicitly separated, which makes it much easier to understand where each style comes from, override only what you need, and avoid accidental side effects. The release also introduces CSS cascade layers (@layer), which bring better control over style priority without relying on specificity tricks. The SCSS folder structure was also reorganized by responsibility rather than legacy grouping, which speeds up onboarding and keeps the codebase easier to navigate as it grows.

Whether you are building a new theme, customizing an existing one, or contributing to the ecosystem, Hummingbird v2 is a much better starting point than v1. The article goes into technical details and includes six best practices for working with it, as well as guidance for contributors.

Cleaning up old branches

February was also the month we officially cleaned up some stale branches from the main PrestaShop repository: 1.7.7.x, 1.7.8.x, 8.0.x, and 8.1.x. These branches had long been inactive and no longer served any purpose for ongoing development.

This kind of housekeeping is a normal part of maintaining a healthy open source project. It also serves as a useful reminder of the current support scope: PrestaShop 9.0 is the main supported version, while 8.2.x receives security patches only until PrestaShop 10 is released. If your deployment pipelines reference maintenance branches, now is the time to switch to pinned git tags instead.

B2B foundations: the work begins

The B2B initiative we announced back in December took a concrete step forward in February. The first pull request from the Soledis agency, targeting the B2B data model foundations, was merged into the develop branch.

This is the result of months of specification work, community discussion, and close collaboration between PrestaShop and Soledis, a French agency with deep B2B expertise. The goal of this first phase is to lay the groundwork: a new data model for business entities, isolated from the current customer table to avoid breaking anything for existing B2C shops. The feature is protected behind a feature flag, meaning it has no impact on existing stores.

The community discussion around this initiative has been rich and sometimes heated, which is a good thing. Different perspectives from agencies, developers, and merchants help shape a better direction. If you work with B2B projects and have not shared your feedback yet, the discussion thread is still open and your input is welcome.

One-page checkout is officially in the works

Just in time for the end of February, the team announced that development of a native one-page checkout has officially started. This is a feature many merchants have been waiting for, and it is planned for PrestaShop 9.2.

The goals are straightforward: reduce friction during guest checkout, eliminate full-page reloads through AJAX-based updates, and offer an experience better suited to mobile shoppers and lower average order value contexts. The current multi-step checkout will remain available; the one-page checkout will be an option merchants can enable from the back office.

A few decisions are worth noting. Login and account creation will be moved outside the checkout funnel, the OPC will be built on Hummingbird v2 (not compatible with the classic theme), and module authors will need to adapt any integrations that interact with the current checkout flow. The team has committed to providing documentation and guidance as work progresses, so there will be time to prepare.

Spotlight on contributors

February was a strong month for community contributions. @Codencode stood out with a remarkable number of bug fixes across both the 9.0.x and 9.1.x branches, covering multishop issues, back office UX, Doctrine auto-mapping, and more. @Touxten was also very present, contributing fixes, CI improvements, and switching multiple native modules to external CI actions. And @Hlavtox had another productive month in the 9.1.x branch, with contributions spanning cart logic simplification, free shipping hooks, delivery time improvements, and several front office fixes. Thank you all for the consistent and valuable work.

A huge thank you to everyone who contributed to this release! Your dedication helps make PrestaShop stronger, more secure, and better for everyone. We truly appreciate your time and expertise.

Want to join the movement? Start contributing today and help shape the future of open source e-commerce!

Beyond these highlights, February was packed with activity across all project repositories. The Auto Upgrade module saw a lot of work, from UX improvements to new task structure and Distribution API integration. The Hummingbird theme itself received multiple contributions alongside the release. And as always, the full list of pull requests below gives a complete picture of everything that moved forward this month.

Project releases

A quick update about PrestaShop’s GitHub issues and pull requests:

Code changes in the ‘develop’ branch

Back office

  • #40872: Resolve problem on split shipment on carrier select. Thank you, @Poulinhoo
  • #40850: Add builder form on add product inside a existing order. Thank you, @Poulinhoo
  • #40821: Resolve problem on add product on existing order when multishipment is disable. Thank you, @Poulinhoo
  • #40719: Added multi-shipment support to emails. Thank you, @M0rgan01
  • #40548: feat: add new modale on order page for add product & add select for choose shipment for new product added. Thank you, @Poulinhoo
  • #40238: BO : Enabled feature flag “Tag” & Set stability as “stable”. Thank you, @Progi1984

Core

Front office

  • #40849: Login form: change autocomplete="email" to autocomplete="username". Thank you, @yannicka
  • #33539: Secure table name with bqsql in DB and DBQuery. Thank you, @jf-viguier

GitHub

  • #40616: Updates the bug report template following work with the community.. Thank you, @ga-devfront

Installer

Tests

Code changes in the ‘9.0.x’ branch

Back office

  • #40710: Fix: Feature values count is duplicated when using “All shops” with multiple shops. Thank you, @Codencode
  • #40706: Fix: Features with the same name are shown only once when creating values and assigning to products. Thank you, @Codencode
  • #40693: fix: [BO][Multishop] Design > Theme & Logo: when updating the logo in the “All shops” context, only shop ID 1 gets updated. Thank you, @Codencode
  • #40640: Fix EntitySearchInput::setValues forEach callback argument order. Thank you, @Codencode
  • #40636: Always execute non display hooks in backoffice. Thank you, @Hlavtox
  • #40620: Update AdminSecurity permissions logic in OrderController. Thank you, @rsoulard-prolaser
  • #40578: Dynamic pack quantity. Thank you, @jolelievre
  • #40317: Fix: Backoffice data grids can yield different random results every time. Thank you, @Codencode
  • #40015: fix: BO - Import for Customers will overwrite the already existing customers. Thank you, @Codencode
  • #39459: Set optin and newsletter off for John DOE. Thank you, @Touxten

Core

  • #40776: Replace github action that sets up mysql in CI. Thank you, @Touxten
  • #40431: feat(FrontController): Add Specialized Hooks. Thank you, @Kaikina

Front office

  • #40662: Corrects the error message when the quantity is less than 1 in cart. Thank you, @Touxten
  • #40626: Fix “Free shipping” displayed for discounts with free shipping off an…. Thank you, @Hlavtox
  • #40570: Prevent accidental usage of quantity_wanted from request. Thank you, @Hlavtox

Tests

  • #40882: Functional Tests : Bump @prestashop-core/ui-testing. Thank you, @Progi1984
  • #40873: Functional Tests : Stabilize GDPR Tests. Thank you, @Progi1984
  • #40789: Functional Tests : Bump @prestashop-core/ui-testing. Thank you, @Progi1984
  • #40734: Functional Tests : Bump @prestashop-core/ui-testing. Thank you, @Progi1984
  • #40691: Functional Tests : Bump @prestashop-core/ui-testing. Thank you, @Progi1984
  • #40674: Functional Tests : Bump @prestashop-core/ui-testing. Thank you, @Progi1984

Code changes in the ‘9.1.x’ branch

Back office

  • #40866: Fixed bug for free gift button on cart rules. Thank you, @Touxten
  • #40859: Fix: in the customer form from admin side, it is missing the newsletter option as Partner Offers. Thank you, @Codencode
  • #40825: Add shipping helptexts. Thank you, @Hlavtox
  • #40809: Clean discount form. Thank you, @jolelievre
  • #40743: Fix: Bug: when invoicing is disabled, changing order status to “paid=1” does not register any payment on the order. Thank you, @Codencode
  • #40720: Add actionUpdateDefaultCombinationAfter hook when default combination is set. Thank you, @Codencode
  • #40682: Fix the collision when we create / delete product customization in the same action. Thank you, @nicosomb
  • #40536: Add discountType endpoint. Thank you, @nicosomb
  • #40094: Fix: Doctrine auto-mapping in modules: only the first subfolder inside src/Entity is recognized. Thank you, @Codencode

Core

  • #40833: Bump apiresources to 0.5.0. Thank you, @boherm
  • #40823: Don’t add “default” if “default” already in name for getFormattedName. Thank you, @boherm
  • #40811: Backport missing workflows from develop to 9.1.x. Thank you, @jolelievre
  • #40808: Add new options for release creator. Thank you, @nicosomb
  • #40798: Fix, comment and improve country initialization logic related to shipping. Thank you, @Hlavtox
  • #40768: Integrate new header-stamp for 9.1.x branch. Thank you, @jolelievre
  • #40765: Dynamic PHP matrix in workflows for 9.1.x. Thank you, @jolelievre
  • #40762: Replace github action that sets up mysql in CI. Thank you, @Touxten
  • #40730: Add hooks that enable to control free shipping price. Thank you, @Hlavtox
  • #40678: Restore dev version for ps_apiresources. Thank you, @nicosomb
  • #40657: Fix configuration of Dev mode and Debug profiling in the back office. Thank you, @kpodemski
  • #40656: Fix getting specific price for a given customer group. Thank you, @kpodemski
  • #40603: Clean old cart rule migration. Thank you, @jolelievre
  • #40432: Simplify some of cart logic to gradually move to single source of truth. Thank you, @Hlavtox

Front office

  • #40828: Use context instead of cookie where relevant. Thank you, @Hlavtox
  • #40814: Update classic theme to 3.1.1. Thank you, @jolelievre
  • #40758: Secure table name with bqsql in DB and DBQuery #33539 backport. Thank you, @jf-viguier
  • #40733: Bump prestashop/hummingbird to 2.0. Thank you, @Progi1984
  • #40673: Use proper delivery times. Thank you, @Hlavtox
  • #40653: Add cart product presenter and cart availability. Thank you, @Hlavtox
  • #40614: Fix “Free shipping” displayed on cart when a discount haven’t free shipping enabled and with a reduction amount = 0. Thank you, @boherm

Installer

Tests

Code changes in modules, themes and tools

.github

  • #33: Fix action version. Thank you, @ga-devfront
  • #32: Fix workfow reserved name. Thank you, @ga-devfront
  • #31: Add reusable add issue to project. Thank you, @ga-devfront
  • #30: Add missing test on modulename.php. Thank you, @Touxten
  • #29: Fixed action pr-validate-metadata. Thank you, @tleon
  • #28: Generate changelog action. Thank you, @boherm
  • #27: Added new action to format dependabot PRs. Thank you, @tleon
  • #26: fix: PR metadata validation Try to fix regex. Thank you, @mattgoud
  • #25: fix: [PR metadata validatio] fix regex patterns. Thank you, @mattgoud
  • #24: fix: [PR metadata validation] regex is broken. Thank you, @mattgoud
  • #23: Add input to allow exclude folder from autoindexing. Thank you, @jolelievre
  • #22: feat: add PR metadata validation workflow. Thank you, @mattgoud
  • #21: Updates the bug report template following work with the community.. Thank you, @ga-devfront

API Resources

Auto Upgrade module

Automated tests on Pull Requests

Brands list module

  • #30: Switched to external ci actions. Thank you, @Touxten

Cash on delivery module

Changes in developer documentation sources

  • #2104: Remove shop activities in cli install and configuration. Thank you, @jf-viguier
  • #2103: change some Github links to v9. Thank you, @jf-viguier
  • #2100: Add actionUpdateDefaultCombinationAfter hook. Thank you, @Codencode
  • #2099: Update outdated documentation for displayBeforeCarrier. Thank you, @kpodemski
  • #2090: feat(list-of-hooks): Add new FrontController specialized hooks. Thank you, @Kaikina

Classic theme

  • #204: Fix duplicate breadcrumb block declaration in partial. Thank you, @Codencode
  • #202: Bump version 3.1.1. Thank you, @jolelievre
  • #197: Updates the bug report template following work with the community.. Thank you, @ga-devfront
  • #196: Fix structured data related to conditions. Thank you, @Hlavtox

Contact Form module

  • #89: Switched to external ci actions. Thank you, @Touxten
  • #88: ContactForm: Hide subject dropdown when only one contact is available. Thank you, @Codencode

Distribution API

  • #80: Add specific command for downloadNativeModule in parent RunCommand. Thank you, @jolelievre
  • #79: Anticipate future versions on development during module compatibility generation. Thank you, @jolelievre
  • #78: Allow updates to PS 8.2.4 & 9.0.3. Thank you, @Quetzacoalt91
  • #77: Add release note link 9.0.3 & 8.2.4. Thank you, @tleon

Docker images

Email Alerts module

Google Analytics module

  • #174: Switched to external ci actions. Thank you, @Touxten

Hummingbird theme

  • #940: Fix duplicate breadcrumb block declaration in partial. Thank you, @Codencode
  • #936: Accessibility: add some aria-hidden, labels…. Thank you, @yannicka
  • #932: ContactForm: Hide subject dropdown when only one contact is available. Thank you, @Codencode
  • #929: Release v2.0.0. Thank you, @tblivet
  • #926: Refactor quantity inputs following recent CORE changes. Thank you, @tblivet
  • #925: Improve gift display on cart and cart summary. Thank you, @tblivet
  • #924: Move displayProductPriceBlock hook position. Thank you, @tblivet
  • #920: Use ps_imageslider options with Bootstrap slider. Thank you, @tblivet
  • #919: Add stock informations on cart page. Thank you, @tblivet
  • #917: Updates the bug report template following work with the community.. Thank you, @ga-devfront

Image slider module

  • #123: Switched to external CI actions. Thank you, @Touxten

Localization Files

  • #59: Update VAT rates for Estonia and Romania. Thank you, @Codencode

Nightly board

Order Notifications on the Favicon module

  • #47: Switched to external ci actions. Thank you, @Touxten

PrestaShop contributors website

PrestaShop test scenarios

Presthubot

Special offers module

The PrestaShop open source project

Traces

UI Testing Library

Viewed products block module

Wishlist block module


Acknowledgments

Thank you to all contributors this month!

Thank you to the contributors whose PRs haven't been merged yet! And of course, a big thank you to all those who contribute with issues and comments on GitHub!

Coding is only just one of the ways you can contribute. Here are some ideas on how you can get involved in the project.

If you need help with contributing or have questions about it, feel free to contact me, @kpodemski, on the project’s Slack.

Happy contributin’ everyone!