Upgrade Notes
Upgrade to 2026.3.0
Deprecations
The bundle's own Mercure hub and the modal protocol built on it only served the classic admin UI and the legacy Portal Engine frontend. Deprecated, will be removed in 2027.1:
Controller\FileEditControllerTrait,Service\ModalRenderServiceandModel\Response\DirectEditModal. Drive Direct Edit through aService\Studio\DirectEditServiceinstance configured with your ownPermissionServiceInterfaceinstead, see Integrate into Custom Application.Service\PublishService,Service\MercureUrlService, the topichttp://www.pimcore.com/direct-edit/client-upload/user/<userId>and the methods that publish it onClientCommunicationService.pimcore_direct_edit.mercure_settingsandparameters.mercure.hub.*. The legacy hub client now takes the hub's server URL and JWT key frompimcore_studio_backend.mercure_settings, so both can be dropped unless you still run a legacy frontend. That one needsmercure_settings.client_side_urlwherever the hub does not answer onhttps://<host>/hub/.well-known/mercure, see Mercure Setup.mercure_settings.jwt_cookie_hostandjwt_cookie_strictnesshave had no effect since 2026.1.Service\Permission\PimcoreBackendPermissionService, unreachable since the Studio backend bundle became a hard dependency.StudioPermissionServiceis the default, andPERMISSION_NAMEnow lives onPermissionServiceInterface.
Upgrade to 2026.2.3
Frontend Build Ships as a Packaged Archive
The compiled Studio frontend is no longer committed as an expanded
src/Resources/public/studio/build/ directory. It now ships as a single archive
(build-dist/build-<id>.zip) that is extracted into src/Resources/public/studio/build/
automatically during cache warmup.
pimcore/studio-ui-bundle ^2026.2.1 is now required, as it provides the
archive extraction.
Note: Read-only filesystem deployments must run
bin/console cache:warmup(orcache:clear) during the build/deploy phase while the bundle directory (usually undervendor/) is still writable. Standard Pimcore deployments already do this. Whenassets:installruns in copy mode, runcache:warmupbefore it, otherwise no frontend assets are copied. If the filesystem becomes read-only before the first warmup, the bundle fails withBuildArchiveNotWritableExceptionbecause there is no build to serve.
Upgrade to 2026.1.0
- Added support for
PHP8.5. - Removed support for
PHP8.3and Symfonyv6.
Removed Admin Classic / ExtJS Support
PimcoreDirectEditBundleno longer implementsPimcoreBundleAdminClassicInterfaceand no longer usesBundleAdminClassicTrait. ThegetJsPaths()andgetCssPaths()methods have been removed.- All ExtJS-based frontend assets have been deleted:
src/Resources/public/js/startup.jssrc/Resources/public/js/modal.jssrc/Resources/public/js/bootstrap-modal.jssrc/Resources/public/css/style.css
Removed Controllers
AssetEditControllerhas been removed (was Admin Classic based).MercureControllerhas been removed (was Admin Classic based).StudioRouteLoaderhas been removed; Studio routing is now handled directly via configuration.
Studio UI Implementation
-
Full Studio UI support has been implemented. The bundle now ships with a React/TypeScript frontend under
assets/studio/. -
New Studio backend controllers added under
src/Controller/Studio/:CancelEditControllerConfirmUploadControllerGenerateLinkControllerGetStatusController(replaces the formerDefaultController)ResolveConflictController
-
New Studio event classes added:
Pimcore\Bundle\DirectEditBundle\Event\Studio\DirectEditLinkEventPimcore\Bundle\DirectEditBundle\Event\Studio\DirectEditStatusEvent
These classes exist but the bundle does not dispatch them anywhere. There is currently no way to hook into a direct edit request through the event system.
Interface & API Changes
ClientControlleris now marked@internal.ClientControllerconstructor:ClientCommunicationService $clientCommunicationServicedependency has been replaced byDirectEditEventNotifierInterface $notificationService.ClientCommunicationServiceconstructor: a new optional?string $clientHostUrlparameter has been added as the last argument.- The internal method call
ClientCommunicationService::sendStartLocalEditingEvent()used insideClientControllerhas been replaced byDirectEditEventNotifierInterface::notifyStartEditing(). ClientControllerupload handler now callsDirectEditEventNotifierInterface::notifyUploadComplete()instead ofClientCommunicationService::sendClientUploadEvent().- Both
notifyStartEditing()andnotifyUploadComplete()now returnstring[](warnings for non-fatal failures), and the JSON responses fromClientControllerwill include awarningskey when warnings are present.
New Interfaces
The following new interfaces have been added (all marked @internal):
Pimcore\Bundle\DirectEditBundle\Service\DirectEditEventNotifierInterface: abstraction over event notification channels, with methods:notifyStartEditing(AssetToken $assetToken): string[]notifyUploadComplete(AssetToken $assetToken): string[]
Pimcore\Bundle\DirectEditBundle\Service\Studio\DirectEditServiceInterface: Studio backend service interface with methods:generateLink(),cancelEdit(),confirmUpload(),resolveConflict(),getStatus().Pimcore\Bundle\DirectEditBundle\Hydrator\DirectEditLinkHydratorInterface: hydratesDirectEditLinkschema objects.Pimcore\Bundle\DirectEditBundle\Hydrator\DirectEditStatusHydratorInterface: hydratesDirectEditStatusschema objects.
Update to Version 2.5
- It is now possible to define the JWT Cookie Host and strictness via configuration.
Update to Version 2.1
Please be aware that version 2.1 of the bundle drops support for Pimcore 10.6. Make sure to upgrade to Pimcore 11.1 or higher before updating the bundle.