PrestaShop Core Monthly - October 2026
A maturing Admin API, a wave of performance improvements, and new features on the develop branch
Welcome to the October 2026 Core Monthly. With PrestaShop 9.2 out of the door, October was a month of consolidation: the Admin API took a big step towards maturity, the performance work picked up speed, and the 9.2.x branch collected a solid batch of fixes.

Dear community,
After a month as intense as September, you might expect things to slow down a little. They did not, they just changed direction. Instead of shipping a big release, October was about listening to the first feedback on 9.2, hardening what we just published, and preparing the ground for what comes next on develop. In total, 170 pull requests were merged by 31 contributors, and a good share of them came from the community. Here is what stood out.
The Admin API is growing up
The Admin API was one of the busiest areas of the month, and most of that work was about turning a promising feature into a contract that module developers and integrators can rely on. @jolelievre updated ADR 0023 to write down the rules the API now follows: resources live in the ps_apiresources module, lists share the same paginated format, and bulk operations and status codes behave consistently everywhere. Writing these decisions down matters, because it is what lets several people add endpoints in parallel without each of them reinventing the conventions.
Concretely, every endpoint now requires a scope, which closes the door to resources accidentally exposed without permission checks. The missing Product endpoints were added, the experimental multistore support got its own documentation section, and a scheduled workflow now keeps the API tracking issue up to date every day, so anyone can see at a glance what is covered and what is still missing. On the community side, @PrestaEdit consolidated the Country, Customer and ImageType endpoints into single domain pull requests, which makes them much easier to review and merge.
You will also notice a few PRs tagged “AI context” in the list below. The core and ps_apiresources repositories now ship context files, review checklists and conventions extracted from past reviews, so that AI assistants (and humans!) contributing to the codebase start from the same rules the maintainers apply. It is a natural follow-up to the work we described in Teaching AI to speak PrestaShop.
Performance, one query at a time
Benjamin Bendaoui (@LameuleFR) had a very productive month hunting down unnecessary work, and it did not go unnoticed: he also joined the list of project committers in October, which means he can now review and merge contributions too. Welcome aboard, Benjamin! On develop, the translator now only warms up the catalogues of installed languages, shop translations are saved with one query per language instead of one per string, upgrading a single module no longer loads every module present on disk, and the front office skips the cart quantity query when the cart has not even been saved yet. On the 9.2.x side, the out-of-stock label now reuses the quantities that are already computed, and in the Faceted search module uncached category pages run fewer and lighter SQL queries.
None of these changes is spectacular on its own, and that is precisely the point: performance on a real shop is rarely about one big fix, it is about removing dozens of small costs that add up on every page view. If you have spotted a slow area in your own shop, this is a great example of how to contribute a targeted, easy-to-review improvement.
New features on the develop branch
While 9.2.x received fixes, develop kept moving towards the next version, and the B2B initiative took another step forward. Business entities are the companies behind B2B customers, stored in their own data model so that existing B2C shops are not affected. After the creation form earlier this year, @soledis-contributeur added the edit and deletion pages in the back office, so merchants can now manage business entities from start to finish.
Carrier tracking URLs can now use order and delivery address placeholders, which is handy for carriers that need more than a tracking number to show the parcel status. @Codencode added automatic cleanup of outdated sessions, so the sessions table no longer grows forever, and the Docker Compose setup now accepts environment variables, making it possible to run several PrestaShop instances side by side when you develop or test.
Modules, themes and tooling
The ps_onepagecheckout module keeps getting polished after its debut in 9.2: the payment section and the footer are now aligned with the checkout form on desktop, and the configuration page warns merchants when guest checkout is disabled. The Product Comments module 9.0.1 and the Email subscription module 3.0.1 were released, the latter with missing database indexes contributed by @Prestaplugins. @kpodemski replaced the old webpack, Babel and node-sass toolchain of the faceted search with esbuild and Dart Sass, a welcome modernization for anyone building the module’s assets.
PrestaShop Flashlight also had a busy month, with @Alexandre-Lematre fixing builds for older PrestaShop versions, the Alpine Apache images and the nginx routing of language-prefixed URLs.
See you in Lyon

