Drupal 11.2.0
23 June 2025
Drupal version 11.2.0 is now available (major release).
Upgrading to Drupal 11.2.0
Drupal 11.2.0 can be upgraded to (or installed) using any of Installatron's products. Use Installatron's optional Automatic Update feature to automatically apply Drupal updates as new versions are released, or use Installatron's Clone feature to duplicate an existing Drupal install to test the 11.2.0 upgrade prior to applying it live. Get started managing your Drupal installations with Installatron
What's New in Drupal 11.2.0
DRUPAL 11.2.0 CHANGELOG
Bug Fixes and Changes
- entity_browser_entity_form_field_widget_third_party_settings_form hooks can no longer return NULL
- Add @group #slow to some additional tests
- Split PackageInstallTest into two
- Deprecate TestDiscovery test file scanning, use PHPUnit API instead
- StringDatabaseStorage::deleteStrings() does not work
- Add return types to EntityDefinitionTestTrait
- JSON:API assumes entity reference field's main property must be the entity ID
- Node access default grant behavior is not clear
- Deprecate TestDiscovery test file scanning, use PHPUnit API instead
- Second level menu items can't be reached if they have children
- Fix defgroup open and close that were separated during Hook conversion
- Wrong alias for access_policy_processor service in core.services.yml
- Cannot modify a table which uses JSON type
- Update PHPStan to 2.1.17
- Fix phpstan errors in UpdatePathTestTrait
- Follow-up: SDC `enum` props should have translatable labels: use `meta:enum`
- Update Composer and development dependencies for 11.2.0
- Update Coder to 8.3.30
- Update CKEditor 5 to 45.2.0
- Update to Symfony 7.3.0
- InvalidComponentException when workspaces ui is installed
- SDC `enum` props should have translatable labels: use `meta:enum`
- Navigation top bar should utilize Drupal.displace()
- Update prettier/PostCSS/stylelint for 11.2
- Remove @nest from claro stylesheets
- Package Manager's direct-write mode still tries to check for rsync
- Stop creating a "Stage" workspace by default on module installation
- WorkspacesHtmlEntityFormController builds entity forms twice
- Existence check for JavaScript object and it's property across multi-lines can replace with optional chaining
- Regression: Drupal.displace() not working on new Navigation module in 11.2
- Hidden dependency on block_content in layout_builder
- Hidden dependency on block_content in layout_builder
- Invalid service alias for backend_overridable services in some cases when default_backend is set
- Remove lazy declaration and proxy class for cron and use service closure instead
- Navigation module's help text should not link to the contrib module
- ModuleHandler::resetImplementations should reset all properties with hook implementations
- Random failure: "Drupal.contextual.ContextualModelView is not a constructor"
- Add a SECURITY.md explaining how to report security vulnerabilities properly
- The insecure examples code does not include delimiters for strings
- Update config schema for Symfony 7.3 mailer security improvements
- Deprecate BrowserTestBase::getOptions()
- Convert ckEditor5EditorHeightTest to WebDriver test
- Remove unused BrowserTestBase::$originalContainer
- Incorrect type for #access in RenderElementBase documentation
- Cache tags added by hook_block_view_BASE_BLOCK_ID_alter are ignored on blocks that implement MainContentBlockPluginInterface or TitleBlockPluginInterface
- Extract testUriHost from UuidValidatorTest into its own class
- Conflict with Project Browser <2.1 and Automatic Updates <4
- Use a transaction PoDatabaseWriter to improve performance
- Add Cristina Chumillas as UX Manager, Emma Horrell as provisional UX Manager to Drupal core
- Call to undefined function Drupal\system\Plugin\ImageToolkit\imageavif()
- Deprecate TestDiscovery test file scanning, use PHPUnit API instead
- Deprecate TestDiscovery test file scanning, use PHPUnit API instead
- [random test failure] PackageUpdateTest::testPackageUpdate
- Update PHPStan to 2.1.17
- Fix phpstan errors in UpdatePathTestTrait
- Follow-up: SDC `enum` props should have translatable labels: use `meta:enum`
- Update Composer and development dependencies for 11.2.0
- Update Coder to 8.3.30
- Update CKEditor 5 to 45.2.0
- Update to Symfony 7.3.0
- InvalidComponentException when workspaces ui is installed
- The ConfigExists validation constraint should support dynamic type expressions
- SDC `enum` props should have translatable labels: use `meta:enum`
- Navigation top bar should utilize Drupal.displace()
- Package Manager's direct-write mode still tries to check for rsync
- Stop creating a "Stage" workspace by default on module installation
- WorkspacesHtmlEntityFormController builds entity forms twice
- Make doctrine/lexer:^3.0 compatible with \Drupal\Component\Annotation\Doctrine
- Existence check for JavaScript object and it's property across multi-lines can replace with optional chaining
- Regression: Drupal.displace() not working on new Navigation module in 11.2
- Update prettier/PostCSS/stylelint for 11.2
- Hidden dependency on block_content in layout_builder
- Hidden dependency on block_content in layout_builder
- Invalid service alias for backend_overridable services in some cases when default_backend is set
- Remove lazy declaration and proxy class for cron and use service closure instead
- Navigation module's help text should not link to the contrib module
- ModuleHandler::resetImplementations should reset all properties with hook implementations
- Random failure: "Drupal.contextual.ContextualModelView is not a constructor"
- Add a SECURITY.md explaining how to report security vulnerabilities properly
- The insecure examples code does not include delimiters for strings
- Update config schema for Symfony 7.3 mailer security improvements
- timezone.js calls the system.timezone route with a date parameter that is never used
- Deprecate BrowserTestBase::getOptions()
- Convert ckEditor5EditorHeightTest to WebDriver test
- Remove unused BrowserTestBase::$originalContainer
- Incorrect type for #access in RenderElementBase documentation
- Cache tags added by hook_block_view_BASE_BLOCK_ID_alter are ignored on blocks that implement MainContentBlockPluginInterface or TitleBlockPluginInterface
- Extract testUriHost from UuidValidatorTest into its own class
- Conflict with Project Browser <2.1 and Automatic Updates <4
- Use a transaction PoDatabaseWriter to improve performance
- Add Cristina Chumillas as UX Manager, Emma Horrell as provisional UX Manager to Drupal core
- Call to undefined function Drupal\system\Plugin\ImageToolkit\imageavif()
- Trigger a deprecation when using \Drupal\Core\Render\Renderer::addCacheableDependency with a non CacheableDependencyInterface $dependency
- Deprecate TestDiscovery test file scanning, use PHPUnit API instead
- Deprecate TestDiscovery test file scanning, use PHPUnit API instead
- [random test failure] PackageUpdateTest::testPackageUpdate
- Create enums for RequirementSeverity and deprecate drupal_requirements_severity() constants
- Process attachments (CSS/JS) for HTMX responses and add drupal asset libraries
- Use avif with webp fallback for all core image styles
- Add user access checks to 'more' link
- Clean up the node_uid_revision handlers
- Make LazyPluginCollection::getIterator more flexible, return a Traversable
- Dependency injection in NodePermissions
- Add nicxvan as maintainer of the extension api
- Remove uses of FormattableMarkup in tests not testing that API
- Fix Drupal\Core\Database\Fetch* types as they are wrong
- New SDC components are not available when enabling themes through the UI
- Tidy up and tighten deprecation skips
- block_theme_initialize should not create blocks during config sync
- Allow Package Manager to operate directly on the live code base
- ResolvedLibraryDefinitionsFilesMatchTest is failing
- Invalid exposed form data not excluded
- Node preview modal: use Drupal API
- [random test failure] Toolbar Test (toolbarTest.js)
- Add larowlan as a co-maintainer for Form API and render API subsystems
- Uninstalling a module deletes all views that have third-party settings by that module
- Renderer::doRender() and ::doRenderRoot() contain some outdated information
- Remove support for extending #[Hook] and remove classes extending it #[FormAlter] and #[Preprocess]
- NodeTranslationUITest should use API to set up language
- Deprecate SyndicateBlock
- Refactor FormTestClickedButtonForm::buildForm
- Redirect block/add if there is only one block type
- Add tests for reverting revisions where revision_uid and uid differ
- Reset highwater mark *before* rolling back
- template_preprocess_views_view_summary_unformatted() does not set active link when using AJAX
- Refactor InstallerNonDefaultDatabaseDriverTest to avoid asserting content of settings.php
- Add @group #slow to MigrateDrupal7AuditIdsTest
- Split up EntityDefinitionUpdateTest
- Consolidate list_string test cases in OptionsFieldUiTest
- Add a deprecated module version of ResolvedLibraryDefinitionsFilesMatchTest
- AVIF conversion with WEBP fallback
- Cache tags grow endlessly
- Allow 6.x version of justinrainbow/json-schema
- Avoid cache redirect error when using 'view own unpublished content' permission alongside node grants
- Deprecate custom keys in $_SESSION
- Single Directory Components templates are not auto reloaded after change
- LanguageItem lacks a schema for its default values
- askHidden prompt fails with "Unknown named parameter $default"