PrestaShop Core Monthly - September 2026
PrestaShop 9.2 ships with Hummingbird 2.1.2, a wave of native module releases, and one month to go before PS Summit
Welcome to the September 2026 Core Monthly. This is the month PrestaShop 9.2 went from release candidate to stable, and most of what happened in the repositories was, one way or another, about getting it out of the door in good shape.

Dear community,
Some months are about laying foundations, and some are about shipping. September was firmly the second kind. In the space of nine days we published the first release candidate and then the stable version of PrestaShop 9.2, released Hummingbird 2.1.2 alongside it, and pushed out a batch of native module updates so that everything in the bundle lines up. In total, 229 pull requests were merged by 26 contributors. And while the 9.2.x branch was being polished, the develop branch kept moving towards the next version. Let’s walk through it.
PrestaShop 9.2 is here
On September 21st we opened PrestaShop 9.2 RC1 for testing, and on September 30th PrestaShop 9.2 became available as a stable release. A short gap like that between the two only happens when the release candidate holds up well, so a big thank you to everyone who installed it, tested it and reported back.

If you have followed the blog this year, the headline features will sound familiar. A native One Page Checkout module now ships in the bundle, and merchants can switch between the one-page and the four-page flow from the back office. Ask AI brings a conversational assistant into the back office, powered by the PrestaShop MCP Server. Another batch of pages has been migrated to Symfony behind a feature flag, and image types gained a new thumbnail fitment setting, contributed by @Hlavtox and sponsored by TRENDO s.r.o. The release article has all the details and screenshots, and if you maintain a payment or carrier module, it also links to the guides you need to check your module against the one-page flow.
The Update Assistant kept pace with the release: version 7.6.6 came out on September 29th with full support for PrestaShop 9.2, so shops running 9.0.x or 9.1.x can update right away. Getting there took a good part of the month, with the 9.2.0 upgrade script now creating the new Extra Properties tables, more permissive detection of module upgrade files, clearer wording for modules whose compatibility cannot be confirmed, and a fix from @rboadalabelgrup so that a locked cache file no longer aborts an upgrade. As always, back up your shop and try the update on a staging environment first, and note that if you were testing the RC1, you will need a fresh installation of the final release.
Extra Properties got its final polish
Extra Properties is the 9.2 feature developers will probably feel the most, since it gives modules a single, native way to attach custom fields to core entities. Because it becomes a public extension point the moment 9.2 ships, a lot of September went into making sure it was solid before anyone builds on it.

