Install
To start a new Drupal project with version 10.2.0-rc1@RC: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 release candidate for the next minor version (feature release) of Drupal 10. 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 10.2.x contains new features, and should be the target for new site development. Drupal 10.1.x will continue to have security support until June 2024.
Drupal 9.5.x security coverage ended on November 1, 2023. Sites on Drupal 8 or Drupal 9 should upgrade to a supported release as soon as possible.
Important update information
Symfony components have been updated to 6.4.0.
A new index is added to the forum_index table to make it compatible with the recommended READ-COMMITTED transaction isolation level.
Filter formats are now consistently sorted. Exported filter format configuration may need re-exporting after updating, but afterwards they will remain consistent.
Drush versions below 12.4.3 are incompatible with Drupal 10.2.x
If you use Drush, you will need to upgrade to version 12.4.3 or greater.
Sites must update to at least Drupal 9.4.4 before upgrading to Drupal 10
Drupal sites running 9.3.x or earlier versions must first update to 9.4.4 or later before updating to Drupal 10. All core updates added before 9.4.0 have been removed. The data upgrade path from CKEditor 4 to CKEditor 5 is not available before Drupal 9.4.4. In general, sites should update to the most recent release of their current major branch before updating to the next major release.
Sites using CKEditor 4 should upgrade to CKEditor 5 in Drupal 9.4 or 9.5 before updating to Drupal 10
Most Drupal sites using CKEditor 4 should upgrade to CKEditor 5. See the recommendations for CKEditor for details. Upgrading from CKEditor 4 to 5 is a manual process. You must review each text format editor condition.
Upgrading from Drupal 6 and 7
Drupal 6 and 7 users can continue to migrate to Drupal 10.2. The migration paths from Drupal 6 and Drupal 7 to Drupal 10 will remain supported throughout Drupal 10's release cycle.
Changes to site-owner-managed files
- It is now recommended to enable output buffering in php.ini. This allows cleanup operations to run in the background after sending output to the browser.
New features
- Media entities now have a new tab for viewing, reverting and deleting revisions.
- CKEditor 5 now provides advanced formatting for tables and table cells when used in Full HTML (or Full HTML-like) text formats. The “Show blocks” button from CKEditor 4 has also been reintroduced to CKEditor 5. HTML comments are also now correctly preserved in CKEditor.
- An “add child” link has been added to menu item and taxonomy term operations dropbuttons, to make adding child items easier.
- Filename sanitization can now be configured in the user interface.
- Block visibility can be configured based on the HTTP response code.
- Plugin types can now use PHP attributes instead of annotations. Additionally, plugin implementations should start to convert from annotations to attributes once the plugin type supports attributes.
- Services that provide event subscribers can now be autoconfigured, reducing boilerplate in service definition files.
- Many controllers can now use auto-wiring for dependency injection instead of adding a
::createmethod. - The field storage configuration form is now rendered as a subform within the main field configuration form. This adjustment streamlines the configuration process, making it more intuitive and user-friendly.
- The filter system has been upgraded to output HTML5. HTML output will have minor changes in some cases.
- A new #config_target property has been added to Form API to make it easier to add validation constraints to configuration forms.
- DeprecationHelper::backwardsCompatibleCall
() allows contributed modules to support multiple versions of Drupal core more easily. - The default login and password reset forms now include autocomplete attributes, giving better hints to browsers as to what can be automatically filled in where possible. Sites that previously disabled autocomplete will need to check that the technique they use is still compatible with the updated form.
API deprecations and behavior changes
hook_image_style_flushis now invoked ifImageStyle::flush()is called with the$pathparameter set. Previously, the hook was only called if no path was passed to this method. The path parameter is also passed along to the hook implementation.- Views now require labels when created programmatically. The UI already required labels so there is no change for site builders.
- Kernel and functional tests now perform stricter config schema validation, which may lead to discovering incorrect configuration was being used in some tests.
- Entities may now provide a “collection permission” to allow access to the entity listing page.
Permissions changes
- Rebuilding node permissions now requires the
administer nodespermission. Previously only theaccess administration pagespermission was required. Site owners should review and adjust permissions as necessary to ensure proper access to the rebuild permissions functionality.
Performance improvements
- A new VariationCache API has been added. Users of the Variation cache contributed module should review whether it is still required.
- Drupal core install profile shipped image styles now convert to webp, this will be effective for new installations. Site owners may want to consider adding a webp conversion step to their own image styles.
- Drupal now sets a Content-Length header for most responses.
- PHP fibers are now used in the default and Big Pipe rendering systems.
Experimental modules
- The Announcements Feed module has been promoted from experimental to stable.
- The Experimental Help Topics module has moved to stable and been merged into the existing Help module. An update path will uninstall the Help Topics module and it should no longer be used.
Platform requirements changes
Drupal now supports PHP 8.3 and recommends at least PHP 8.2.
PHP dependency updates
Drupal core's pinned Composer dependency versions have been updated for the latest minor and patch releases. Additionally, Drupal core’s composer constraints increased to require the latest minor version. This supports forward compatibility and non-disruptive security updates.
Symfony components have been updated to version 6.4.
Symfony Mailer has been added as a new dependency, with the aim of replacing the existing mail system in a future release.
OpenTelemetry has been added as a development dependency in order to provide ongoing performance testing of Drupal core.
Frontend (CSS and JavaScript) production dependency changes
Drupal core's JavaScript dependencies have been updated. The latest minor versions of all JavaScript dependencies are now required by core yarn constraints.
CKEditor 5 has been updated to v40.1.0.
Development dependencies
Two new development dependencies provide GitLab-compatible output for ESLint and Stylelint.
Theme system and template changes
Stable 9 form elements now have form-type-[form-element-type] class.
Changed coding standards
- The rule
Drupal.Semantics.FunctionTriggerErrorhas been enabled.
Known issues
Search the issue queue for known issues.
All changes since Drupal 10.2.0-beta1
- Issue #3405086 by acbramley: Add acbramley as co-maintainer for block content module
- Issue #3384583 by srishtiiee, viren18febS, smustgrave: Default value widget is not updated on field config change
- Issue #3403101 by Utkarsh_33, omkar.podey, Nitin shrivastava, narendraR: Label field need validation on the FieldStorageAddForm
- Issue #3404694 by Spokje, longwave, mglaman, andypost: Update dependencies for Drupal 10.2
- Issue #3353641 by Gauravvvv, Santosh_Verma, smustgrave, nod_, bnjmnm, lauriii, quietone: make use of component-level CSS custom properties in Claro's form--password-confirm stylesheet
- Issue #3404769 by acbramley, smustgrave: UpdatePathTestBase::prepareSettings writes entity_update_batch_size incorrectly
- Issue #3405242 by fjgarlin: GitLab CI pods load too high when running multiple pipelines at the same time
- Issue #3404487 followup by fjgarlin, longwave, catch: Run child jobs in sequence?
- Issue #3404847 by Spokje: Update JavaScript dependencies for 10.2.0-RC
- Issue #3404218 by djsagar, mherchel, smustgrave: Table filter creates jank (layout shift) on page load
- Issue #3404487 by fjgarlin, catch: Run child jobs in sequence?
- Issue #3394197 by lauriii, phenaproxima, Wim Leers, longwave, smustgrave, moshe weitzman: [regression] The new property \Drupal\Core\Form\ConfigFormBase::$typedConfigManager conflicts with some contrib modules
- Issue #3402203 followup by fjgarlin: Improve the test-only job workflow
- Issue #3394084 by quietone, smustgrave, xjm: Fix non-English words in tests
- Issue #3343913 by _shY, smustgrave, catch, xjm, quietone: Add comments explaining performance improvement in TypedData
- Issue #3396628 by Wim Leers, smustgrave, lauriii, xjm, catch: Fix <ol start> → native CKEditor 5 functionality and fix bug in SourceEditingRedundantTagsConstraintValidator that allowed it to slip by
- Issue #3404039 by Wim Leers: PluginExistsConstraintValidator should return early if given NULL
- Issue #3272985 by recrit, grasmash, catch, smustgrave, xjm: RSS Feed header reverts to text/html when cached
- Issue #3403142 by longwave: Make longwave a full committer
- Issue #3404106 by quietone, smustgrave, longwave: Fix test performance of \Drupal\Tests\config_translation\Functional\ConfigTranslationInstallTest
- Issue #3181013 by Driskell, alexpott, ericgsmith, Pan Lee, smustgrave, Kristen Pol, mxr576: Faulty permanent config cache has been set to the cache backend on failed sql server connection
- Issue #3403960 by alexpott, longwave: Store chromedriver log as an artifact
- Issue #3276953 by quietone, rpayanm, smustgrave: Add tests of new release emails
- Issue #3402293 by dww, mstrelan, smustgrave: Fix strict type errors: Convert FormattableMarkup to strings (simple replacement) in core/modules/*/tests/src/Kernel/*
- Issue #3391355 by sebish, dpi, smustgrave: \Drupal\Core\Config\StorageInterface::read is typehinted as possibly returning bool, but never returns true
- Issue #3391776 by alexpott, smustgrave, catch: InfoParser returns an empty array if passed a non-existing file
- Issue #3395404 by acbramley, larowlan, smustgrave, Berdir, jannakha, xjm: Information disclosure access bypass for revision log fields when the JSON:API module is enabled
- Issue #3401802 by BramDriesen, lauriii, smustgrave, xjm, markconroy: Add Announcements Feed to the Umami profile
- Issue #3403573 by quietone: Fix attribute related words in tests
- Issue #3028191 by srishtiiee, tedbow, smustgrave, narendraR, yash.rode: When using Layout Builder, remove contextual links for blocks outside of the current layout
- Issue #3403331 by pdureau, Utkarsh_33: Prevent TypeError when using create_attribute Twig function
- Issue #3403855 by longwave, Nitin shrivastava: Use cspell cache for core development
- Issue #3385621 by fjgarlin, andypost, dimitriskr, longwave: [GitlabCI] MariaDB currently not working
- Issue #3403491 by Kingdutch, ankithashetty, BramDriesen, longwave, Berdir, mglaman, quietone: Rename EntityReferenceTestTrait breaks multi-version testing
- Issue #3403653 by alexpott, longwave: Incorporate improvements to how contrib runs PHPStan to core
- Issue #3020061 by bnjmnm, tedbow, lauriii, zrpnr, smustgrave, yash.rode: Ajax replace does not refocus element if inside a dialog
- Issue #3402203 by fjgarlin: Improve the test-only job workflow
- Issue #3402296 by mstrelan, smustgrave: Fix strict type errors in kernel tests: Do not quote integers
- Issue #3403265 by acbramley: Remove RevisionLogEntityTrait overrides in BlockContent
- Issue #3403420 by fjgarlin: Test reports contain absolute path and link leads nowhere
- Issue #3399645 by znerol, smustgrave: Use structured DSN instead of URI in system.mail mailer_dsn
- Back to dev.