Skip to main content
Version: 2026.3

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\ModalRenderService and Model\Response\DirectEditModal. Drive Direct Edit through a Service\Studio\DirectEditService instance configured with your own PermissionServiceInterface instead, see Integrate into Custom Application.
  • Service\PublishService, Service\MercureUrlService, the topic http://www.pimcore.com/direct-edit/client-upload/user/<userId> and the methods that publish it on ClientCommunicationService.
  • pimcore_direct_edit.mercure_settings and parameters.mercure.hub.*. The legacy hub client now takes the hub's server URL and JWT key from pimcore_studio_backend.mercure_settings, so both can be dropped unless you still run a legacy frontend. That one needs mercure_settings.client_side_url wherever the hub does not answer on https://<host>/hub/.well-known/mercure, see Mercure Setup. mercure_settings.jwt_cookie_host and jwt_cookie_strictness have had no effect since 2026.1.
  • Service\Permission\PimcoreBackendPermissionService, unreachable since the Studio backend bundle became a hard dependency. StudioPermissionService is the default, and PERMISSION_NAME now lives on PermissionServiceInterface.

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 (or cache:clear) during the build/deploy phase while the bundle directory (usually under vendor/) is still writable. Standard Pimcore deployments already do this. When assets:install runs in copy mode, run cache:warmup before it, otherwise no frontend assets are copied. If the filesystem becomes read-only before the first warmup, the bundle fails with BuildArchiveNotWritableException because there is no build to serve.

Upgrade to 2026.1.0​

  • Added support for PHP 8.5.
  • Removed support for PHP 8.3 and Symfony v6.

Removed Admin Classic / ExtJS Support​

  • PimcoreDirectEditBundle no longer implements PimcoreBundleAdminClassicInterface and no longer uses BundleAdminClassicTrait. The getJsPaths() and getCssPaths() methods have been removed.
  • All ExtJS-based frontend assets have been deleted:
    • src/Resources/public/js/startup.js
    • src/Resources/public/js/modal.js
    • src/Resources/public/js/bootstrap-modal.js
    • src/Resources/public/css/style.css

Removed Controllers​

  • AssetEditController has been removed (was Admin Classic based).
  • MercureController has been removed (was Admin Classic based).
  • StudioRouteLoader has 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/:

    • CancelEditController
    • ConfirmUploadController
    • GenerateLinkController
    • GetStatusController (replaces the former DefaultController)
    • ResolveConflictController
  • New Studio event classes added:

    • Pimcore\Bundle\DirectEditBundle\Event\Studio\DirectEditLinkEvent
    • Pimcore\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​

  • ClientController is now marked @internal.
  • ClientController constructor: ClientCommunicationService $clientCommunicationService dependency has been replaced by DirectEditEventNotifierInterface $notificationService.
  • ClientCommunicationService constructor: a new optional ?string $clientHostUrl parameter has been added as the last argument.
  • The internal method call ClientCommunicationService::sendStartLocalEditingEvent() used inside ClientController has been replaced by DirectEditEventNotifierInterface::notifyStartEditing().
  • ClientController upload handler now calls DirectEditEventNotifierInterface::notifyUploadComplete() instead of ClientCommunicationService::sendClientUploadEvent().
  • Both notifyStartEditing() and notifyUploadComplete() now return string[] (warnings for non-fatal failures), and the JSON responses from ClientController will include a warnings key 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: hydrates DirectEditLink schema objects.
  • Pimcore\Bundle\DirectEditBundle\Hydrator\DirectEditStatusHydratorInterface: hydrates DirectEditStatus schema 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.