@jolelievre added the ability to restrict a definition to a list of shops, so a module’s properties follow the shops where that module is enabled, and handled the less conventional cases such as entities with irregular naming and the cart entity. The most important change, though, came from @Jeremie-Kiwik: validation constraints used to be stored with PHP serialization, and they are now stored as the same small DSL that the back office “Validation” field already shows. Reading a definition back no longer goes through unserialize(), which removes a whole class of risk instead of trying to guard it. The feature now has its developer documentation, its endpoints in ps_apiresources 0.9.0, and a renamed demoextraproperty module in the example modules repository showing how to register properties on carts, orders and combinations.
Hummingbird 2.1.2
Hummingbird, the default theme since 9.1, shipped two maintenance releases this month, 2.1.1 and then 2.1.2, which is the version bundled with PrestaShop 9.2. Most of the changes are the kind shoppers only notice when they are missing. The checkout address step no longer nests forms (which broke the Continue button when editing a separate billing address), the guest order tracking form now submits with POST, the country tax label setting is respected on the product page, and the reassurance icons are marked as decorative for screen readers. Many of those fixes came from @boo-code. The theme also takes advantage of the new thumbnail fitment with a dedicated image type for brand logos on the product page, and 2.1.2 removes development files from the package for security.
On the tooling side, @tblivet added a QA testing checklist covering a full theme test pass, and turned it into a Hummingbird QA skill for AI agents in the new PrestaShop skills repository, next to a more general skill that guides an agent through the QA of a pull request. Both are still young, so feedback from people actually using them is very welcome. Note that building the theme from source now requires Node.js 24, which does not affect shops using the packaged theme.
A wave of native module releases
A new minor version is also the moment to bring the native modules in line, and September saw a lot of that. contactform 5.0.0, productcomments 9.0.0, ps_banner, ps_cashondelivery and ps_wirepayment 3.0.0, and ps_facetedsearch 5.1.0 were all released, and ps_imageslider, ps_socialfollow and ps_faviconnotificationbo were aligned on PrestaShop 8.2+ and are ready for their own releases. The major version bumps mostly reflect that alignment: dropping support for very old PrestaShop versions lets these modules shed compatibility code and use the modern APIs, which makes them easier to maintain and easier for contributors to work on.
Meanwhile, on develop
While 9.2.x was being stabilized, the develop branch kept moving. @Quetzacoalt91 merged the migration of the Stores page to Symfony, and it is an interesting one: it was built with the help of the migration skill provided in the repository, then refined over a few iterations, which is a good sign that the investment in documenting how a migration should look is starting to pay off. The same contributor also upgraded the core from PHPStan 1 to PHPStan 2, a stricter analysis that will catch more problems before they reach a release.
The import rebuild we talked about last month reached its second step, with @mattgoud adding the CQRS layer that drives import jobs and lets a job resume where it stopped across several requests, while @jolelievre split the product importer into smaller, per-concern steps. @nicosomb improved the carrier domain and added the carrier endpoints to the Admin API, and @soledis-contributeur added the business entities listing and detail pages to the back office, behind the existing B2B feature flag.
There is also a piece of work aimed at contributors’ daily lives. Our UI test campaigns are retried automatically, and a pull request is often green only after a couple of attempts, which is slow and frustrating for everyone. @jolelievre built a collector and a statistics dashboard that read campaign results back from the GitHub API, including the runs on contributor forks, to show which campaigns are flaky and how much machine time the retries cost. The goal is to spend the last quarter of the year fixing the worst offenders, based on data rather than gut feeling.
See you in Lyon next month

