Releases: coreshop/CoreShop
2026.1.0-beta.1
2026.1.0-beta.1
Version scheme aligned with Pimcore
CoreShop switches from semantic versioning to Pimcore's year-based scheme. The previous line (5.x)
remains the last semver release and continues to receive maintenance; all new development targets
2026.1 and up.
Pimcore 2026.1 minimum requirement
All CoreShop components and bundles now require pimcore/pimcore: ^2026.1. Companion bundles
(pimcore/studio-ui-bundle, pimcore/studio-backend-bundle, pimcore/generic-data-index-bundle)
are likewise bumped to ^2026.1.
Classic Admin / ExtJS removed
Pimcore Classic Admin (ExtJS) support is removed. CoreShop 2026.1 targets Pimcore Studio exclusively.
Removed:
- All
Resources/public/pimcore/ExtJS asset trees (~480 JS/CSS files across 22 bundles). - All
AdminClass/namespaces (grid column operators, admin-JS injection listeners, admin-grid filter
listeners, the Pimcore Grid Config Installer). - All
classic_admin.ymlservice files and the conditionalPimcoreAdminBundleloading blocks in
bundle extensions. pimcore_adminconfiguration section fromCoreShopPimcoreExtensionand all bundleConfiguration
classes, plus theregisterPimcoreResources()helper onAbstractPimcoreExtension.CoreShop\Component\Pimcore\DataObject\Grid\GridFilterInterface,AsGridFilterattribute,
RegisterGridFilterPasscompiler pass,GridConfigInstaller/GridConfigInstallerInterface.CoreShop\Bundle\PimcoreBundle\Controller\Admin\*controllers. Studio-facing actions were moved to
CoreShop\Bundle\PimcoreBundle\Controller\{DynamicDropdown,Grid}Controller.- ExtJS menu rendering (
coreshop_menuroute,menu.js.twig,JsonRenderer). The Studio menu API
(coreshop_menu_api,StudioRenderer) is unchanged. pimcore/admin-ui-classic-bundlesuggest entries from all bundlecomposer.json.- Classic Admin firewall / ACL / role hierarchy scaffolding in
config/packages/security.yaml.
If you have project code referencing any of these symbols, see the migration notes in the
upgrade guide.
Studio extension points unchanged
The following Studio APIs, routes, and registries continue to work as in 5.1:
GET /pimcore-studio/api/coreshop/grid/studio-filters/{listType}GET /pimcore-studio/api/coreshop/grid/actions/{listType}POST /pimcore-studio/api/coreshop/grid/apply-action/pimcore-studio/api/coreshop/dynamic-dropdown/{options,methods}/pimcore-studio/api/coreshop/menus- The seven entity extension types (form / table-column / save-decorator / tab / action / validation /
lifecycle) and all dynamic type registrations.
Static routes migrated to native Symfony routing (opt-in)
CoreShop no longer depends on the deprecated pimcore/static-routes-bundle. The ~40 frontend shop
routes previously defined in FrontendBundle/Resources/install/pimcore/staticroutes.yml and written
into Pimcore's settings-store on install are now declared as native Symfony routes under
FrontendBundle/Resources/config/routes/, split per URL topic (shop/index.yaml,
shop/cart.yaml, shop/catalog.yaml, shop/checkout.yaml, shop/customer.yaml, shop/wishlist.yaml,
partial.yaml).
Routes are opt-in. The bundle no longer auto-registers them via Pimcore's pimcore_bundle route
loader. Projects must explicitly import them in their own config/routes.yaml:
coreshop_frontend:
resource: "@CoreShopFrontendBundle/Resources/config/routes.yaml"Projects with a custom storefront can skip the top-level import and cherry-pick only the sub-files
they want (e.g. routes/shop/cart.yaml without routes/shop/checkout.yaml). See the Installation
Guide for details.
Additional effects:
- Installing CoreShop no longer runs a route-installation step; the Symfony router picks the routes
up at cache warm-up. PimcoreRoutesInstaller,RouteConfiguration, and thecoreshop.resource.installer.routes
service definition are removed.PimcoreStaticRoutesBundleis removed fromconfig/bundles.phpand from the conditional
registration inCoreShopResourceBundle::registerDependentBundles().LocaleSwitcherExtensionno longer callsStaticroute::getByName()— it inspects the current
route's compiled parameters viaRouterInterface::getRouteCollection().- The
pimcore_wishlist_summarypath previously exposed both/{_locale}/shop/wishlistand
/{_locale}/shop/wishlist/{identifier}under one name. The identifier variant is now a separate
route,coreshop_wishlist_summary_identifier. Existing twig/template callers pass no identifier
and are unaffected. - Route names and reverse URLs are preserved 1:1 — no template or redirect URL change is required.
Documentation
Developer docs covering rule-engine, payment-provider, menu-bundle, form-extension, and
order-detail extension have been rewritten to use Studio patterns (StudioFormBundle schema,
TabExtension / ActionExtension slots). ExtJS code samples were removed.
5.1.0-beta.1
5.1.0
Pimcore Studio v2
CoreShop 5.1 introduces support for Pimcore Studio. Both Studio and the ExtJS-based Classic Admin
are now supported as optional, independent installations — install either,
or both side-by-side. Existing Classic-Admin-only installations continue to work without
changes.
Classic-Admin internals moved to AdminClass/ subnamespace
Internal helper classes that exist solely to integrate with the ExtJS Classic Admin
(grid column config operators, admin-JS injection listeners, admin-grid filter listeners, etc.)
have been moved into a dedicated AdminClass/ subnamespace within their bundles.
This is a preparatory step: it isolates Classic-Admin-specific code so it can be cleanly removed
in a future major version once Studio v2 covers all functionality. The classes still exist and
Classic Admin continues to work without changes — only the fully-qualified namespace changed.
If you imported any of these classes directly via use statements or referenced them by FQCN as
service IDs in your own configuration, see UPGRADE-5.1.md for the rename mapping.
Upgrade
Classic-Admin internals moved to AdminClass/ subnamespace
Helper classes that exist solely to integrate with the ExtJS-based Classic Admin
have been moved into a new AdminClass/ subnamespace inside their bundles. This
isolates Classic-Admin-only code so it can be cleanly removed in a future major
version once Pimcore Studio v2 covers all functionality.
The classes are unchanged in behavior — only their fully-qualified namespace is
different. Classic Admin continues to work without any user action required.
You only need to take action if you directly imported one of these classes via
use statements, referenced them by FQCN as a service ID in your own
configuration, or extended them in a custom subclass.
Renamed classes
| Old FQCN | New FQCN |
|---|---|
CoreShop\Bundle\OrderBundle\Pimcore\GridColumnConfig\Operator\PriceFormatter |
CoreShop\Bundle\OrderBundle\AdminClass\Pimcore\GridColumnConfig\Operator\PriceFormatter |
CoreShop\Bundle\OrderBundle\Pimcore\GridColumnConfig\Operator\OrderState |
CoreShop\Bundle\OrderBundle\AdminClass\Pimcore\GridColumnConfig\Operator\OrderState |
CoreShop\Bundle\OrderBundle\Pimcore\GridColumnConfig\Operator\Factory\OrderStateFactory |
CoreShop\Bundle\OrderBundle\AdminClass\Pimcore\GridColumnConfig\Operator\Factory\OrderStateFactory |
CoreShop\Bundle\OrderBundle\Pimcore\GridColumnConfig\Operator\Factory\PriceFormatterFactory |
CoreShop\Bundle\OrderBundle\AdminClass\Pimcore\GridColumnConfig\Operator\Factory\PriceFormatterFactory |
CoreShop\Bundle\OrderBundle\EventListener\Grid\CartFilterListener |
CoreShop\Bundle\OrderBundle\AdminClass\EventListener\Grid\CartFilterListener |
CoreShop\Bundle\ResourceBundle\Pimcore\GridColumnConfig\ResourceFieldGetter |
CoreShop\Bundle\ResourceBundle\AdminClass\Pimcore\GridColumnConfig\ResourceFieldGetter |
CoreShop\Bundle\ResourceBundle\Installer\PimcoreGridConfigInstaller |
CoreShop\Bundle\ResourceBundle\AdminClass\Installer\PimcoreGridConfigInstaller |
CoreShop\Bundle\MoneyBundle\EventListener\IndexActionSettingsSubscriber |
CoreShop\Bundle\MoneyBundle\AdminClass\EventListener\IndexActionSettingsSubscriber |
CoreShop\Bundle\CoreBundle\Pimcore\GridColumnConfig\Operator\StorePrice |
CoreShop\Bundle\CoreBundle\AdminClass\Pimcore\GridColumnConfig\Operator\StorePrice |
CoreShop\Bundle\CoreBundle\Pimcore\GridColumnConfig\Operator\Factory\StorePriceFactory |
CoreShop\Bundle\CoreBundle\AdminClass\Pimcore\GridColumnConfig\Operator\Factory\StorePriceFactory |
CoreShop\Bundle\CoreBundle\EventListener\ProductStoreValuesAdminGetListener |
CoreShop\Bundle\CoreBundle\AdminClass\EventListener\ProductStoreValuesAdminGetListener |
CoreShop\Bundle\CoreBundle\EventListener\CustomerOrderDeletionListener |
CoreShop\Bundle\CoreBundle\AdminClass\EventListener\CustomerOrderDeletionListener |
CoreShop\Bundle\CoreBundle\EventListener\AdminJavascriptListener |
CoreShop\Bundle\CoreBundle\AdminClass\EventListener\AdminJavascriptListener |
CoreShop\Bundle\MenuBundle\EventListener\MenuAdminListener |
CoreShop\Bundle\MenuBundle\AdminClass\EventListener\MenuAdminListener |
CoreShop\Bundle\MenuBundle\EventListener\PimcoreAdminListener |
CoreShop\Bundle\MenuBundle\AdminClass\EventListener\PimcoreAdminListener |
CoreShop\Bundle\PimcoreBundle\EventListener\AdminJavascriptListener |
CoreShop\Bundle\PimcoreBundle\AdminClass\EventListener\AdminJavascriptListener |
CoreShop\Bundle\PimcoreBundle\EventListener\Grid\ObjectListFilterListener |
CoreShop\Bundle\PimcoreBundle\AdminClass\EventListener\Grid\ObjectListFilterListener |
How to fix
Search-and-replace your codebase / config:
CoreShop\Bundle\OrderBundle\Pimcore\GridColumnConfig\
→ CoreShop\Bundle\OrderBundle\AdminClass\Pimcore\GridColumnConfig\
CoreShop\Bundle\OrderBundle\EventListener\Grid\
→ CoreShop\Bundle\OrderBundle\AdminClass\EventListener\Grid\
CoreShop\Bundle\ResourceBundle\Pimcore\GridColumnConfig\
→ CoreShop\Bundle\ResourceBundle\AdminClass\Pimcore\GridColumnConfig\
CoreShop\Bundle\ResourceBundle\Installer\PimcoreGridConfigInstaller
→ CoreShop\Bundle\ResourceBundle\AdminClass\Installer\PimcoreGridConfigInstaller
CoreShop\Bundle\MoneyBundle\EventListener\IndexActionSettingsSubscriber
→ CoreShop\Bundle\MoneyBundle\AdminClass\EventListener\IndexActionSettingsSubscriber
CoreShop\Bundle\CoreBundle\Pimcore\GridColumnConfig\
→ CoreShop\Bundle\CoreBundle\AdminClass\Pimcore\GridColumnConfig\
CoreShop\Bundle\CoreBundle\EventListener\(ProductStoreValuesAdminGetListener|CustomerOrderDeletionListener|AdminJavascriptListener)
→ CoreShop\Bundle\CoreBundle\AdminClass\EventListener\$1
CoreShop\Bundle\MenuBundle\EventListener\
→ CoreShop\Bundle\MenuBundle\AdminClass\EventListener\
CoreShop\Bundle\PimcoreBundle\EventListener\
→ CoreShop\Bundle\PimcoreBundle\AdminClass\EventListener\
If you used the recommended symbolic service IDs (e.g. coreshop.order.grid.price_formatter)
instead of FQCN-as-service-ID, no DI changes are needed.
Admin controllers no longer extend Pimcore\Bundle\AdminBundle\Controller\AdminAbstractController
CoreShop's admin controllers no longer extend Pimcore's AdminAbstractController,
which has been deprecated upstream. Methods previously inherited from it
(adminJson, getAdminUser, pimcoreSerializer, etc.) are no longer available
on these controllers.
This affects you only if you wrote a custom subclass of one of CoreShop's admin
controllers and called any of those inherited methods. Inject the equivalent
services directly in your subclass instead.
5.0.1
What's Changed
- All changes merged from 4.1.*
- Dependency Updates in FrontendBundle Design v2
Full Changelog: 5.0.0...5.0.1
4.1.11
What's Changed
- Fix order token generator entropy using CSPRNG and 32-char tokens by @Copilot in #2964
- Fix password reset security: user enumeration, weak tokens, plaintext storage, missing TTL by @Copilot in #2961
- backport passwordResetHashCreatedAt user migration from 2026.x by @dpfaffenbauer in #3008
- [IndexBundle] OpenSearchWorker: Refactor delete methods for index operations by @aarongerig in #3028
Full Changelog: 4.1.10...4.1.11
4.1.10
What's Changed
- Fix outdated Menu Bundle docs for ExtJs event handling by @Copilot in #2966
- Add multi-select drag & drop support for objectMultihref condition lists by @Copilot in #2960
- Add CLI command for setting up states/regions for additional countries by @Copilot in #2959
- [MessengerBundle] Add auto-refresh and chart tooltip by @Copilot in #2965
- Fix information exposure in OrderInvoiceController and OrderShipmentController by @Copilot in #2962
New Contributors
- @Copilot made their first contribution in #2966
Full Changelog: 4.1.9...4.1.10
4.1.9
What's Changed
- Fix Injection in CustomerTransformerController by @dpfaffenbauer in #2945
Full Changelog: 4.1.8...4.1.9
5.0.0
What's Changed
- [FrontendBundle] Design v2 and Pimcore 12 compatibility by @codingioanniskrikos in #2744
- [IndexBundle] Optimize 404 Exception Handling on Index Item Deletion by @aarongerig in #2894
- [IndexBundle] Ignore missing 404 error when deleting non-existent document by @aarongerig in #2896
- [CoreBundle] fix store values version preview with null values by @dpfaffenbauer in #2912
- [GraphQL] enable all translations for graphql by @dpfaffenbauer in #2914
- [Pimcore] downgrade doctrine/dbal by @dpfaffenbauer in #2922
4.1.8
What's Changed
- [Messenger] dispatch
FailedMessageDetailsEventto allow customization of failed message details generation by @jdreesen in #2911 - [Messenger] wrap failed message details info modal data in
<pre>tags by @jdreesen in #2910 - [Pimcore] require Pimcore 11.5 only and test for PHP 8.3 by @dpfaffenbauer in #2937
- [CoreBundle] fix reports injection by @dpfaffenbauer in #2936
Full Changelog: 4.1.7...4.1.8
4.1.7
What's Changed
- [CoreBundle] fix store values version preview with null values by @dpfaffenbauer in #2912
- [GraphQL] enable all translations for graphql by @dpfaffenbauer in #2914
Full Changelog: 4.1.6...4.1.7
4.1.6
What's Changed
- [IndexBundle] Ignore missing 404 error when deleting non-existent document by @aarongerig in #2896
- [4.1] replace outdated translation ts with t by @philippmunz in #2905
- [Release] 4.1.6 by @dpfaffenbauer in #2906
New Contributors
- @philippmunz made their first contribution in #2905
Full Changelog: 4.1.5...4.1.6