PrestaShop Core Monthly - May 2026
Two maintenance releases, teaching AI to speak PrestaShop, and a one-page checkout taking shape
Welcome to the May 2026 Core Monthly. It was a month with a strong maintenance rhythm, two releases on the 9.1 branch, and a lot of quieter groundwork: a fresh take on how the project shares its conventions with AI tools, a one-page checkout slowly coming together in the open, and the usual steady flow of migrations on the develop branch.

Dear community,
May was, above all, a maintenance month. The 9.1 branch received its first regular bug-fix release and a quick security follow-up just two days later, both driven largely by community contributors. Alongside that, we published an article about how we are teaching AI assistants to actually understand PrestaShop’s architecture, the one-page checkout module kept moving toward being a first-class native module, and we opened the call for papers for PS Summit 2026 in Lyon. Let’s walk through it.
Two releases on the 9.1 branch
The headline of the month was a pair of releases. On May 19th we shipped PrestaShop 9.1.2, the first regular maintenance release for the 9.1 branch. It bundles more than fifty merged pull requests from over twenty contributors into one update, with no new features and no breaking changes, which makes it a safe and recommended update for anyone running 9.1. Most of the work landed in the back office, with a strong focus on multishop and catalog management, order handling, and customer-facing flows, plus the usual round of Symfony component bumps under the hood.
Just two days later, on May 21st, we followed up with PrestaShop 9.1.3, a small but important security maintenance release. It contains no application code changes at all: it simply pulls in the latest patched versions of Symfony (6.4.40) and Twig (3.26.0) following their coordinated security advisories published on May 20th. The practical exposure for a default shop is narrow, but because PrestaShop 9 runs on a Symfony version that still receives upstream security support, we ship these fixes as soon as they land. It is the right thing to do regardless of how limited the risk might be.

Teaching AI to speak PrestaShop
If you write PrestaShop code with an AI assistant, you have probably watched it confidently reach for HelperList and a legacy admin controller to build a listing page, only to produce something that would have looked correct in PrestaShop 1.7. The model is not inventing anything: it is faithfully reproducing the largest public corpus of PrestaShop code it could find, which is full of patterns the project moved away from years ago.

In Teaching AI to speak PrestaShop, we described what we are doing about it. Every PrestaShop repository now ships a small set of pointer files at its root that direct any AI tool to a shared context written in plain Markdown, and the core has gone further with a dedicated .ai/ directory holding a hierarchical, machine-readable description of its conventions. The approach is deliberately tool-agnostic: any AI tool can read these files, and any contributor can write them, so the project avoids locking itself into one vendor’s format. You can see this convention spreading across repositories in the PR list below, including work on the skills repository that asks agents to diff changes while checking update compatibility.
A one-page checkout taking shape
Quietly, but steadily, the ps_onepagecheckout module continued its journey toward becoming a proper native module. May saw a configuration entry added for the module in the native-modules repository, and a series of improvements to the module itself: imported and decoupled Hummingbird templates, a new submit event, payment HTML comparison, and better error recovery during checkout. It is the kind of incremental, behind-the-scenes work that does not make a flashy announcement, but it is exactly how a feature graduates from experiment to something merchants will be able to rely on.
Community and events
Beyond the code, we shared two community-focused pieces this month. In PrestaShop and OSPO Alliance, we reflected on what open source means at PrestaShop through an interview with the OSPO Alliance, focusing on two concrete initiatives: Call for Contributions, which channels effort toward roadmap priorities, and the Wall of Fame, which makes contributions visible to merchants directly in the back office.
We also opened the call for papers for PS Summit 2026, the first-ever PS Summit powered by PrestaShop and Sylius, taking place November 4th and 5th in Lyon, France. If you have an experience, an idea, or a project worth sharing with the open source ecommerce community, we would love to see you on stage.

