Skip to main content
Version: 2026.2

Upgrade Information

The following steps are necessary during updating to newer versions.

Upgrade to 2026.2.5​

Frontend Build Ships as a Packaged Archive​

The compiled Studio frontend is no longer committed as an expanded public/studio/build/ directory. It now ships as a single archive (build-dist/build-<id>.zip) that is extracted into 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​

PHP & Symfony Version Support​

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

Removed Admin Classic / ExtJS UI​

  • Removed the pimcore/admin-ui-classic-bundle dependency. The bundle no longer implements PimcoreBundleAdminClassicInterface or uses BundleAdminClassicTrait.
  • Removed all ExtJS-based JavaScript and CSS paths (getCssPaths() and getJsPaths() methods removed from PimcoreDataQualityManagementBundle).
  • PimcoreAdminBundle is no longer registered as a dependent bundle.
  • TreeBadgeService and TreeBadgeServiceInterface have been removed (they were @internal).

Interface & Return Type Changes​

  • RuleDefinitionInterface::getSuggestion(): The parameter array $objectData has been replaced by Concrete $object. Custom rule definitions implementing this interface must accept a Pimcore\Model\DataObject\Concrete instance instead of an array.
  • AbstractRuleDefinition::getSuggestion(): Same change as above. Custom classes extending AbstractRuleDefinition must update their getSuggestion() signature from array $objectData to Concrete $object.
  • ScoreServiceInterface::calculateScores(): Added a new required parameter array $fieldDefinitions between $dataObject and $skipSaving. Custom implementations of ScoreServiceInterface must be updated.
    • Old: calculateScores(Concrete $dataObject, bool $skipSaving = false): void
    • New: calculateScores(Concrete $dataObject, array $fieldDefinitions, bool $skipSaving = false): void
  • DetailWidgetHydratorInterface::hydrate(): The parameter array $objectData has been replaced by Concrete $object. This interface is @internal.
  • RuleDataHydratorInterface::hydrate(): The parameter array $objectData has been replaced by Concrete $object. This interface is @internal.

Messenger Transport Configuration​

  • The messenger transport DSN is now configurable via the %pimcore.messenger.transport_dsn_prefix% container parameter instead of being hardcoded to doctrine://default. This lets the installer wire the transport DSN from environment variables (for example PIMCORE_MESSENGER_TRANSPORT_DSN_PREFIX).

Pimcore Studio Enhancements​

  • Added Studio class editor field type support for the Data Quality field definition, including rule definition configuration via Pimcore Studio.

Doctrine​

  • Removed Doctrine enum mapping from the bundle test configuration.

Upgrade to 1.6.0​

  • Added Pimcore Studio Backend Bundle support.
  • [Custom Rules] The data structure of the getSuggestion() method's object parameter differed between Admin Classic and Pimcore Studio at the time. This distinction no longer applies: since the 2026.1.0 upgrade, getSuggestion() always receives a Pimcore\Model\DataObject\Concrete instance. See Custom Rule Definition for the current signature.