Install
To start a new Drupal project with version 10.2.0: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 minor version (feature release) of Drupal 10 and is ready for use on production sites. Learn more about Drupal 10 and the Drupal core release cycle.
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 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 and 10.0.x security support has ended. Sites on Drupal 8, 9 or 10.0 should upgrade to a supported release as soon as possible.
Known issues
- Text formats that explicitly allow the
<iframe>or<textarea>tags may result in data loss when content is saved. This is fixed in #3410303: FilterHtml data loss when iframe and/or textarea is allowed and will be in the next patch release of 10.2.x. - Batch operations with views exposed features do not respect the filter values, this has been fixed in #3403999: Exposed filter values ignored when using batch and will be in the next patch release of 10.2.x.
Important update information
Upgrading from Drupal 9
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.
Drush versions below 12.4.3 are incompatible with Drupal 10.2.x
- Users of Drush will need to upgrade to version 12.4.3 or greater.
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.
API deprecations and behavior changes
-
The filter system has been upgraded to output HTML5. HTML output will have minor changes in some cases.
-
Views now require labels when created programmatically or imported from configuration. The user interface already required labels, so there is no change for site builders.
-
The default login and password reset forms now include autocomplete attributes, giving better hints to browsers as to what can be automatically filled in. Sites that previously disabled autocomplete will need to check that the technique they use is still compatible with the updated form.
-
Plugin types can now use PHP attributes instead of annotations. No change to contributed or custom code is required immediately; however, plugin implementations should start to convert from annotations to attributes once the plugin type supports attributes. So far, Action and Block plugins can be converted, so code providing Action or Block plugins should adopt the new API.
Testing changes
-
Kernel and functional tests now perform stricter config schema validation, which may lead to test failures if incorrect configuration was being used in tests.
-
Drupal core automated tests and test APIs are being converted to require strict typing in all cases. So far, Drupal core test traits, build tests, and functional JavaScript tests all require strict typing. Going forward, all Drupal core tests will require strict typing. It is recommended that contributed and custom projects use the Drupal standard for strict type declaration.
Contributed module functionality adopted in core
-
Filename sanitization can now be configured in the user interface. Users of the Transliterate Filenames module should review whether it is still required.
-
A new VariationCache API has been added. Users of the Variation cache contributed module should review whether it is still required.
Experimental modules
-
The experimental Help Topics module has 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.
-
Symfony components now require 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.
-
Additionally, Drupal core's Composer constraints increased to require the latest minor version. This supports forward compatibility and non-disruptive security updates.
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.2.0.
Theme system and template changes
- Form elements in the
stable9base theme now haveform-type-[form-element-type]class. You should check your themes for usages of style targeting form-type-INPUT_TYPE as they may be styling form elements on the page, and override the template if necessary for your theme.
Changed coding standards
-
The rule
Drupal.Semantics.FunctionTriggerErrorhas been enabled. -
The
SlevomatCodingStandard.TypeHints.DeclareStrictTypesrule has been enabled for several core test paths. Future core test additions will fail if strict typing is not used.
Known issues
Search the issue queue for known issues.
All changes since Drupal 10.2.0-rc1
- Issue #3398277 by saschaeggi, Gauravvvv, bnjmnm, cilefen: Claro content editing area is too narrow
- Issue #3408698 by lauriii, alexpott: Provide alter for the field type UI definitions
- Issue #3408120 by alexpott, Wim Leers, lauriii, longwave, tim.plunkett, effulgentsia: \Drupal\Core\Form\ConfigTarget is not fully serializable
- Issue #3405685 by Spokje, longwave: Update JavaScript dependencies for 10.2.0
- Issue #3406732 by longwave, lauriii, Wim Leers: Update CKEditor 5 to 40.2.0
- Issue #3400066 by MegaChriz: drupal/core-annotation has a hidden dependency on drupal/core-class-finder
- Issue #3400018 by mstrelan, xjm: Add declare(strict_types=1) to all Functional JavaScript tests
- Issue #3405696 by longwave, Spokje, andypost, quietone, smustgrave, mondrake: Update composer dependencies for Drupal 10.2.0
- Issue #3408073 by mstrelan, fjgarlin: Test-only job from parent pipeline skips Functional Javascript tests
- Issue #3388170 by DiDebru, tetranz, alexpott, smustgrave: system update 10100 cache tables fail
- Issue #3401464 by anushrikumari, sime, shweta__sharma, lauriii, ankithashetty, sijumpk, rkoller: Date range should be in the date_time category
- Issue #3407080 by mondrake, alexpott: Leaving the savepoint in the transaction stack upon rollback is incorrect
- Issue #3407720 by gapple: Update list of PHP EOL dates
- Issue #3324995 by claudiu.cristea, GaëlG, dajjen: hook_requirements_alter() is not invoked on update
- Issue #3056135 by tim.plunkett, tedbow, Wim Leers, marcoscano, rpayanm, raman.b, smustgrave: Viewing Layout Builder enable node fails after Workflow enabled on bundle if another node was created before enabling
- Issue #3401994 by mstrelan, dww, xjm, smustgrave, nicxvan: Add declare(strict_types=1) to all test traits
- Issue #3405360 by neclimdul, xjm: Remove use of TestClass constructor
- Issue #3406612 by tedbow, phenaproxima: Exceptions in batch no longer are shown on the page: JavaScript error
- Issue #3325167 by smustgrave, acbramley, murilohp, rkoller, larowlan, AaronMcHale, dww, BramDriesen: Revisit the redirect to 'add block' form in the 'add block content' form
- Issue #2805219 by yash.rode, andrewmacpherson, seanB, narendraR: Some dialogs do not receive focus when opened
- Issue #3405576 by kostyashupenko, penyaskito, ankithashetty, shweta__sharma, javi-er: Table drag elements create horizontal scroll on mobile
- Issue #3405153 by Nitin shrivastava, sijumpk, smustgrave, larowlan: Contexual links should never be bold, unless the theme explicitly makes it so
- Issue #3406707 by catch: Increase range of db query assertions
- Issue #3362088 by Lukas von Blarer, mondrake, Berdir: ExtensionMimeTypeGuesser doesn't support .avif
- Issue #3405704 by Spokje, longwave: symfony/psr-http-message-bridge major version bump
- Issue #3352851 by catch, Fabianx, mondrake, xjm, alexpott: Allow assertions on the number of database queries run during tests
- Issue #3406222 by catch: Frequent random test failures in Drupal\Tests\field_ui\FunctionalJavascript\ManageFieldsTest
- Issue #2254199 by smustgrave, sun, vacho, quietone, marvil07: Fix test performance of Drupal\system\Tests\Menu\BreadcrumbTest
- Issue #3397785 by yash.rode, srishtiiee, lauriii, smustgrave: Dialog focus is returned to dialog instead of first tabbable element on dialog AJAX update
- Issue #3367151 by marvil07, Anchal_gupta, xjm, smustgrave, larowlan, longwave, dpi: Docs on return type on two media constraints are misleading
- Issue #3403711 by mstrelan, smustgrave: Add declare(strict_types=1) to all Build tests
- Issue #3405899 by quietone, smustgrave: Fix spelling of heredoc indentifiers
- Issue #3405910 by quietone, smustgrave: Fix spelling of test constants
- Issue #3405095 by quietone, borisson_: Use the testing profile for \Drupal\Tests\config\Functional\ConfigImportAllTest
- Issue #3308928 by smustgrave, longwave, borisson_: Fix test performance of Drupal\Tests\content_translation\Functional\ContentTranslationMetadataFieldsTest
- Issue #3405798 by alexpott, bircher: Config deleted during import does not have correct initial values set
- Issue #3392439 by quietone: Fix variable name spelling in non-tests, part2
- Back to dev.