PS Summit 2026 kicks off this week: the workshop and hackathon day on November 4th brings PrestaShop and Sylius developers together, and the conference opens on November 5th at the Palais des Congrès in Lyon. If you are attending, come and say hello to the team. We will share a recap of the event in the coming weeks.
Most active contributors
- @Codencode (17 PRs) topped the list with a long series of fixes: multistore product deletion, module uninstall consistency, carrier price ranges showing the wrong currency, PHP 8.5 deprecations, the customization weight counted twice in orders, plus the automatic session cleanup on
develop. - @jolelievre (15 PRs) drove the Admin API work across the core, ps_apiresources and the ADR repository, set up the AI context files, and maintained the Docker images.
- @Quetzacoalt91 (14 PRs) kept the Update Assistant in sync with 9.2.0, released productcomments 9.0.1, and took care of Docker and CI updates.
- @boo-code (10 PRs) fixed the session handler lifetime, logo attachments in emails, a reserved stock underflow, TinyMCE sizing in hidden tabs and full name filtering in grids.
- @Alexandre-Lematre (10 PRs) worked almost entirely on PrestaShop Flashlight, making its images more reliable across PHP and PrestaShop versions.
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 October.
- @Codencode was the most active contributor of the month, fixing multistore, module and carrier issues in the back office and order weight calculations in the front office, and clarifying the MaterialChoiceTableType documentation.
- @boo-code once again touched every corner of the codebase, from sessions and emails to stock, webservice invoice numbers and the PrestaShop UI Kit icon font.
- @LameuleFR delivered a series of performance improvements in the core and the faceted search, added address placeholders to carrier tracking URLs, and became a project committer.
- @Hlavtox fixed UTF-8 feature values in structured data, zero as a valid multilingual value, the context country for automatic cart rules, and the new 9.2 product conditions in the faceted search.
- @soledis-contributeur pushed the B2B initiative forward with the business entity edit and deletion pages in the back office.
There is more in the list below than we could fit here: @ShaiMagal fixed a product page crash when the brand no longer exists, @lucasell95 fixed the customer groups cache, and @rootvector2 made the webservice date range filter include its boundaries. Take a scroll, there is something for everyone.
Project releases
-
Product Comments module, v9.0.1 released on 2026-10-27.
-
Email subscription module, v3.0.1 released on 2026-10-28.
A quick update about PrestaShop’s GitHub issues and pull requests:
- 125 new issues have been created in the project repositories;
- 228 have been closed, including 61 fixed issues on the core;
- 448 pull requests have been opened in the project repositories;
- 276 pull requests have been closed, including 170 merged pull requests.
Code changes in the ‘9.2.x’ branch
Back office
- #43311: Fix: [Multistore] Deleting a product from the edit page removes it from all shops regardless of the selected shop context. Thank you, @Codencode
- #43292: Allow profile names up to 128 characters. Thank you, @Nexory
- #43264: Country: refuse deleting the default country, check the zone exists, reset the bulk handler exceptions. Thank you, @jolelievre
- #43215: Fix improper route loader used in module tab registration. Thank you, @gross-nvs
- #43204: Fix: A module whose uninstall() returns false stays installed, but its admin tabs (and with “delete files” its folder) are removed anyway. Thank you, @Codencode
- #43171: Keep the creation order of order messages created in the same second. Thank you, @mattgoud
- #43159: Only open the row link when the press started on a clickable cell. Thank you, @mattgoud
- #43152: Fix undefined submit_form_ajax on legacy cart rule pages. Thank you, @Hlavtox
- #43150: Clean product_carrier table when carrier is deleted. Thank you, @aomaxime
- #43143: Add width on menu icons to keep better display will loading font. Thank you, @tblivet
- #43142: Fix: strncmp(): Passing null to parameter #1 ($string1) of type string is deprecated. Thank you, @Codencode
- #43062: Always return an array from Filters::getFilters(). Thank you, @lucasell95
- #43013: Fix: SHOP-scoped Extra Property toggle updates shops where the entity is not associated. Thank you, @Codencode
- #42938: Match the full name when filtering grids by customer or employee. Thank you, @boo-code
- #42572: Allow zero as a valid multilingual value. Thank you, @Hlavtox
- #42533: Size TinyMCE editors again when their tab becomes visible. Thank you, @boo-code
- #42406: Fix: Carrier price ranges always display EUR symbol regardless of shop’s default currency. Thank you, @Codencode
- #42140: Prevent disabling multiple selection in MaterialChoiceTableType. Thank you, @Codencode
- #42085: Use PDF template object returned by hook. Thank you, @Codencode
- #40893: Fix: Custom delivery time gets deleted when switching to default. Thank you, @Codencode
Core
- #43367: Update Symfony components after 6.4.49 release. Thank you, @nicosomb
- #43343: Update phpoffice/phpspreadsheet to 1.30.7. Thank you, @nicosomb
- #43303: Fix: Clear customer address caches in Customer::resetAddressCache. Thank you, @LameuleFR
- #43276: Employee: handle a missing context employee, edit only the fields set on the command. Thank you, @nicosomb
- #43270: OrderReturn: refuse deleting an unknown line, collect the failures of the bulk deletes. Thank you, @nicosomb
- #43269: CMS: read the root category, refuse an unknown parent category. Thank you, @nicosomb
- #43268: OrderState: keep the unremovable states on bulk delete, merge the localized values on edit. Thank you, @nicosomb
- #43252: AI context: Admin API routing table, component context, path-scoped rule and endpoint index [OS-51]. Thank you, @jolelievre
- #43241: Update Symfony components after 6.4.48 release. Thank you, @nicosomb
- #43237: Admin API: boolean cast of the query results, paginated list envelope, OpenAPI cleanup, customer group reduction check. Thank you, @jolelievre
- #43166: Use an anonymous employee in CLI commands instead of employee 42. Thank you, @Jeremie-Kiwik
- #43145: Bump version to 9.2.1. Thank you, @mattgoud
- #43116: Admin API: customer fixes, API test environment and OpenAPI documentation improvements. Thank you, @mattgoud
- #43066: Fix: Skip vendor and non-source folders when registering module controllers. Thank you, @LameuleFR
- #43063: Invalidate Customer groups cache in cleanGroups() and addGroups(). Thank you, @lucasell95
- #42771: Attach the shop logo only to emails that show it. Thank you, @boo-code
- #42716: Give the session handler a lifetime, not an expiry date. Thank you, @boo-code
- #42539: Fix shipment entity. Thank you, @Quetzacoalt91
- #42021: Use CSPRNG for password reset token generation. Thank you, @nabhan06
- #41869: Fix BIGINT UNSIGNED underflow when recomputing reserved stock quantity. Thank you, @boo-code
Front office
- #43387: Fix: Customization weight impact counted twice in order_detail.product_weight (and order weight) since 9.0.0. Thank you, @Codencode
- #43348: Fix: CategoryController::getCategoryToRedirectTo(): int returns null in multistore → fatal TypeError (HTTP 500) instead of 404/redirect. Thank you, @Codencode
- #43162: Fix: CartController ajax refresh logs “No template found for checkout/_partials/cart-summary-items-subtotal” with Hummingbird theme. Thank you, @Codencode
- #43100: Fix: PHP 8.5 deprecation: null array offset in classes/Cart.php lines 1387, 1391, 1397. Thank you, @Codencode
- #43079: Initialize context country before automatic cart rules. Thank you, @Hlavtox
- #43047: Fix UTF-8 feature values in product structured data. Thank you, @Hlavtox
- #43042: Fix product page crash when its brand no longer exists. Thank you, @ShaiMagal
- #43037: Perf: Use the presented quantities for the out-of-stock label. Thank you, @LameuleFR
- #42979: Fix: Missing input validation in AuthController. Thank you, @Codencode
Tests
- #43368: Update tests UI dependencies. Thank you, @Quetzacoalt91
- #43295: Wait for the email to be listed by maildev in the password reset Behat step [OS-132]. Thank you, @mattgoud
Web services
- #43147: Describe the experimental multistore support in the Admin API doc. Thank you, @jolelievre
- #42336: Keep the invoice number when the webservice changes an order status. Thank you, @boo-code
Code changes in the ‘develop’ branch
Back office
- #43164: Add the business entity deletion in the Back Office. Thank you, @soledis-contributeur
- #43126: Feat: Add order and delivery address placeholders to carrier tracking URLs. Thank you, @LameuleFR
- #42505: Add the business entity edit page in the Back Office. Thank you, @soledis-contributeur
- #42487: Check if theme is not parent with its child currently used while trying to delete. Thank you, @aomaxime
- #41851: Refresh the theme config cache when re-importing an upgraded theme. Thank you, @boo-code
Core
- #43160: Perf: Warm up the translator catalogues of installed languages only. Thank you, @LameuleFR
- #43146: Perf: Save shop translations with one query per language. Thank you, @LameuleFR
- #43068: Perf: Do not load every module on disk to upgrade a single module. Thank you, @LameuleFR
- #42875: Add automatic cleanup for outdated sessions. Thank you, @Codencode
- #41854: Generate links with the target shop’s category link_rewrite on multishop. Thank you, @boo-code
Front office
- #43027: Perf: Skip the cart quantity query when the cart is not saved yet. Thank you, @LameuleFR
Installer
- #42861: Allow env vars in variables of Docker compose file to make parallel instances of PrestaShop possible. Thank you, @Quetzacoalt91
Web services
- #40976: Fix webservice date range filter excluding boundary dates (#10822). Thank you, @rootvector2
Code changes in the ‘8.2.x’ branch
Tests
- #43153: Use archive.debian.org for every end-of-life Debian base image in the dev Dockerfile. Thank you, @mattgoud
Code changes in modules, themes and tools
API Resources
- #446: AI context: .ai folder, review checklist, conventions from the review history, CodeRabbit configuration [OS-51]. Thank you, @jolelievre
- #445: Require a scope on every API endpoint. Thank you, @jolelievre
- #444: Update the API tracking issue daily from a scheduled workflow. Thank you, @jolelievre
- #443: Admin API follow-ups: customer groups, customer details order rows, OrderReturn 404, documentation fixes. Thank you, @jolelievre
- #442: Track the listing grids in the API tracking table. Thank you, @jolelievre
- #429: Merge the Country endpoints into one domain PR. Thank you, @PrestaEdit
- #428: Merge the Customer endpoints into one domain PR [OS-21]. Thank you, @PrestaEdit
- #421: Merge the ImageType endpoints into one domain PR. Thank you, @PrestaEdit
- #410: Add the missing Product domain endpoints. Thank you, @jolelievre
Architecture Decision Records repository
- #45: Update ADR 0023: Admin API resources in the module, paginated contract, bulk rules, status codes [OS-51]. Thank you, @jolelievre
Auto Upgrade module
- #1975: Sync 7.6.x in dev. Thank you, @Quetzacoalt91
- #1974: Update CI dependencies for Ubuntu 26.04 on the Github Action runners. Thank you, @Quetzacoalt91
- #1971: Make UI tests watch errors happening in a process. Thank you, @Quetzacoalt91
- #1962: Sync 7.6.x into dev. Thank you, @Quetzacoalt91
- #1960: Fix new PHPStan errors with PrestaShop 9.2.0. Thank you, @Quetzacoalt91
- #1944: 9.2.0 - Install Module One Page Checkout. Thank you, @Quetzacoalt91
- #1939: New Crowdin updates. Thank you, @ps-jarvis
- #1938: New Crowdin updates. Thank you, @ps-jarvis
Automated tests on Pull Requests
Changes in developer documentation sources
- #2177: Migrate to the official phpMyAdmin Docker image. Thank you, @williamdes
- #2176: Add Coddy to the PHP learning links. Thank you, @KevinSpek
- #2175: Update migration guide for PrestaShop 9. Thank you, @ArturKhayrullin
- #2172: [8] Remove ambiguity on path to bin/console. Thank you, @Quetzacoalt91
- #2171: [9] Remove ambiguity on path to bin/console. Thank you, @Quetzacoalt91
- #2160: Clarify MaterialChoiceTableType multiple selection. Thank you, @Codencode
Classic theme
- #240: Fix recursive back parameter in customer sign-in URL. Thank you, @Codencode
Distribution API
- #99: Use PHP 8.4 for Docker and CI. Thank you, @jolelievre
Docker images
- #497: Temporarly switch on Ubuntu 24.04. Thank you, @Quetzacoalt91
- #495: Use archive.debian.org for Buster and Bullseye based images. Thank you, @jolelievre
- #494: Enable mod
headersin apache2 base images. Thank you, @Quetzacoalt91 - #491: Remove development images of deleted branches. Thank you, @jolelievre
- #489: Add manual publish workflow with PHP version selection. Thank you, @jolelievre
Email subscription module
- #141: Add missing indexes on emailsubscription table. Thank you, @Prestaplugins
Faceted search module
- #1365: Fix missing PrestaShop 9.2 product conditions. Thank you, @Hlavtox
- #1346: Perf: Fewer and lighter SQL queries for uncached category pages. Thank you, @LameuleFR
- #1306: Replace webpack/Babel/node-sass with esbuild + Dart Sass, migrate to ESLint 10. Thank you, @kpodemski
Google Analytics module
Hummingbird theme
- #1122: Fix add empty deprecated cart-summary-items-subtotal partial. Thank you, @tblivet
- #1120: Render order messages as plain text on order detail. Thank you, @tblivet
- #1119: Fix optional label capitalization in contact form. Thank you, @Codencode
- #1114: Merge 2.x into develop. Thank you, @tblivet
Kanbanbot
- #106: Update CI for deployment in integration and production. Thank you, @cnavarro-prestashop
- #105: Remove code for Hook contribution label which is not relevant anymore. Thank you, @cnavarro-prestashop
- #104: Bump version to 1.13.3. Thank you, @cnavarro-prestashop
- #103: Upgrade to PHP 8.4 due to PHP CVE-2026-109618 and CVE-2026-109619. Thank you, @cnavarro-prestashop
PrestaShop Flashlight
- #202: Fix Faceted Search release on PHP 5.6 and 7.0 for PrestaShop 1.7.6. Thank you, @Alexandre-Lematre
- #201: Fix PrestaShop <= 1.7.6 builds and keep large releases monitorable. Thank you, @Alexandre-Lematre
- #200: Build Xdebug from GitHub tag tarball instead of PECL. Thank you, @Alexandre-Lematre
- #199: Move alpine images to alpine3.23 to ship PHP security releases. Thank you, @gaelreyrol
- #198: Route language-prefixed URLs to index.php in nginx. Thank you, @Alexandre-Lematre
- #197: Let CORS preflights on directory URLs reach PHP in nginx. Thank you, @Alexandre-Lematre
- #194: Retry Blackfire probe download in base images. Thank you, @Alexandre-Lematre
- #193: Fix alpine apache images: load mod_ssl and serve index.php. Thank you, @Alexandre-Lematre
- #192: Fix alpine apache images: install and load mod_ssl, fail build on missing a2enmod module. Thank you, @Alexandre-Lematre
- #191: chore: add newly published PrestaShop versions. Thank you, @Alexandre-Lematre
- #190: Improve release scripts + increased publish timeouts. Thank you, @Alexandre-Lematre
Prestashop UI Kit
Product Comments module
- #252: Prepare release of version 9.0.1 of productcomments. Thank you, @Quetzacoalt91
Ps_onepagecheckout
- #190: Show a notice on the configuration page when guest checkout is disabled. Thank you, @nicohery
- #186: Fix php stan. Thank you, @Touxten
- #185: Align the payment section and footer with the checkout form on desktop. Thank you, @nicohery
The PrestaShop open source project
Traces
UI Testing Library
- #1141: Wait for the stock list and the bulk update request in the stock bulk edit [OS-146]. Thank you, @mattgoud
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
aomaxime
arshidkv12
ArturKhayrullin
boo-code
cnavarro-prestashop
Codencode
gaelreyrol
gross-nvs
Hlavtox
Jeremie-Kiwik
jolelievre
KevinSpek
kpodemski
LameuleFR
lucasell95
mattgoud
mkaleta-waynet
nabhan06
Nexory
nicohery
nicosomb
PrestaEdit
Prestaplugins
ps-jarvis
Quetzacoalt91
rootvector2
ShaiMagal
soledis-contributeur
tblivet
Touxten
williamdes
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!