Most active contributors
Here are the five contributors with the most merged pull requests across the project’s repositories in May:
- @Progi1984 (25 PRs) kept the testing infrastructure moving, with a steady stream of work on functional tests and the UI Testing Library, alongside several back office fixes.
- @nicosomb (13 PRs) handled the recurring Symfony component updates, version bumps, and release plumbing across the core, docs, and Auto Upgrade module.
- @jolelievre (12 PRs) focused on architecture in the develop branch, making the HookRegistry stateless, refining the AI Forms context pattern, and advancing the Admin API multishop work in ps_apiresources.
- @Quetzacoalt91 (11 PRs) drove the Auto Upgrade module forward with migration files, module compatibility checks, and version bumps, plus an API endpoint in ps_apiresources.
- @Codencode (10 PRs) was the most active community contributor, fixing a long list of back office and multishop bugs in the core.
Spotlight on community contributors
Every month we like to shine a light on the contributors who volunteer their time to make PrestaShop better. This month we want to thank five of them:
- @Codencode tackled a remarkable number of back office and multishop bugs, from URL schema updates for a single shop to currency import on shop copy and reserved quantity handling.
- @Hlavtox shipped the ps_specials 2.0.0 release, worked on the New Products module, and refined route handling in the core.
- @jf-viguier added a
prestashop:module:listconsole command and improvedConnection::isBot()to recognize modern crawlers and AI bots, preventing ghost carts and fake connections. - @PrestaEdit contributed across several repositories, adding a
getHighestPositionalias in the core, improving the PHP Developer Tools, and adding pagination to the PrestaShop contributors website. - @Kaikina contributed to the Admin API campaign in ps_apiresources with a partial update on TaxRulesGroup status and a new hook in the Email Alerts module.
And much more
There was plenty more activity this month that did not fit into a dedicated section: continued Symfony migrations of back office pages, B2B data model work in the installer and Auto Upgrade module, a refactor of the themes documentation, fixes across the Hummingbird theme, and improvements to the PrestaShop contributors website. You will find the complete list of merged pull requests below.
Project releases
-
PrestaShop, PrestaShop 9.1.3 released on 2026-05-21.
-
Dashboard Activity module, v2.1.2 released on 2026-05-26.
-
Special offers module, v2.0.0 released on 2026-05-21.
A quick update about PrestaShop’s GitHub issues and pull requests:
- 64 new issues have been created in the project repositories;
- 80 have been closed, including 0 fixed issues on the core;
- 362 pull requests have been opened in the project repositories;
- 360 pull requests have been closed, including 286 merged pull requests.
Code changes in the ‘9.1.x’ branch
Back office
- #41552: Fix #41189 - Allow changing discount status on edit page. Thank you, @mattgoud
- #41530: Shopping Carts : For combinations, if no image defined, use the cover image. Thank you, @Progi1984
- #41524: Invoice : If no payments, display the payment method. Thank you, @Progi1984
- #41457: Enhance invoice filename safety by sanitizing number. Thank you, @Maofree
- #41394: Fix: [Multishop] Error when updating “Schema of URLs” for a single shop. Thank you, @Codencode
- #41334: Fix theme import from web throwing PHP warnings on invalid URLs. Thank you, @mattgoud
- #41327: Throw exception on order detail insert failure during conversion. Thank you, @nicosomb
- #41320: Fix unable to delete order product when catalog product is deleted. Thank you, @mattgoud
- #41307: Fix PDF downloads using Symfony responses. Thank you, @Codencode
- #41303: Fix address state selection after country states reload. Thank you, @Codencode
- #41204: Change the redirection of combination button learn more. Thank you, @AureRita
- #41036: Fix: Error 500 if I enter a space in a customer’s first or last name field. Thank you, @Codencode
- #40999: Fix/40997 default currency import on shop copy. Thank you, @Codencode
- #40898: Fix: Bug: reserved_quantity not updated when “Share available quantities for sale” is enabled (Multishop). Thank you, @Codencode
- #40099: Fix: Cart rule combinations lost when saving if lazy-loaded list (jscroll) is not fully loaded. Thank you, @Codencode
Core
- #41567: Update Symfony components after 6.4.41 release. Thank you, @nicosomb
- #41529: Set version to 9.1.4. Thank you, @Progi1984
- #41465: Update Symfony components after 6.4.39 release. Thank you, @nicosomb
- #41431: Backport #41356 : Add CartId into product search handler when employeeId not provided. Thank you, @Progi1984
- #41419: Update Symfony components after 6.4.38 release. Thank you, @nicosomb
- #41412: Fix sending test emails from/to idn domains. Thank you, @boherm
- #41410: Switch employee email from ps_shop_email when forwarding customer threads to another employee. Thank you, @boherm
- #41386: Fix route management and comment Dispatcher. Thank you, @Hlavtox
- #41383: Update Symfony components after 6.4.37 release. Thank you, @nicosomb
- #41317: Fix module uninstall failing when override contains multi-line property or constant value. Thank you, @mattgoud
- #41273: Fix: cast bool field in get cms page category for editing handler. Thank you, @axel-paillaud
- #41225: Fix attribute and attribute group position ordering in core methods. Thank you, @nicohery
- #40654: Theme helper to check framework’s compatibility. Thank you, @kpodemski
Front office
- #41509: Avoid bad URL on invalid media with media servers enabled and CCC disabled. Thank you, @gross-nvs
- #41319: Fix product details overridden when changing attribute in quickview modal. Thank you, @mattgoud
- #41316: Fix wrong state saved when country is changed quickly before AJAX completes. Thank you, @mattgoud
- #41299: Guard product page when product is null. Thank you, @Codencode
Tests
- #41518: Functional Tests : Bump @prestashop-core/ui-testing. Thank you, @Progi1984
- #41503: Functional Tests : Bump @prestashop-core/ui-testing. Thank you, @Progi1984
- #41476: Functional Tests : Remove numbering in endpoints directoriess. Thank you, @Progi1984
- #41475: Functional Tests : @prestashop-core/ui-testing. Thank you, @Progi1984
- #41462: Functional Tests : @prestashop-core/ui-testing. Thank you, @Progi1984
- #41347: Functional Tests : Bump @prestashop-core/ui-testing. Thank you, @Progi1984
Code changes in the ‘develop’ branch
Back office
- #41559: Migrate “International > Taxes > Tax Rules” page. Thank you, @boherm
- #41555: Make HookRegistry stateless and name-keyed. Thank you, @jolelievre
- #41495: Improve countries list Symfony migration. Thank you, @mattgoud
- #41433: SF Migration - Email body translations. Thank you, @boherm
- #41420: Migration - Add KPI strip and listing statistics to migrated Customer Service page. Thank you, @ga-devfront
- #41406: Migrate country options. Thank you, @tleon
- #41397: Country Address format: replace legacy widget with Vue 3 visual builder. Thank you, @jolelievre
- #41050: Handle inelegible products “free gift” discount. Thank you, @nicosomb
- #40995: Disabled discount when only customer or customer group is deleted. Thank you, @tleon
- #40234: Delete specific prices when group is removed. Thank you, @aomaxime
Core
- #41561: Update Symfony components after 6.4.41 release. Thank you, @nicosomb
- #41492: Fix matrix generation workflow. Thank you, @jolelievre
- #41455: Improve AI Forms context (settings vs CRUD) and introduce the sub-context pattern. Thank you, @jolelievre
- #41449: Make branch input a simple input to use build branches. Thank you, @jolelievre
- #41446: Add a console command to list modules: prestashop:module:list. Thank you, @jf-viguier
- #41435: Add getHighestPosition alias. Thank you, @PrestaEdit
- #41416: Build Creator : Filter only Copilot Instructions and not all workflows. Thank you, @Progi1984
- #41356: Add CartId into product search handler when employeeId not provided. Thank you, @boherm
- #41305: Improve Connection::isBot() with modern crawlers and AI bots to prevent ghost carts and fake connections. Thank you, @jf-viguier
- #39837: Change matching method in ShopContextSubscriber. Thank you, @djbuch
Front office
- #41404: Improvement: add back parameter in FO customer template URLs. Thank you, @ThbPS
- #41006: Refacto: remove One-Page Checkout feature flag. Thank you, @ThbPS
Installer
- #41556: Merge set-pr-milestone into validate-pr-metadata to fix ordering and rerun staleness. Thank you, @jolelievre
- #41354: Amend B2B data model to align with revised hybrid-mode schema. Thank you, @soledis-contributeur
Tests
- #41560: Functional Tests : Fixed WS - Products : CRUD. Thank you, @Progi1984
- #41528: Functional Tests : API : DELETE /admin-api/discounts/{discountId}. Thank you, @Progi1984
- #41514: Functional Tests : Remove
@todo#41241. Thank you, @Progi1984 - #41456: Functional Tests : Fixed “API : GET /products/search”. Thank you, @Progi1984
- #41430: Functional Tests : Sync Title with JIRA. Thank you, @Progi1984
- #41418: Migration - Add Behat coverage for CustomerService status, bulk delete, and error paths. Thank you, @ga-devfront
- #41415: Functional tests : WS - CRUD category . Thank you, @nesrineabdmouleh
- #41355: TEST-12859 - Hall of Fame Our Community. Thank you, @paulnoelcholot
- #41311: Fix [TEST-1115] BO - Shop Parameters - SEO & URLs - Generate robots.txt file. Thank you, @mattgoud
Web services
- #34286: Fix field new not displayed on GET from API. Thank you, @Prestaworks
Code changes in modules, themes and tools
.github
- #47: Fix validate-pr-metadata: refresh PR data on rerun and parse trailing pipes. Thank you, @jolelievre
- #46: Clarify stale issue confirmation message to include verification on supported PrestaShop versions. Thank you, @cnavarro-prestashop
API Resources
- #207: Release 0.7.0. Thank you, @jolelievre
- #206: Bump 0.7.0. Thank you, @jolelievre
- #205: Document admin_api_multistore feature flag prerequisite in CONTEXT.md. Thank you, @jolelievre
- #204: Add projection of coverage after merging PRs from queue. Thank you, @kpodemski
- #203: Implement Country - Patch endpoint. Thank you, @Quetzacoalt91
- #191: fix(category): rename parentId to parentCategoryId. Thank you, @alexll
- #187: feat: add SearchCartRules Query. Thank you, @MatthieuCutin
- #158: Add delete country API endpoint . Thank you, @AureRita
- #125: feat(TaxRulesGroup): Add partial update on status. Thank you, @Kaikina
- #124: feat(composer): Add no-timeout option to long running script. Thank you, @Kaikina
- #104: Product category endpoints. Thank you, @Codencode
- #63: Add manufacturer endpoints. Thank you, @MattKelvin
Auto Upgrade module
- #1831: [Backport] UI tests - Update UI testing library and fix errors in CLI tests and rollback. Thank you, @Quetzacoalt91
- #1817: UI tests - Update UI testing library and fix errors in CLI tests and rollback. Thank you, @nesrineabdmouleh
- #1811: Bump to v7.6.5. Thank you, @Quetzacoalt91
- #1809: [Backport] Update B2B foundation SQL for 9.2.0. Thank you, @Quetzacoalt91
- #1806: Add migration file for 9.1.2. Thank you, @Quetzacoalt91
- #1805: Add migration file for 9.1.2. Thank you, @nicosomb
- #1800: Bump to v7.6.4. Thank you, @Quetzacoalt91
- #1796: Update B2B foundation SQL for 9.2.0. Thank you, @soledis-contributeur
- #1794: Check module compatibility with both source and destination versions of PrestaShop. Thank you, @Quetzacoalt91
Changes in developer documentation sources
- #2146: Document multi-shop usage of the Admin API. Thank you, @jolelievre
- #2145: Rename variable for clarity in hookActionCombinationForm. Thank you, @dali-rajab
- #2144: Update hooks for 9.1.2. Thank you, @nicosomb
- #2143: fix getting started link. Thank you, @jf-viguier
- #2131: Synchronize hook reference pages with PrestaShop 9.1 metadata. Thank you, @MAX-IT-Tech
- #2129: Global refactor of themes section. Thank you, @tblivet
Classic theme
- #213: Bump version 3.1.2. Thank you, @jolelievre
Dashboard Activity module
Distribution API
- #90: Update to 9.1.3. Thank you, @nicosomb
- #89: Enable updates to PS 9.1.2 with Update Assistant 7.6.5. Thank you, @Quetzacoalt91
- #88: Add release notes of PrestaShop 8.2.6 and 9.1.1. Thank you, @Quetzacoalt91
Docker images
- #479: Sync backlog of Docker images. Thank you, @ps-jarvis
- #478: Sync backlog of Docker images. Thank you, @ps-jarvis
Email Alerts module
Faceted search module
- #1231: Revert PR 1224. Thank you, @Hlavtox
- #1224: Refactor out_of_stock filter conditions for availability. Thank you, @PululuK
Hummingbird theme
- #1019: [FORWARDPORT] Sync 2.x into develop. Thank you, @tblivet
- #1018: Fix json ld encode. Thank you, @tblivet
- #1014: Fix color swatch issue. Thank you, @tblivet
- #1010: Update storybook workflow trigger branch from dev to develop. Thank you, @ga-devfront
- #1009: Update storybook workflow trigger branch from dev to develop. Thank you, @ga-devfront
- #1005: Backport/2.x. Thank you, @ga-devfront
- #1004: Fix/release action. Thank you, @ga-devfront
- #1003: Fix release GitHub Action. Thank you, @ga-devfront
- #1002: Fix GitHub actions. Thank you, @ga-devfront
- #1001: bump: to version 2.1.0. Thank you, @ga-devfront
- #1000: Fix display order detail hook. Thank you, @tblivet
- #998: Fix layer issue created by the use of SCSS extend. Thank you, @tblivet
- #997: Fix issue: The WebPack preloadFonts configuration incorrectly resolves font URLs in npm run watch mode.. Thank you, @metineren
Native-modules
New Products module
Nightly board
- #155: Revert “Update Node.js version to 26.1 in Dockerfile”. Thank you, @Progi1984
- #154: Update Node.js version to 26.1 in Dockerfile. Thank you, @arthurzenika
PHP Developer Tools
- #86: Update PHP version for PHPStan Custom rules check. Thank you, @Quetzacoalt91
- #82: Update run.sh. Thank you, @PrestaEdit
- #81: Update Config.php fix #80. Thank you, @cdigruttola
PrestaShop contributors website
- #218: MEP Master 20260515. Thank you, @Progi1984
- #211: Add pagination to TopCard and show full lists. Thank you, @PrestaEdit
Ps_onepagecheckout
- #54: Improvement/decouple hummingbird. Thank you, @ThbPS
- #48: [SPE-134] Added payment_html comparison. Thank you, @L3RAZ
- #47: [SPE-133] Adds OPC submit event. Thank you, @L3RAZ
- #46: [SPE-129] Imported needed templates from hummingbird and replaced includes with…. Thank you, @L3RAZ
- #41: Fix: missing OPC checkout templates . Thank you, @ThbPS
- #33: [SPE-115] - Problème d’affichage et sauvegarde des champs de la modale. Thank you, @sylardiere
- #29: Feat: improve checkout robustness and error recovery. Thank you, @ThbPS
Skills
- #3: Request agents to diff the changes while checking the compatibility with the update. Thank you, @Quetzacoalt91
Social Follow module
- #57: Fix social links keys preservation when applying order. Thank you, @Codencode
Special offers module
- #28: Fix CI with tag 9.0.3. Thank you, @jf-viguier
- #27: Release version 2.0.0. Thank you, @Hlavtox
The PrestaShop open source project
- #309: Download page. Thank you, @kpodemski
Traces
- #224:
traces:fetch:contributors: Fixed blog with scheme. Thank you, @Progi1984
UI Testing Library
- #982: Chrome change some native error messages. Thank you, @Progi1984
- #980: Fix BOBasePage help sidebar methods to support legacy pages. Thank you, @mattgoud
- #979: Add methods in Addresses page. Thank you, @nesrineabdmouleh
- #977:
boDiscountsPage: Added methodsgetDiscountStatus&setDiscountStatus. Thank you, @Progi1984 - #972: Adapt test for free gift. Thank you, @nicosomb
- #971:
ProductCombination: Added prices in TE & TI. Thank you, @Progi1984 - #965:
boProductPage: Fixed methodgetTextColumn. Thank you, @Progi1984 - #964:
boProductPage: Added some methods to get more informations. Thank you, @Progi1984 - #956: Create category - Add methods to get fr values and get tinymce input. Thank you, @nesrineabdmouleh
- #955: Remove eslint-plugin-deprecation. Thank you, @Progi1984
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.
alexll
aomaxime
arthurzenika
AureRita
axel-paillaud
boherm
cdigruttola
cnavarro-prestashop
Codencode
dali-rajab
djbuch
ga-devfront
gross-nvs
Hlavtox
jf-viguier
jolelievre
Kaikina
kpodemski
L3RAZ
Maofree
mattgoud
MatthieuCutin
MattKelvin
MAX-IT-Tech
metineren
nesrineabdmouleh
nicohery
nicosomb
paulnoelcholot
PrestaEdit
Prestaworks
Progi1984
ps-jarvis
PululuK
Quetzacoalt91
soledis-contributeur
sylardiere
tblivet
ThbPS
tleon
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!