PS Summit 2026 is now just a month away. On November 4th, the workshop and hackathon day brings PrestaShop and Sylius developers together, with hands-on sessions in the morning and a cross-framework hackathon in the afternoon. On November 5th, the conference opens at the Palais des Congrès in Lyon with a keynote that promises a first look at PrestaShop 10 and Sylius 3. The programme is being finalised and we will share more about it in the coming weeks. If you have not registered yet, remember that the workshop and the conference need separate registrations, and workshop seats are limited. We would love to see many of you there.
Most active contributors
- @jolelievre (35 PRs) wore a lot of hats this month: the last round of Extra Properties hardening and its documentation, the ps_apiresources 0.9.0 release, the 9.2.0 release itself in the distribution API, the import engine refactor on
develop, and the flaky test dashboard in ga.tests.ui.pr. - @boo-code (24 PRs) fixed a long list of multishop and combination bugs in the core, made the installer move the admin folder across devices instead of failing, contributed several Hummingbird checkout and accessibility fixes, and clarified two topics in the developer documentation.
- @Quetzacoalt91 (17 PRs) split their time between the Update Assistant, the productcomments 9.0.0 release, the Stores page migration and the PHPStan 2 upgrade.
- @tblivet (13 PRs) released Hummingbird 2.1.1 and 2.1.2, wrote the theme QA checklist and the first QA skills in the skills repository, and improved the core build scripts.
- @mattgoud (12 PRs) released ps_facetedsearch 5.1.0, aligned three more native modules on PrestaShop 8.2+, fixed several Shipment domain defects and delivered the import job CQRS layer.
Spotlight on community contributors
Every month we highlight a few contributors from outside the core team whose work made a difference. Here are five of them for September.
- @boo-code was once again everywhere, fixing CMS links and content on multishop, editing combinations with NULL identifiers, the unit price impact in bulk combination edits, and a handful of Hummingbird checkout issues that made it into 2.1.2.
- @Codencode fixed a performance regression on the Carts page, PHP 8.5 deprecations in the core and in the faceted search, a payment that kept only the first 9 characters of the order reference, and the delivery option cache when a delivery address changes.
- @Hlavtox enriched the core structured data with product features and shop contact details, kept pagination in hreflang URLs, made it possible to keep working on an order once it is shipped, and released contactform 5.0.0.
- @PrestaEdit improved how companies are ranked and credited on the contributors website across TopContributors and traces.
- @Jeremie-Kiwik replaced PHP serialization with a DSL for Extra Properties constraints, an important security hardening that landed just in time for 9.2.
There is more in the list below than we could fit here: @wakqasahmed stopped isBot() from flagging Motorola and WeChat browsers, @daresh added the MPN field to orders in the webservice, @NicoVmax fixed a delivery option issue in ps_onepagecheckout, and PrestaShop Flashlight picked up the newly published versions. Take a scroll, there is something for everyone.
Project releases
-
Contact Form module, v5.0.0 released on 2026-09-10.
-
Product Comments module, v9.0.0 released on 2026-09-09.
-
Banner module, v3.0.0 released on 2026-09-08.
-
Cash on delivery module, v3.0.0 released on 2026-09-08.
-
Faceted search module, v5.1.0 released on 2026-09-10.
-
Wire payment module, v3.0.0 released on 2026-09-10.
-
Update Assistant module, v7.6.6 released on 2026-09-29.
A quick update about PrestaShop’s GitHub issues and pull requests:
- 92 new issues have been created in the project repositories;
- 85 have been closed, including 36 fixed issues on the core;
- 735 pull requests have been opened in the project repositories;
- 279 pull requests have been closed, including 229 merged pull requests.
Code changes in the ‘9.2.x’ branch
- #42600: Fix supplier ID type in SetSuppliersCommand. Thank you, @Codencode
Back office
- #43010: Fix: Extra Property entity CMS is normalized to c_m_s instead of cms_page. Thank you, @Codencode
- #42864: Fix employee login logging in Back Office. Thank you, @Codencode
- #42768: Fix the theme selector in the Translations page. Thank you, @tblivet
- #42475: Fix product ID type in product grid decorator. Thank you, @Codencode
- #42411: Fix the Shipment domain defects that do not depend on the Admin API. Thank you, @mattgoud
- #42400: Fix Carts page performance regression on connections query. Thank you, @Codencode
- #42284: Do not block working with order if it’s shipped. Thank you, @Hlavtox
- #42177: Keep the HTML of legacy admin errors and confirmations. Thank you, @boo-code
- #42164: Let the raw_purified filter render a null value. Thank you, @boo-code
- #41872: Fix bulk combination edit not saving the unit price impact. Thank you, @boo-code
- #41867: Fix TypeError on tax rules bulk delete when no rule is selected. Thank you, @boo-code
- #41841: Allow editing a combination whose identifiers are NULL in the database. Thank you, @boo-code
Core
- #43030: Update Symfony components after 6.4.47 release. Thank you, @nicosomb
- #43018: Update missing hooks. Thank you, @jolelievre
- #42977: Fix: Payment created on a paid order status keeps only the first 9 characters of the order reference. Thank you, @Codencode
- #42972: Update composer for hummingbird v2.1.2. Thank you, @tblivet
- #42856: Update Symfony components after 6.4.46 release. Thank you, @nicosomb
- #42851: Harden extra property definitions on the write and read paths. Thank you, @jolelievre
- #42831: Add changelog for PrestaShop 9.2.0 RC1. Thank you, @nicosomb
- #42826: Updated native modules. Thank you, @nicosomb
- #42822: Take the extra property logger through the core “logger” id instead of Psr\Log\LoggerInterface. Thank you, @jolelievre
- #42787: Carry extra property constraints as their DSL string on the CQRS boundary. Thank you, @jolelievre
- #42765: Remove deprecated imagedestroy calls. Thank you, @Codencode
- #42728: Prevent empty query strings in product URLs. Thank you, @Hlavtox
- #42726: Extra Property: store constraints as their DSL, dropping PHP serialization. Thank you, @Jeremie-Kiwik
- #42538: Handle non-conventional entity naming, default value typing and the cart entity in extra properties. Thank you, @jolelievre
- #42490: Allow restricting extra property definitions to a list of shops. Thank you, @jolelievre
- #42160: Check escapeshellarg before shelling out to detect a mime type. Thank you, @boo-code
- #41858: Fix CMS::getCMSContent ignoring target shop default language. Thank you, @boo-code
- #41848: Don’t fatal on invokable controllers when resolving multishop context. Thank you, @boo-code
- #41838: Prevent a malformed translation from fataling the front office. Thank you, @boo-code
- #41832: Cover getCustomerCartRules using the passed cart for product restrictions. Thank you, @boo-code
Front office
- #42767: Do not reuse a memoized session that does not match the requested id. Thank you, @Kaikina
- #42725: Preserve pagination in product listing hreflang URLs. Thank you, @Hlavtox
- #42571: Improve structured data by adding product features and shop contact info. Thank you, @Hlavtox
- #42439: Fix PHP 8.5 null array offset deprecations. Thank you, @Codencode
- #42143: Fix delivery option cache for changed delivery addresses. Thank you, @Codencode
- #41895: Scope Store::atLeastOneStoreExists() to the current shop. Thank you, @boo-code
- #41894: Build CMS links with the target shop’s link_rewrite on multishop. Thank you, @boo-code
- #41839: List should honour ‘Display unavailable attributes’ for the default combination. Thank you, @boo-code
Installer
- #43016: Fix CLI installer crash when a previous run left an unreachable parameters.php. Thank you, @jolelievre
- #43011: Fix url to installation doc in the installer. Thank you, @jolelievre
- #42294: Move the admin folder across devices instead of failing the install. Thank you, @boo-code
Tests
- #42957: Pass the shop list resolver in the invokable controller shop context test. Thank you, @boo-code
- #42786: Make module version checks in UI tests resilient to module releases. Thank you, @jolelievre
- #42269: API Theme : Use scalar rather VO (wo BC Breaks). Thank you, @Progi1984
Code changes in the ‘develop’ branch
Back office
- #42862: Rename import engine ImportRun* classes to ImportJob*. Thank you, @jolelievre
- #42434: Split ProductRowImporter into per-concern row step services. Thank you, @jolelievre
- #42429: Turn ImportMessage row into a cumulative row list coalesced per batch. Thank you, @jolelievre
- #42390: Refacto : Use the default theme and optimize. Thank you, @Touxten
- #42285: Add the business entities listing and detail pages in the Back Office. Thank you, @soledis-contributeur
- #42022: Improve the carrier domain and the Admin API for the new carrier endpoints. Thank you, @nicosomb
- #41911: Import migration step 2: the ImportJob CQRS layer on the import engine. Thank you, @mattgoud
- #41414: Migration of the Stores controller to Symfony. Thank you, @Quetzacoalt91
Core
- #42988: Stop isBot() flagging Motorola and WeChat browsers. Thank you, @wakqasahmed
- #42980: Bump actions/checkout and actions/setup-node . Thank you, @nicosomb
- #42960: Add a query to read a virtual product file on its own. Thank you, @jolelievre
- #42838: Add the possibility to run watch command using make . Thank you, @tblivet
- #42830: Improve builds script. Thank you, @tblivet
- #42828: Do not restart the DB container automatically after reboot. Thank you, @Quetzacoalt91
- #42252: Update PHPStan from 1.x to version 2.2.6+. Thank you, @Quetzacoalt91
- #41884: Return a boolean for the currency enabled state in GetCurrencyForEditing. Thank you, @boo-code
- #41447: Fix deprecated in LanguageList.php. Thank you, @jf-viguier
Tests
- #42770: Nightly tests: fail failed campaigns, import the report once, resolve campaigns dynamically. Thank you, @jolelievre
- #42729: Adapt CI to push Nightly reports in production and preproduction as well. Thank you, @cnavarro-prestashop
- #42493: Auto-retry failed nightly jobs and remove 9.1.x from CI workflows. Thank you, @jolelievre
Web services
- #42852: Stop core’s Language resource from claiming an item route it does not implement. Thank you, @Quetzacoalt91
- #41645: Add MPN field to Webservice in Order.php. Thank you, @daresh
Code changes in modules, themes and tools
.github
- #55: generate-changelog: resolve PRs from commit associations instead of merge commit messages. Thank you, @jolelievre
- #54: php-ci/phpstan: pass php-version to PHPStan instead of only to the runtime. Thank you, @mattgoud
API Resources
- #437: Release v0.9.0. Thank you, @jolelievre
- #436: Bump 0.9.0. Thank you, @jolelievre
- #435: Add the extra property definition endpoints. Thank you, @jolelievre
- #434: CI: pin PrestaShop 9.1.5 instead of the superseded 9.1.4 tag. Thank you, @mattgoud
- #350: Add Carrier endpoints. Thank you, @nicosomb
Auto Upgrade module
- #1932: Merge
7.6.xinto thedevbranch. Thank you, @Quetzacoalt91 - #1931: Add missing hook. Thank you, @jolelievre
- #1930: Use NodeJS 24, actions/checkout@v7 and actions/setup-node@v6. Thank you, @Quetzacoalt91
- #1927: Make detection of module upgrade files more permissive. Thank you, @Quetzacoalt91
- #1915: Default display_front to 0 in the extra property definition registry. Thank you, @jolelievre
- #1910: Fix feature flags data. Thank you, @Quetzacoalt91
- #1909: Merge 7.6.x in dev. Thank you, @Quetzacoalt91
- #1908: Update wording of uncertain modules on CLI, based on the same change on the web interface. Thank you, @Quetzacoalt91
- #1900: Modify wording of unknown modules. Thank you, @Hlavtox
- #1899: Create the extra_property_definition_shop table in the 9.2.0 upgrade script. Thank you, @jolelievre
- #1820: Catch IOException in CacheCleaner to prevent upgrade abort on locked cache files. Thank you, @rboadalabelgrup
Automated tests on Pull Requests
- #113: Bump actions/checkout and actions/setup-node. Thank you, @nicosomb
- #112: Keep the statistics dashboard out of search engines. Thank you, @jolelievre
- #111: Link the dashboard at the organisation’s verified domain. Thank you, @jolelievre
- #110: Publish the dashboard to docs/ so GitHub Pages can serve it. Thank you, @jolelievre
- #109: Report progress during a statistics collection. Thank you, @jolelievre
- #108: Collect UI test campaign statistics to find the flaky tests. Thank you, @jolelievre
Banner module
- #92: Release 3.0.0. Thank you, @cnavarro-prestashop
- #91: Bump version to 3.0.0 in config.xml and ps_banner.php. Thank you, @cnavarro-prestashop
Cash on delivery module
- #243: Release 3.0.0. Thank you, @cnavarro-prestashop
Changes in developer documentation site
- #54: fix(github): typofix in env. Thank you, @arthurzenika
- #53: fix(mcp-server): fix workflow for prod. Thank you, @arthurzenika
- #51: chore(mcp-server): trigger deployment when tag or label to PR is added. Thank you, @arthurzenika
Changes in developer documentation sources
- #2170: Update hooks for 9.2.0 final release. Thank you, @jolelievre
- #2169: Add the Extra Properties component documentation. Thank you, @jolelievre
- #2165: Use the @Modules Twig namespace for mail layouts added from a module. Thank you, @boo-code
- #2164: Say which container $this->get() resolves against in the front office. Thank you, @boo-code
Contact Form module
- #105: Bump 5.0.0. Thank you, @jolelievre
- #100: Release version 5.0.0. Thank you, @Hlavtox
Distribution API
- #98: Add release note url for 9.2.0. Thank you, @jolelievre
- #97: Update for the release 9.2.0. Thank you, @jolelievre
- #96: Add release notes for 9.2 RC 1. Thank you, @nicosomb
Docker images
- #487: Sync backlog of Docker images. Thank you, @ps-jarvis
- #485: Sync backlog of Docker images. Thank you, @ps-jarvis
Docker internal images
- #51: Use new tool to install xdebug. Thank you, @Quetzacoalt91
Email subscription module
- #143: Pin phpVersion on the 9.x PHPStan jobs and drop the AdminController cast helper. Thank you, @mattgoud
Example modules
- #261: Rename demoextrafield module into demoextraproperty. Thank you, @jolelievre
- #260: Small fix to match core changes. Thank you, @jolelievre
- #258: Register cart, order and combination extra fields in demoextrafield. Thank you, @jolelievre
Faceted search module
- #1340: Fix PHP 8.5 null array offset deprecation in converter. Thank you, @Codencode
- #1332: CI: pin phpVersion on the three remaining 9.x PHPStan configurations. Thank you, @mattgoud
- #1327: Fix PHPStan 2 findings on the develop matrix. Thank you, @mattgoud
- #1325: Bump version to 5.1.0. Thank you, @mattgoud
- #1324: Release 5.1.0. Thank you, @mattgoud
Hummingbird theme
- #1117: Prepare release v2.1.2. Thank you, @tblivet
- #1116: Remove dev files for security. Thank you, @tblivet
- #1113: Prepare release v2.1.1. Thank you, @tblivet
- #1112: Update nodejs and caniuse-lite. Thank you, @tblivet
- #1107: Fix product list rating error. Thank you, @tblivet
- #1105: Render the order product line hook on every order product line. Thank you, @boo-code
- #1104: Add QA testing checklist. Thank you, @tblivet
- #1102: Mark the reassurance icons as decorative. Thank you, @boo-code
- #1099: Stop nesting form elements in the checkout address step. Thank you, @boo-code
- #1098: Respect the country tax label setting on the product page. Thank you, @boo-code
- #1097: Submit the guest order tracking form with POST. Thank you, @boo-code
- #1087: Use new image feature. Thank you, @Hlavtox
Image slider module
Order Notifications on the Favicon module
PrestaShop Flashlight
- #189: Fix broken issue tracker link in README. Thank you, @PrestaEdit
- #188: chore: add newly published PrestaShop versions. Thank you, @Alexandre-Lematre
- #187: drop node install and use archive repos. Thank you, @Clap404
PrestaShop contributors website
- #272: MEP Master 20260929. Thank you, @Progi1984
- #271: fix(company): scope company page stats to PRs credited to the company. Thank you, @PrestaEdit
- #267: MEP Master 20260901. Thank you, @Progi1984
Product Comments module
- #253: Add the product key needed to upload releases on the marketplace. Thank you, @Quetzacoalt91
- #251: Bump to v9.0.1. Thank you, @Quetzacoalt91
- #250: Prepare release of productcomments 9.0.0. Thank you, @Quetzacoalt91
- #249: Fix PHPStan error. Thank you, @Quetzacoalt91
- #248: Bump to v9.0.0. Thank you, @Quetzacoalt91
- #245: Delete the rows referencing a comment before the comment. Thank you, @boo-code
- #227: Update ProductCommentRepository.php. Thank you, @metineren
- #223: Fix grade stars init in comment list header. Thank you, @mgielecinski
Ps_onepagecheckout
- #143: Fix: re-key delivery_option onto restored address after temp address cleanup. Thank you, @NicoVmax
Skills
- #7: Add new hummingbird QA skill. Thank you, @tblivet
- #5: Add License file (AFL v3). Thank you, @Quetzacoalt91
- #4: Add prestashop-pr-qa guide an AI agent through QA of a pull request. Thank you, @tblivet
Social Follow module
Traces
- #255: fix(topcompanies): compare commits, not PRs, when ranking by contributions. Thank you, @PrestaEdit
- #254: feat(topcompanies): emit merged PRs per repository for each company. Thank you, @PrestaEdit
- #251: Update start date of jmcollin. Thank you, @cnavarro-prestashop
- #250: Update companies.json with PS SA employees. Thank you, @cnavarro-prestashop
- #249: Fix company attribution when the Sponsor company field contains a tem…. Thank you, @kpodemski
UI Testing Library
Wire payment module
- #103: Fix fatal error on module configuration page by removing the AdminController helper. Thank you, @cnavarro-prestashop
- #102: Release 3.0.0. Thank you, @cnavarro-prestashop
Acknowledgments
Thank you to all contributors this month! And a big thank you to everyone who contributes with issues, reviews, and comments on GitHub, including those whose pull requests have not been merged yet.
Alexandre-Lematre
arthurzenika
boo-code
Clap404
cnavarro-prestashop
Codencode
daresh
Hlavtox
Jeremie-Kiwik
jf-viguier
jolelievre
Kaikina
kpodemski
mattgoud
metineren
mgielecinski
nicosomb
NicoVmax
PrestaEdit
Progi1984
ps-jarvis
Quetzacoalt91
rboadalabelgrup
soledis-contributeur
tblivet
Touxten
wakqasahmed
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, @marsaldev, on the project’s Slack.
Happy contributin’ everyone!