Still on Drupal 7? Security support for Drupal 7 ended on 5 January 2025. Please visit our Drupal 7 End of Life resources page to review all of your options.Install
To start a new Drupal project with version 11.3.0-beta1@beta:To update your site and all dependencies to the latest version of Drupal:
To update your site to this specific release:
Using Composer to manage Drupal site dependencies
Downloads
Release notes
This is a beta release for the next minor (feature) release of Drupal 11. Betas are good testing targets for developers and site builders who are comfortable reporting (and where possible, fixing) their own bugs. Beta releases are not recommended for non-technical users, nor for production websites. More information on beta releases.
This minor release provides improvements and new functionality. It does 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.3.x will receive security support until December 2026. Drupal 11.2.x will continue to receive security support until June 2026..
Drupal 11 will be supported until the release of Drupal 13.
Important update information
- This release updates minimum versions of Symfony Framework libraries. The updated libraries include a fix for CVE-2025-64500. Drupal does not expose this vulnerability, but the update is included as a hardening for other applications that may extend the library directly
-
The
doctrine/annotationspackage is marked abandoned upstream. Parts of the code have been forked into Drupal core. This change only affects custom code that was handling PHP annotations.
Platform requirements changes
- PHP 8.4 is now the recommended PHP version for sites using Drupal 11 versions 11.3 and above. (PHP 8.3 is still the minimum supported version.)
PHP dependency changes
- Symfony is updated to 7.4.0-rc1.
- Many dependencies have received minor- and patch-level updates to the latest versions.
Frontend (CSS and JavaScript) production dependency changes
- CKEditor is updated to CKEditor 5 47.1.0.
- Many 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.3.0-alpha1
- fix: #3559632 Recipe input default value needs to be a string value
- fix: #3549909 Component slot error does not reveal the offending component
- fix: #3547582 Link widget placeholder_url should use 'label' schema type to be translatable like placeholder_title
- fix: #3547808 label_display block configuration value should not be translatable
- fix: #3555527 Since symfony/dom-crawler 7.4: Disabling HTML5 parsing is deprecated. Symfony 8 will unconditionally use the native HTML5 parser
- fix: #2987159 Create an entity reference selection plugin for custom blocks that filters out non-reusable blocks
- fix: #3557525 Fix PHP 8.5 deprecations triggered in Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationSession->processOutbound()() (Line: 127)
- fix: #3557333 Deprecations in \Drupal\Core\Entity\EntityStorageBase::mapFromStorageRecords() on PHP 8.5
- task: #3538654 Hide promote/sticky fields for page content type on new sites
- fix: #3559487 Default to PHP 8.5 for testing to prevent regressions
- fix: #3559459 Remove unneeded patterns from deprecation-ignore.txt
- fix: #3559326 Random fail in ConfigTranslationCacheTest due using assertEscaped on XSS filtered text
- feat: #3559412 Upgrade behat/mink and behat/mink-browserkit-driver for PHP 8.5
- fix: #3559247 Wrong hook reference in SystemHooks.php
- fix: #3531516 Admin toolbar height is not 100% since upgrading to Drupal 11.2
- task: #3559318 Exclude htmx from aggregation
- task: #3520057 Clean up Claro tablesort CSS
- fix: #3474018 [regression] CSS class is not added to MediaLibrary dialog
- fix: #3521541 [CI] Components tests coverage metrics differ by PHP version
- fix: #3511280 Front-end theme styles can bleed into Navigation
- fix: #3558749 [CI] Refactor lint cache downloads and allow easier testing
- Reapply "ci: #3515704 [CI] Move unit tests to a 'unit tests' stage"
- feat: #1308152 Add stream wrappers to access .json files in extensions
- Revert "ci: #3515704 [CI] Move unit tests to a 'unit tests' stage"
- task: #3558749 [CI] Refactor lint cache downloads and allow easier testing
- ci: #3515704 [CI] Move unit tests to a 'unit tests' stage
- Revert "ci: #3515704 [CI] Move unit tests to a unit"
- ci: #3515704 [CI] Move unit tests to a unit
- fix: #3559286 Fix EntityLinksTest for PHP 8.5
- task: #3559280 Upgrade phpspec/prophecy to 1.24
- fix: #3526080 Reduce write contention to the fast and consistent backend in ChainedFastBackend
- fix: #3550724 Reduce usleep() calls in Renderer::executeInRenderContext()
- task: #3559003 [CI] Set GIT_CLONE_PATH to a static path
- ci: #3559159 [CI] Lint caches are not being updated
- ci: #3521541 [CI] Components tests coverage metrics differ by PHP version
- feat: #2066993 Use magic methods to sync container property to \Drupal::getContainer in functional tests
- Revert "fix: #3543036 Cannot enable both views_test_entity_reference and entity_reference_test in testing"
- fix: #3543036 Cannot enable both views_test_entity_reference and entity_reference_test in testing
- fix: #3549946 Use simple query mode for entity queries with limit 1 and no offset
- fix: #3482024 'file_table' formatter shows file size twice
- fix: #3543555 DateTime time only form element cannot be submitted without specifying date format
- fix: #3558753 [CI] Performance pipeline execution drops metrics report indicators
- feat: #3317769 Add support for linking to entities in CKEditor 5
- ci: #3558704 [CI] Fix yarn caching on lint jobs
- ci: #3464361 [CI] Use artifact caching for phpcs
- Revert "task: #3520057 Clean up Claro tablesort CSS"
- task: #3520057 Clean up Claro tablesort CSS
- task: #3269001 Replace valid-jsdoc rule with eslint-plugin-jsdoc for eslint
- task: #3558021 Default content tests are slow
- task: #3340147 Convert testSkipSecurityFilters() to a unit or kernel test
- task: #3551650 Decouple text_with_summary from tests but not migrations
- feat: #2409559 User should be able to identify required fields from field listing
- feat: #3558667 MS language code should stand for Malay
- fix: #3555528 Symfony\Component\Console\Application::add() is deprecated in Symfony 7.4
- task: #3558592 (follow-up) Improve lint cache warming even more
- task: #3558592 Improve lint cache warming even more
- task: #3222668 Make media type descriptions more consistent
- ci: #3549110 [CI] Performance pipeline execution drops warmed caches
- feat: #3521131 Add support for Sequentially constraint
- feat: #2595805 Leverage attributes in Twig Sandbox Policy
- task: #3557138 Remove use of Contact from ExtensionAvailableConstraintValidatorTest
- fix: #3557522 Fix PHP 8.5 deprecations in Drupal\Core\Language\LanguageManager->getLanguage()() (Line: 157)
- fix: #3557516 \Drupal\views\Plugin\views\argument_validator\Entity::calculateDependencies() causes deprecations on PHP 8.5
- task: #3556693 Change use of Contact in ContentEntityNullStorageTest
- task: #3557102 Remove use of Contact in profile nightwatch_a11y_testing
- fix: #3556706 Deprecate ArchiverManager and ArchiverInterface
- task: #3543035 Deprecate CommentManagerInterface::getCountNewComments
- fix: #3555531 Since symfony/dependency-injection 7.4: Service id DrupalCoreExampleClass looks like a FQCN but no corresponding class or interface exists.
- fix: #3557507 \Drupal\KernelTests\Core\Render\Element\WeightTest triggers a deprecation in NestedArray on PHP 8.5
- fix: #3557528 Drupal\search\SearchPageRepository->getDefaultSearchPage()() (Line: 80) triggers deprecations in PHP 8.5
- fix: #3557530 \Drupal\views\ManyToOneHelper::addTable() triggers deprecations in PHP 8.5
- fix: #3460896 Core DefaultContent Importer does not set isSyncing
- fix: #3557505 \Drupal\Core\Entity\EntityLastInstalledSchemaRepository::getLastInstalledDefinition() triggers deprecations on PHP 8.5
- fix: #3557531 \Drupal\Tests\rest\Functional\EntityResource\EntityResourceTestBase::setUp() can trigger deprecations on PHP 8.5
- fix: #3557584 \Drupal\Tests\jsonapi\Functional\ResourceTestBase::resaveEntity() can trigger deprecations on PHP 8.5
- fix: #3557167 Fix deprecations in \Drupal\Core\ImageToolkit\ImageToolkitManager::getDefaultToolkitId() due to kernel testing
- fix: #3557467 \Drupal\content_moderation\ViewsData::getViewsData() causes PHP 8.5 deprecations and tries to and moderation_state info for non-existing table
- fix: #3557362 Drupal\Core\Render\Element\RenderElementBase::preRenderAjaxForm() triggers deprecations on PHP 8.5
- fix: #3557391 Fix deprecations in \Drupal\Core\Entity\EntityAccessControlHandler caused by kernel tests
- fix: #3557367 \Drupal\views\Plugin\views\HandlerBase::getJoin() triggers deprecation on PHP 8.5
- fix: #3557557 Drupal\Core\FileTransfer\Form\FileTransferAuthorizeForm->setConnectionSettingsDefaults()() (Line: 312) triggers deprecations in PHP 8.5
- fix: #3557556 Drupal\content_moderation\ModerationInformation->shouldModerateEntitiesOfBundle()() (Line: 82) causes deprecations on PHP 8.5
- fix: #3557372 \Drupal\Core\Field\BaseFieldDefinition::getPropertyDefinition() causes deprecations on PHP 8.5
- task: #3463321 Deprecate Migrate Drupal UI
- fix: #3205577 Form handlers should throw exception when not implementing EntityFormInterface
- fix: #3557938 Fix BC for WorkspaceAssociation::moveTrackedEntities()
- Revert "task: #3463321 Deprecate Migrate Drupal UI"
- feat: #3536470 TypeError if #[ReOrderHook] targets hook that has no implementations anywhere in enabled modules.
- task: #3463321 Deprecate Migrate Drupal UI
- fix: #3517719 Deprecate the Field Layout module
- fix: #3557639 Update to Symfony 7.4.0-RC1
- fix: #3557157 \Drupal\views\Entity\Render\TranslationLanguageRenderer::getLangcodeTable() causes deprecations on PHP 8.5
- fix: #3557459 Tests trigger deprecations in \Drupal\views\Plugin\views\field\FieldPluginBase::getRenderTokens on PHP 8.5
- fix: #3557384 \Drupal\Core\Field\Plugin\Field\FieldFormatter\EntityReferenceFormatterBase::prepareView() triggers deprecations on PHP 8.5
- fix: #3557579 Drupal\jsonapi\Normalizer\FieldItemNormalizer->checkForSerializedStrings()() (Line: 32) triggers deprecations on PHP 8.5
- fix: #3557346 \Drupal\Core\Plugin\DefaultSingleLazyPluginCollection::addInstanceId() can cause deprecations on PHP 8.5
- feat: #3557181 \Drupal\content_translation\Hook\ContentTranslationHooks::viewsDataAlter() causes deprecations on PHP 8.5
- fix: #3557268 \Drupal\block\Entity\Block::preSave() triggers deprecations on PHP 8.5
- fix: #3557174 Fix use of NULL as array key in \Drupal\user\Plugin\migrate\process\d6\UserUpdate7002::transform() triggers deprecations on PHP 8.5
- docs: #3554676 Fix more incorrect phpdoc type hints (part 3)
- fix: #3557153 \Drupal\language\LanguageNegotiator::negotiateLanguage() causes deprecation on PHP 8.5
- fix: #3557273 Fix deprecations due to kernel tests in \Drupal\language\EventSubscriber\ConfigSubscriber::onConfigSave()
- fix: #3557270 \Drupal\filter\Element\TextFormat::processFormat() triggers deprecations on PHP 8.5
- fix: #3557357 \Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator triggers deprecations on PHP 8.5
- fix: #3557142 \Drupal\views\FieldViewsDataProvider::defaultFieldImplementation creates a join for a non-existing table causing deprecations on PHP 8.5
- fix: #3458923 StaticMap documents that NULL is a supported map value but causes an error
- fix: #3557135 Calling \Drupal\Core\Entity\EntityTypeBundleInfo::getBundleInfo() with a NULL causes a deprecation in PHP 8.5
- Issue #3557465 by phenaproxima, thejimbirch, alexpott: The default content exporter should ignore `created` fields
- Issue #3556987 by phenaproxima, penyaskito, fathershawn: Add a recursive sort-by-key function to SortArray
- Issue #3557123 by alexpott, smustgrave: PHP 8.5 deprecations triggered by \Drupal\views\Plugin\views\query\Sql
- Issue #3557056 by alexpott, andypost: Fix \Drupal\views_test_config\Hook\ViewsTestConfigHooks::viewLoad() on PHP 8.5
- Issue #3557055 by alexpott, andypost: \Drupal\Core\Config\Schema\Mapping::getDynamicallyValidKeys() triggers a deprecation on PHP 8.5
- Issue #3416508 by Niklan, Anybody, odi, catch, Grevil, herve001: Skip generating aggregates that won't be used for stale asset requests
- Issue #3452724 by finnsky, m4olivei, plopesc, Gauravmahlawat, ckrina, catch, katannshaw, VladimirAus, rkoller, mherchel, kentr, florenttorregrosa, joelpittet, andrewfarq: Navigation side bar and top bar should have appropriate aria labels
- SA-CORE-2025-008 by damienmckenna, tame4tex, benjifisher, mohit_aghera, larowlan, mingsong, xjm, neclimdul, catch, drumm, poker10
- SA-CORE-2025-007 by kevinquillen, larowlan, poker10, drumm, mingsong, xjm, mcdruid, benjifisher, ram4nd, drumm, greggles
- SA-CORE-2025-006 by anzuukino, mcdruid, larowlan, greggles, longwave, poker10, catch, xjm, drumm, akalata, ram4nd
- SA-CORE-2025-005 by zhero, nils.destoop, dragos-dumi, svendecabooter, mcdruid, alexpott, catch, larowlan, cilefen, nils.destoop, longwave, xjm, poker10, jenlampton, ram4nd
- Issue #3557156 by phenaproxima: The ? optional syntax for config actions breaks recipe validation
- Issue #3556493 by longwave, alexpott, catch: Fix deprecation in ContentEntityStorageBase::__get()
- Issue #3531600 by catch, berdir: Refactor _ckeditor5_get_langcode_mapping()
- Issue #3505641 by berdir, smustgrave: Simplify ckeditor5_module_implements_alter() in favor of checking for ckeditor5 in media module
- Issue #3539919 by nicxvan, berdir: Convert batch callbacks to CallableResolver
- Issue #3553006 by thejimbirch, andypost, quietone, smustgrave: Remove Contact recipe
- Issue #3555533 by longwave, godotislate: Since symfony/validator 7.4: Passing an array of options to configure the constraints is deprecated, use named arguments instead.
- Issue #3556721 by alexpott, dcam: Fix \Drupal\KernelTests\Core\Installer\InstallerLanguageTest::testInstallerTranslationFiles on PHP 8.5
- Issue #3556884 by alexpott, smustgrave: \Drupal\workspaces\WorkspaceRepository::loadTree() uses NULL as an array key
- Issue #3556717 by alexpott, dcam: Fix \Drupal\Tests\media\Kernel\MediaSourceTest on PHP 8.5
- Issue #3555375 by quietone, andypost, dcam: Change use of Contact in \Drupal\Tests\user\Functional\UserPermissionsTest::testAccessBundlePermission
- Issue #3006750 by phenaproxima, heddn, quietone, neclimdul, andypost, mikelutz, catch, benjifisher, xurizaemon, jofitz, godotislate: Remove memory management from MigrateExecutable
- Issue #3551446 by amateescu: Rename the workspace association service to workspace tracker
- Issue #3541507 by quietone, ajinkya45, smustgrave, dcam, larowlan: Move field_layout display updates from layout_builder to field_layout
- Issue #3555881 by alexpott: \Drupal\Core\Theme\Icon\IconFinder::extractGroupFromPath() causes deprecations on PHP 8.5
- Issue #3554714 by alexpott, andypost: Add string typehint to \Drupal\Core\Authentication\AuthenticationCollectorInterface::getProvider()
- Issue #3218674 by promes, anybody, tobiasb, ressa, jordan.jamous, grevil, grimreaper: "Translation file not found" for English when "translate_english" is false
- Issue #3554723 by alexpott, andypost: Flood system needs to handle NULL identifiers
- Issue #3536748 by griffynh, thejimbirch: Remove smaz as maintainer for Umami demo subsystem
- Issue #3554484 by mstrelan, danielveza: Remove unused modules from kernel tests
- Issue #2454289 by laravz, pguillard, alexpott, ajzetat, borisson_, joachim, zulljin, mschudders, zviryatko, andrewmacpherson, ksemihin, nicrodgers, berdir, smustgrave, rob holmes, joseph.olstad, eugene.brit: Attribute hreflang not allowed on element li at this point
- Issue #3556582 by mondrake, dcam: Remove remaining references to @covers* annotations from tests
- Issue #3556583 by mondrake, astonvictor: Remove remaining references to @dataProvider annotations from tests
- Issue #3492882 by alexpott, eduardo morales alberti, dcam: Fix the views.field.content_translation_link schema
- Issue #3555886 by alexpott, smustgrave: \Drupal\Tests\Core\Entity\ContentEntityBaseUnitTest does not mock EntityType::getId() correctly cuasing PHP 8.5 deprecations
- Issue #3555884 by alexpott, smustgrave: Drupal\Tests\Core\Entity\Sql\SqlContentEntityStorageTest::testCreate triggers PHP 8.5 deprecations
- Issue #2581799 by jeroent, smustgrave, mstrelan, dcam: Add test coverage for GotoAction
- Issue #3551595 by quietone, andypost, dcam: Handle migration test coverage for Contact
- Issue #3554678 by nicxvan, shubham_pareek_19: Fix implements comments in themes to prepare for Rector
- Issue #3555198 by vijaycs85, astonvictor: Remove typo of test file name on comment
- Issue #3554659 by mstrelan, smustgrave: Fix more incorrect phpdoc type hints (part 2)
- Issue #3554618 by mdranove, dcam, ankitv18: Update doc link to twig 3.x
- Issue #3556289 by alexpott, nicxvan, berdir: \Drupal\Core\Hook\HookCollectorPass has stale documentation
- Issue #3553219 by berdir, catch, nicxvan: Remove persistent views:unpack_options caching
- Issue #3553853 by smustgrave, amateescu: Change placeholder type for text_textarea schema
- Issue #3555935 by alexpott: \Drupal\Tests\Core\Config\Entity\ConfigEntityStorageTest triggers deprecations on PHP. 8.5
- Issue #3554384 by xjm: Recommend PHP 8.4 for Drupal 11.3 and 10.6
- Issue #3548982 by mondrake, dcam: Enforce removal of PHPUnit annotations from test classes' class metadata
- Back to dev.