This is a release candidate for the next minor version (feature release) of Drupal 11. Release candidates are not supported for production sites, but they are intended for widespread testing in preparation for the upcoming stable release. More information on release candidates.
This minor release provides improvements and new functionality. It does not not break backward compatibility (BC) for public APIs. There may be changes in internal APIs and experimental modules. If so, contributed and custom modules and themes may need updating. This is according to Drupal core's backward compatibility and experimental module policies.
This release may include string changes and additions. Translators can review the latest translation status on localize.drupal.org.
Drupal 11.2.x contains new features, and should be the target for new site development. Drupal 11.1.x will continue to have security support until December 2025.
Drupal 11 will be supported until the release of Drupal 13.
Important changes since 11.2.0-beta1
Single-Directory Components with properties that have a restricted set of allowed values (using enum) now can specify human-readable labels for each of those allowed values. Those labels are also translatable using Drupal's user interface translation subsystem, and can provide specific translation context via x-translation-context property. This allows projects using Single-Directory Components (like Experience Builder) to better support translatability.
Drupal core now requires Symfony v7.3.0.
PostCSS and its plugins has been updated to the latest edition, removing the need for the @nest keyword and removing the use of rgba(). Drupal maintains the 2021 nesting behavior to avoid adding :is() selectors throughout the CSS. For details, see the PostCSS Nesting plugin documentation.
Stylelint and stylelint-config-standard have also been updated to the latest version. Most notably the CSS rgb() function is preferred over the equivalent rgba() function. Drupal core stylesheets have been updated to account for these changed standards.
Coder has been updated to the latest version. and the following Drupal coding standards rules have changed:
Drupal.CSS.ClassDefinitionNameSpacingandDrupal.CSS.ColourDefinitionhave been removed as Coder is no longer responsible for CSS coding standards.Drupal.Strings.UnnecessaryStringConcathas been replaced withGeneric.Strings.UnnecessaryStringConcatSquiz.WhiteSpace.LanguageConstructSpacinghas been replaced withGeneric.WhiteSpace.LanguageConstructSpacingMySource.Debug.DebugCodehas been removed.
CKEditor5 is updated from v44.0.0 to v45.2.0, which includes a number of improvements and bug fixes. If you have any custom integrations with CKEditor, see the v45 release notes for breaking changes. If you were using the provided CKEditor5 icon set, the icons have been renamed. Drupal has added an icon name backward compatibility layer for this specific change.
Composer has increased its minimum requirement for the justinrainbow/json-schema package to version 6, and as a result, Drupal core's lockfile and metapackage now pin this development dependency to version 6 as well. Modules using this package should read the version 6 upgrade notes as there are breaking changes. If your contributed or custom project relies on an older version of justinrainbow/json-schema, you should declare a conflict with the 6.x branch in your composer.json.
Several development dependencies have received minor- and patch-level updates to the latest versions.
Known issues
Search the issue queue for known issues.
All changes since Drupal 11.2.0-beta1
- Issue #3526142 by mondrake, xjm: Update PHPStan to 2.1.17
- Issue #3529504 by acbramley, cmlara, nicxvan: Fix phpstan errors in UpdatePathTestTrait
- Issue #3528998 by grimreaper, larowlan, pdureau, xjm, wim leers, catch, penyaskito: Follow-up: SDC `enum` props should have translatable labels: use `meta:enum`
- Issue #3527142 by andypost, catch, longwave, xjm: Update Composer and development dependencies for 11.2.0
- Issue #3522406 by quietone, longwave, klausi, bbrala: Update Coder to 8.3.30
- Issue #3523018 by godotislate, longwave, quietone, xjm, catch, salmonek, smustgrave: Update CKEditor 5 to 45.2.0
- Issue #3528680 by godotislate, xjm, longwave: Update to Symfony 7.3.0
- Issue #3523705 by amateescu, rkoller, poker10: InvalidComponentException when workspaces ui is installed
- Issue #3518273 by bbrala, wim leers, phenaproxima: The ConfigExists validation constraint should support dynamic type expressions
- Issue #3493070 by penyaskito, griffynh, wim leers, longwave, pdureau, effulgentsia, xjm, phenaproxima, mradcliffe, danielveza, lauriii, catch: SDC `enum` props should have translatable labels: use `meta:enum`
- Issue #3526266 by mherchel, finnsky, andy-blum: Navigation top bar should utilize Drupal.displace()
- Issue #3527518 by phenaproxima, tim.plunkett: Package Manager's direct-write mode still tries to check for rsync
- Issue #3527314 by amateescu: Stop creating a "Stage" workspace by default on module installation
- Issue #3519766 by amateescu: WorkspacesHtmlEntityFormController builds entity forms twice
- Issue #3429849 by longwave, andypost, spokje: Make doctrine/lexer:^3.0 compatible with \Drupal\Component\Annotation\Doctrine
- Issue #3521953 by tom konda, smustgrave, quietone: Existence check for JavaScript object and it's property across multi-lines can replace with optional chaining
- Issue #3526180 by mherchel, godotislate: Regression: Drupal.displace() not working on new Navigation module in 11.2
- Issue #3523078 by sd9121, longwave, godotislate, mherchel: Update prettier/PostCSS/stylelint for 11.2
- Issue #3255804 by godotislate, longwave, berdir, alexpott, catch, andypost, smustgrave: Hidden dependency on block_content in layout_builder
- Issue #3255804 by godotislate, longwave, berdir, alexpott, catch, andypost, smustgrave: Hidden dependency on block_content in layout_builder
- Issue #3518917 by penyaskito: Invalid service alias for backend_overridable services in some cases when default_backend is set
- Issue #3483996 by kentr, kim.pepper, godotislate, acbramley: Remove lazy declaration and proxy class for cron and use service closure instead
- Issue #3524547 by thejimbirch, ishani patel, quietone: Navigation module's help text should not link to the contrib module
- Revert "Issue #3515093 by sandip, catch, smustgrave: Olivero table.css should be in its own library and #attached to tables"
- Issue #3514197 by donquixote, acbramley, nicxvan, godotislate, longwave: ModuleHandler::resetImplementations should reset all properties with hook implementations
- Issue #3527053 by nod_, phenaproxima: Random failure: "Drupal.contextual.ContextualModelView is not a constructor"
- Issue #3094817 by nicxvan, quietone, prudloff: Add a SECURITY.md explaining how to report security vulnerabilities properly
- Revert "Issue #3497431 by mondrake, catch, larowlan, godotislate: Deprecate TestDiscovery test file scanning, use PHPUnit API instead"
- Issue #3521327 by avpaderno: The insecure examples code does not include delimiters for strings
- Issue #3523629 by znerol, longwave: Update config schema for Symfony 7.3 mailer security improvements
- Issue #3514881 by prudloff: timezone.js calls the system.timezone route with a date parameter that is never used
- Issue #3522969 by annmarysruthy: Deprecate BrowserTestBase::getOptions()
- Issue #3517024 by acbramley: Convert ckEditor5EditorHeightTest to WebDriver test
- Issue #3522970 by longwave, smustgrave: Remove unused BrowserTestBase::$originalContainer
- Issue #3526251 by prudloff: Incorrect type for #access in RenderElementBase documentation
- Issue #3515774 by prudloff, smustgrave: Cache tags added by hook_block_view_BASE_BLOCK_ID_alter are ignored on blocks that implement MainContentBlockPluginInterface or TitleBlockPluginInterface
- Issue #3523649 by znerol: Extract testUriHost from UuidValidatorTest into its own class
- Issue #3526117 by phenaproxima: Conflict with Project Browser <2.1 and Automatic Updates <4
- Issue #3520750 by alexpott: Use a transaction PoDatabaseWriter to improve performance
- Issue #3524613: Add Cristina Chumillas as UX Manager, Emma Horrell as provisional UX Manager to Drupal core
- Issue #3526690 by cilefen, xmacinfo, andypost, grimreaper, mstrelan: Call to undefined function Drupal\system\Plugin\ImageToolkit\imageavif()
- Issue #3525388 by acbramley: Trigger a deprecation when using \Drupal\Core\Render\Renderer::addCacheableDependency with a non CacheableDependencyInterface $dependency
- Issue #3497431 by mondrake, catch, larowlan, godotislate: Deprecate TestDiscovery test file scanning, use PHPUnit API instead
- Revert "Issue #3497431 by mondrake, catch, larowlan, godotislate: Deprecate TestDiscovery test file scanning, use PHPUnit API instead"
- Issue #3497431 by mondrake, catch, larowlan, godotislate: Deprecate TestDiscovery test file scanning, use PHPUnit API instead
- Issue #3497701 by mstrelan, spokje, catch, quietone: [random test failure] PackageUpdateTest::testPackageUpdate
- Drupal 11.2.0-beta1
- Issue #3410938 by kim.pepper, dww, nicxvan, smustgrave, andypost, dpi, quietone: Create enums for RequirementSeverity and deprecate drupal_requirements_severity() constants
- Issue #3410938 by kim.pepper, dww, nicxvan, smustgrave, andypost, dpi, quietone: Create enums for RequirementSeverity and deprecate drupal_requirements_severity() constants
- Issue #3521173 by nod_, fathershawn, bbrala, longwave, larowlan, catch: Process attachments (CSS/JS) for HTMX responses and add drupal asset libraries
- Issue #3521173 by nod_, fathershawn, bbrala, longwave, larowlan, catch: Process attachments (CSS/JS) for HTMX responses and add drupal asset libraries
- Issue #3524206 by mstrelan, catch, smustgrave: Use avif with webp fallback for all core image styles
- Issue #3524206 by mstrelan, catch, smustgrave: Use avif with webp fallback for all core image styles
- Issue #2053015 by smustgrave, hydra, hgoto, acbramley, ranjith_kumar_k_u, dawehner, lauriii, quietone, bdone: Add user access checks to 'more' link
- Issue #2053015 by smustgrave, hydra, hgoto, acbramley, ranjith_kumar_k_u, dawehner, lauriii, quietone, bdone: Add user access checks to 'more' link
- Issue #3341387 by acbramley, dww: Clean up the node_uid_revision handlers
- Issue #3341387 by acbramley, dww: Clean up the node_uid_revision handlers
- Issue #3456311 by jonathanshaw, mxh: Make LazyPluginCollection::getIterator more flexible, return a Traversable
- Issue #3456311 by jonathanshaw, mxh: Make LazyPluginCollection::getIterator more flexible, return a Traversable
- Issue #3092001 by hardik_patel_12, acbramley, felribeiro, ameymudras, krystalcode, nicxvan, elber, smustgrave, joachim, xjm, quietone: Dependency injection in NodePermissions
- Issue #3092001 by hardik_patel_12, acbramley, felribeiro, ameymudras, krystalcode, nicxvan, elber, smustgrave, joachim, xjm, quietone: Dependency injection in NodePermissions
- Issue #3525400 by nicxvan: Add nicxvan as maintainer of the extension api
- Issue #3525400 by nicxvan: Add nicxvan as maintainer of the extension api
- Issue #3522811 by quietone: Remove uses of FormattableMarkup in tests not testing that API
- Issue #3522811 by quietone: Remove uses of FormattableMarkup in tests not testing that API
- Issue #3524656 by alexpott: Fix Drupal\Core\Database\Fetch* types as they are wrong
- Issue #3524656 by alexpott: Fix Drupal\Core\Database\Fetch* types as they are wrong
- Issue #3522505 by godotislate, nicxvan, acbramley, mherchel, deviantintegral, penyaskito: New SDC components are not available when enabling themes through the UI
- Issue #3522505 by godotislate, nicxvan, acbramley, mherchel, deviantintegral, penyaskito: New SDC components are not available when enabling themes through the UI
- Issue #3523383 by longwave, mondrake, quietone: Tidy up and tighten deprecation skips
- Issue #3523383 by longwave, mondrake, quietone: Tidy up and tighten deprecation skips
- Issue #3182716 by thejimbirch, phenaproxima, primsi, alexpott, berdir, smustgrave, godotislate, nicxvan: block_theme_initialize should not create blocks during config sync
- Issue #3182716 by thejimbirch, phenaproxima, primsi, alexpott, berdir, smustgrave, godotislate, nicxvan: block_theme_initialize should not create blocks during config sync
- Issue #3503699 by phenaproxima, catch, quietone, tedbow, smustgrave, gábor hojtsy: Allow Package Manager to operate directly on the live code base
- Issue #3503699 by phenaproxima, catch, quietone, tedbow, smustgrave, gábor hojtsy: Allow Package Manager to operate directly on the live code base
- Revert "Issue #3227637 by larowlan, acbramley, daffie, amber himes matz, yogeshmpawar, fubarhouse, chetanbharambe, jibran, catch, kristen pol, alexpott: NodeController::revisionOverview is uncacheable"
- Revert "Issue #3227637 by larowlan, acbramley, daffie, amber himes matz, yogeshmpawar, fubarhouse, chetanbharambe, jibran, catch, kristen pol, alexpott: NodeController::revisionOverview is uncacheable"
- Issue #3525090 by donquixote, nicxvan: [11.1] ResolvedLibraryDefinitionsFilesMatchTest is failing
- Issue #3525090 by donquixote, nicxvan: [11.1] ResolvedLibraryDefinitionsFilesMatchTest is failing
- Issue #2957336 by mstrelan, hughworm, quietone, smustgrave: Invalid exposed form data not excluded
- Issue #2957336 by mstrelan, hughworm, quietone, smustgrave: Invalid exposed form data not excluded
- Issue #3511574 by tom konda, smustgrave: Replace RegExp.test() for simple string comparison with String.prototype method possibly
- Issue #3410681 by charlliequadros, hritik parihar, ahsannazir, smustgrave, finnsky, akshayadhav, larowlan: Remove @nest from claro stylesheets
- Issue #3511168 by grimreaper, tocab, acbramley, smustgrave: Node preview modal: use Drupal API
- Issue #3511168 by grimreaper, tocab, acbramley, smustgrave: Node preview modal: use Drupal API
- Issue #3519266 by tom konda: Remove IE7 support from Drupal.url.toAbsolute()
- Issue #3521639 by mstrelan, smustgrave: [random test failure] Toolbar Test (toolbarTest.js)
- Issue #3521639 by mstrelan, smustgrave: [random test failure] Toolbar Test (toolbarTest.js)
- Issue #3522364 by larowlan: Add larowlan as a co-maintainer for Form API and render API subsystems
- Issue #3522364 by larowlan: Add larowlan as a co-maintainer for Form API and render API subsystems
- Issue #3496867 by dcam, drunken monkey, smustgrave, nicxvan: Uninstalling a module deletes all views that have third-party settings by that module
- Issue #3496867 by dcam, drunken monkey, smustgrave, nicxvan: Uninstalling a module deletes all views that have third-party settings by that module
- Issue #3524626 by kristiaanvandeneynde: Renderer::doRender() and ::doRenderRoot() contain some outdated information
- Issue #3524626 by kristiaanvandeneynde: Renderer::doRender() and ::doRenderRoot() contain some outdated information
- Issue #3523109 by ghost of drupal past, donquixote, nicxvan, dww, larowlan, quietone: Remove support for extending #[Hook] and remove classes extending it #[FormAlter] and #[Preprocess]
- Issue #3523109 by ghost of drupal past, donquixote, nicxvan, dww, larowlan, quietone: Remove support for extending #[Hook] and remove classes extending it #[FormAlter] and #[Preprocess]
- Issue #3385836 by acbramley, vbouchet, joachim, smustgrave, longwave: NodeTranslationUITest should use API to set up language
- Issue #3385836 by acbramley, vbouchet, joachim, smustgrave, longwave: NodeTranslationUITest should use API to set up language
- Issue #3518990 by annmarysruthy, acbramley, dcam, berdir: Deprecate SyndicateBlock
- Issue #3518990 by annmarysruthy, acbramley, dcam, berdir: Deprecate SyndicateBlock
- Issue #3461309 by charlliequadros, annmarysruthy, sivaji_ganesh_jojodae, smustgrave, mstrelan, larowlan: Refactor FormTestClickedButtonForm::buildForm
- Issue #3461309 by charlliequadros, annmarysruthy, sivaji_ganesh_jojodae, smustgrave, mstrelan, larowlan: Refactor FormTestClickedButtonForm::buildForm
- Issue #3398767 by mondrake, daffie, alexpott, c960657, anybody: Allow returning explicitly to the prior nesting level in transactions (aka allow explicit COMMIT in Transaction objects)
- Issue #3461316 by amanbtr72, dcam, pasqualle, smustgrave, acbramley: Redirect block/add if there is only one block type
- Issue #3461316 by amanbtr72, dcam, pasqualle, smustgrave, acbramley: Redirect block/add if there is only one block type
- Issue #1528028 by acbramley, jhedstrom, tibbsa, catch, jstoller, agentrickard, smustgrave, yoroy: Add tests for reverting revisions where revision_uid and uid differ
- Issue #1528028 by acbramley, jhedstrom, tibbsa, catch, jstoller, agentrickard, smustgrave, yoroy: Add tests for reverting revisions where revision_uid and uid differ
- Issue #2800715 by dcam, shashikant_chauhan, mikeryan, quietone, alexpott: Reset highwater mark *before* rolling back
- Issue #2800715 by dcam, shashikant_chauhan, mikeryan, quietone, alexpott: Reset highwater mark *before* rolling back
- Issue #3360996 by prudloff, smustgrave, catch: template_preprocess_views_view_summary_unformatted() does not set active link when using AJAX
- Issue #3360996 by prudloff, smustgrave, catch: template_preprocess_views_view_summary_unformatted() does not set active link when using AJAX
- Issue #3366862 by mondrake, daffie: Refactor InstallerNonDefaultDatabaseDriverTest to avoid asserting content of settings.php
- Issue #3366862 by mondrake, daffie: Refactor InstallerNonDefaultDatabaseDriverTest to avoid asserting content of settings.php
- Issue #3522021 by catch: Add @group #slow to MigrateDrupal7AuditIdsTest
- Issue #3522021 by catch: Add @group #slow to MigrateDrupal7AuditIdsTest
- Issue #3492944 by catch: Split up EntityDefinitionUpdateTest
- Issue #3492944 by catch: Split up EntityDefinitionUpdateTest
- Issue #3522004 by catch: Consolidate list_string test cases in OptionsFieldUiTest
- Issue #3522004 by catch: Consolidate list_string test cases in OptionsFieldUiTest
- Issue #3270499 by spokje, quietone, catch: Add a deprecated module version of ResolvedLibraryDefinitionsFilesMatchTest
- Issue #3270499 by spokje, quietone, catch: Add a deprecated module version of ResolvedLibraryDefinitionsFilesMatchTest
- Issue #3510582 by mstrelan, catch, smustgrave: AVIF conversion with WEBP fallback
- Issue #3510582 by mstrelan, catch, smustgrave: AVIF conversion with WEBP fallback
- Issue #3514853 by catch, sandip, smustgrave: Remove position-container.module.css from system/base
- Issue #3097393 by godotislate, catch, berdir, jweowu, ndobromirov, wim leers, gapple: Cache tags grow endlessly
- Issue #3097393 by godotislate, catch, berdir, jweowu, ndobromirov, wim leers, gapple: Cache tags grow endlessly
- Issue #3516348 by bbrala, longwave, andypost, larowlan, jackfoust, mlubbers: Allow 6.x version of justinrainbow/json-schema
- Issue #3516348 by bbrala, longwave, andypost, larowlan, jackfoust, mlubbers: Allow 6.x version of justinrainbow/json-schema
- Issue #3516477 by catch, ericgsmith, acbramley, kristiaanvandeneynde, mxr576: Avoid cache redirect error when using 'view own unpublished content' permission alongside node grants
- Issue #3516477 by catch, ericgsmith, acbramley, kristiaanvandeneynde, mxr576: Avoid cache redirect error when using 'view own unpublished content' permission alongside node grants
- Issue #3518527 by znerol, andypost, smustgrave, catch: Deprecate custom keys in $_SESSION
- Issue #3518527 by znerol, andypost, smustgrave, catch: Deprecate custom keys in $_SESSION
- Issue #3456676 by reinfate, grimreaper, pdureau, alexpott: Single Directory Components templates are not auto reloaded after change
- Issue #3456676 by reinfate, grimreaper, pdureau, alexpott: Single Directory Components templates are not auto reloaded after change
- Issue #3516520 by larowlan, wim leers, penyaskito: LanguageItem lacks a schema for its default values
- Issue #3516520 by larowlan, wim leers, penyaskito: LanguageItem lacks a schema for its default values
- Issue #3517481 by mradcliffe, smustgrave: askHidden prompt fails with "Unknown named parameter $default"
- Issue #3517481 by mradcliffe, smustgrave: askHidden prompt fails with "Unknown named parameter $default"
- Issue #3379794 by znerol, alexpott, adamps, berdir, larowlan, andypost, longwave, dpi, catch: Add symfony mailer transports to Dependency Injection Container (mail delivery layer)
- Drupal 11.3.x-dev
- Back to dev.
- Drupal 11.2.0-alpha1
- Drupal 11.2.x-dev