Install
To start a new Drupal project with version 9.0.0-alpha2@alpha: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 an alpha release for the next major version of Drupal. Drupal 9 alpha releases are intended for site owners and module or theme authors to begin testing whether their sites and code are compatible with significant dependency changes in Drupal 9.0.x. Drupal 9 alpha releases should not be used in production. No upgrade path is provided between Drupal 9 alpha releases or to Drupal 9.0.0-beta1.
Note that Drupal 9 alphas are not inclusive of all the backwards-compatibility breaking changes that will be included in 9.0.0. Any further alpha releases as well as the first beta release will include more dependency updates and remove more of the previously identified deprecated APIs. Refer to How to prepare your Drupal 7 or 8 site for Drupal 9 for tools you can use to check the Drupal 9 compatibility of modules, themes, and sites.
For more information on 9.0.x development, see #3007300: [META] Release Drupal 9 on June 3 2020.
The 9.0.x branch also includes all the latest commits that will be backported to 8.9.x and earlier branches. 9.0.x will be nearly identical to 8.9.x except for the following:
- Deprecated code will be removed.
- Dependencies will be updated to new major versions as appropriate.
- Platform requirements (supported PHP and database versions) will be increased.
For all other changes, refer to the 8.9.x branch.
Important changes since 9.0.0-alpha1
Read the Drupal 9.0.0-alpha1 release notes for various important information about the new major release.
-
In this alpha release all previously deprecated APIs have been removed. This means that 9.0.0-alpha2 has essentially the same backend API that 9.0.0 will, so module developers and site owners can confidently test their modules with 9.0.0-alpha2.
-
Core themes were updated to remove their dependency on the Classy theme. In this alpha release, they instead create copies of libraries, templates, and theme code inherited from Classy. They will also be decoupled from Stable prior to beta1.
-
Numerous backend (Composer) dependencies have received minor- and patch-level updates to the latest versions.
-
The Popper.js library has been updated to version 2.0.6. This migration guide is available for anyone that needs to convert their Popper.js 1.x compatible code to 2.x.
-
Various further frontend development dependencies in
packages.jsonwere updated. -
Drupal core's testing dependency has been updated to PHPUnit 8 and support for earlier PHPUnit versions has been removed (since Drupal 9 requires PHP 7.3 or higher).
-
The Place Blocks experimental module has been removed from core. (It was already hidden with no further development since Drupal 8.6.0, and was formally deprecated in Drupal 8.8.0.). See the change record on Place Blocks for replacement suggestions.
-
The SimpleTest module has been moved to contrib, and Drupal core no longer runs SimpleTest as part of its test suite. Automated test should be written and run using PHPUnit. Modules that still have legacy SimpleTest tests can customize their drupalci.yml to continue running SimpleTests while upgrading to Drupal 9.
-
To allow modules to be compatible with Drupal 8 and 9 at the same time and to support semantic versioning for contributed projects, the Update Manager module now requests an alternative XML feed from
updates.drupal.org. The path for the new feed ends in/currentrather than/8.x. The new feed will include both module releases with version numbers starting with8.x-(e.g.8.x-3.1) and all releases that use the new semantic version numbering.Site owners will not need to make any changes for this change but may notice changes to update pages and contributed project version schemes. For developers, the differences between the new and old XML feeds the differences are detailed in this documentation page.
What's next?
We may release further alpha versions as needed. There are three release scenarios for Drupal 9. If we complete all Drupal 9.0.0 beta requirements by March 13, the first beta will be released in mid-March and Drupal 9.0.0 will be released on June 3rd, 2020. If the beta requirements are not completed by then, one of the later beta windows will be used.
All changes since 9.0.0-alpha1
- #3111506 by andypost, Gábor Hojtsy: Properly deprecate _access_rest_csrf route requirement
- #2800605 by Chi, Wim Leers, dhirendra.mishra, mr.baileys, jhedstrom, dawehner, borisson_, catch, alexpott: Warn/inform users when the hosting environment has a too low limit of APCU cache
- #3101299 by dww, alexpott: Install module from .zip URL fails
- #3109480 by longwave, catch, bnjmnm, xjm, lauriii, Gábor Hojtsy: Properly deprecate theme functions for Drupal 10
- #3065720 by Lendude, alexpott, revati_gawas, texas-bronius: When creating a Page View in the wizard and setting a path with leading slash (/) the created View display ends up with a double-slash (//)
- #3110186 by benjifisher, tedbow, dww, xjm, tim.plunkett, Gábor Hojtsy, webchick, ckrina, worldlinemine, shaal: Simplify the wording of messages on the status report about security coverage for the site's installed minor version
- #3110393 by andypost, mpdonadio, Berdir, longwave: Remove @deprecated views code datetime_range.module
- #3105327 by bnjmnm, Wim Leers: Update CKEditor to version 4.13.1
- #3114869 by andypost, Gábor Hojtsy, catch: \Drupal\Core\Routing\Router::generate() is deprecated but it is on an interface
- #3075011 by mikelutz, longwave: [Symfony 5] Remove typehint requirement deprecation suppression because Symfony 4 did not require them after all
- #3111244 by bnjmnm, sasanikolic, lauriii: Update SortableJS to 1.10.2
- #3116198 by tedbow, dww, tim.plunkett: Make ProjectCoreCompatibility class final and internal
- #3111929 by tedbow, dww, webchick, xjm, tim.plunkett, catch: If no recommended update is found, Update Status recommends the latest release, even if it is unsupported
- #3116216 by Gábor Hojtsy, quietone, heddn: Remove deprecated MigrateState legacy procedure
- #3055196 by mikelutz: [Symfony 5] The "Symfony\Component\Routing\CompiledRoute::serialize()" method is considered internal since Symfony 4.3, will be removed in Symfony 5 as the class won't implement Serializable anymore. It may change without further notice. You should not ex
- #3114545 by Deepthi kumari, joachim: docs for role constants mention table instead of entity ID
- #3116553 by Gábor Hojtsy, tim.plunkett: Undeprecate Core/Field/PluginSettingsInterface as it is being used widely
- #3059387 by b_sharpe, AaronChristian: Taxonomy Terms cannot be rendered when in preview: EntityMalformedException
- #3114239 by andypost, Hardik_Patel_12, alexpott, Berdir: Properly deprecate \Drupal\Core\StringTranslation\TranslationWrapper
- #3084472 by Berdir, JeroenT, ravi.shankar, rpsu: Remove Place Blocks module
- #2928994 by Berdir, alexpott, JeroenT, markcarver: Remove \Drupal\Core\Messenger\LegacyMessenger
- #3111468 by bnjmnm, lauriii: Decouple Stable libraries from Bartik/Seven/Claro/Umami
- #3098489 by catch, lauriii, DamienMcKenna, zrpnr, longwave, bnjmnm: Remove deprecated jQuery UI library definitions
- #3020296 followup by mondrake: Remove Symfony's classloader as it does not exist in Symfony 4
- #3020296 by alexpott, longwave, bradjones1, catch, Berdir, gapple: Remove Symfony's classloader as it does not exist in Symfony 4
- #3056539 by plach, DamienMcKenna, catch, hchonov, amateescu, tim.plunkett: Updating an entity type from non-revisionable to revisionable fails if it has non-revisionable fields stored in dedicated tables
- #3102724 by dww, tedbow, bnjmnm, webchick, ckrina, Gábor Hojtsy, xjm, benjifisher, AaronMcHale, lauriii, shaal, andrewmacpherson, rainbreaw, worldlinemine: Improve usability of core compatibility ranges on available updates report
- #3098475 by Berdir, catch, TravisCarden, xjm, benjifisher, alexpott, larowlan, dww: Add more strict checking of hook_update_last_removed() and better explanation
- #3116213 by andypost: Remove REST ResourcePluginManager::getInstance()
- #3115088 by lauriii, bnjmnm, tim.plunkett: Remove Classy as a base theme of core themes
- #3017176 by finnsky, mogtofu33, alexpott, huzooka, dawehner: Support install profile and language code params in drupalInstall Nightwatch command
- #3110874 by andypost, longwave, Berdir: Remove BC layer for TestSetupTrait
- #3116164 by Gábor Hojtsy: DeprecatedServicePropertyTrait should trigger deprecation for Drupal 10 in Drupal 9
- #3115143 by longwave, andypost: Remove deprecated DRUPAL_PHP_FUNCTION_PATTERN
- #3104071 by jungle, knyshuk.vova: DrupalDateTime::$formatTranslationCache should be an array
- #3116103 by longwave: Remove remaining deprecated code from Entity system
- #3115903 by alexpott, Berdir: Remove test cruft from TestSiteInstallCommand
- #3069696 by Berdir, andypost, dhirendra.mishra, longwave, alexpott: Remove BC layers from the entity system
- #3059950 by phenaproxima, Nebel54, seanB, alexpott: Media sources should handle empty source field values more gracefully
- #3108402 by lauriii, bnjmnm, FezVrasta, Wim Leers, mradcliffe, gisle: Update to Popper.js to 2.0.0
- #3098427 follow-up by amateescu, catch, alexpott: Manipulating the revision metadata keys before running the BC layer breaks the BC layer
- #3113020 by alexpott, longwave: Properly deprecate \Drupal\Core\Entity\EntityTypeInterface::isSubclassOf()
- #3099295 by DukeandGrace, ravi.shankar, Chi, mradcliffe: Always return exit code in Symfony console commands
- #3115159 by longwave, daffie, alexpott: Properly deprecate config.storage.staging service
- #3045171 follow-up by alexpott: Form blocks rendered inside layout builder break save
- #3107617 by Hardik_Patel_12: t() calls should be avoided , use $this->t() instead in Workflow module
- #3105975 by Hardik_Patel_12: t() calls should be avoided in classes, use dependency injection and $this->t() instead in block module
- #3045171 by godotislate, rlmumford, bnjmnm, ccasals, bkosborne, johndevman, shimpy, Madhura BK, phjou, xaqrox, a3hill, tim.plunkett, gnuget, grahamC, kualee: Form blocks rendered inside layout builder break save
- #3105095 by mikeegoulding, Eric_A: ElementInfoManagerInterface::getInfoProperty() return type incorrect
- #2570985 by ifrik, chipway, lomasr, jhodgdon, shimpy, govind.maloo, vacho, Balu Ertl, Manjit.Singh, alexpott, Bojhan, volkswagenchick, mradcliffe, xjm, tkoleary, yoroy, no_angel, dawehner, webchick, Sam152, RuslanP, Gábor Hojtsy, wengerk, wla_g: Update the module descriptions on the Extend page
- #2946177 by ankitjain28may, bhanuprakashnani, mohit1604, Pasqualle, Rithesh BK, joachim, cilefen, ifrik: Incorrect help text
- #3108640 by godotislate, tim.plunkett: Entity reference field blocks not bubbling cache metadata when view access to referenced entity is not allowed
- #3099789 by amateescu, Berdir, hchonov, catch, alexpott: Remove the BC layer for revision metadata keys
- #3114116 by lauriii, andypost, Gábor Hojtsy Re-schedule removal of deprecated JavaScript code to Drupal 10
- #3114192 by longwave, daffie, alexpott: Remove deprecated services in core.services.yml
- #3095922 by huzooka, Wim Leers, quietone, andypost: The comment "language" column in D7 might be empty after migrating from D6, this is invalid in D8
- #2858776 by catch, mikran, plach, jonathanshaw, johndevman, alexpott, dawehner, tstoeckler, Berdir: Make defining bundle-specific routes easier
- #3113292 by dww, tedbow, xjm, tim.plunkett: Update module has no tests for changes to status of the installed release (revoked, etc)
- #3072744 by twfahey, swatichouhan012, tim.plunkett: "Add a new inline block" title on settings tray doesn't match "Custom block"
- #3115451 by Hardik_Patel_12, salah1: Remove autoloader-suffix from core/composer.json
- #3113236 by jhodgdon, rksyravi: Help topics module - documentation page not found
- #2910775 by Sivaji, Hardik_Patel_12, hchonov, Mile23: Add test case for EntityType::getHandlerClass returning NULL
- #3115153 by lauriii: Follow-up to #3113608: Bartik template incorrectly referencing Claro library
- #3061571 follow-up by alexpott: If no Drupal 8 equivalent filter is found during migration, drop transformation-only filters, so that body fields show up
- Revert "Issue #3112295 by mpdonadio, Hardik_Patel_12, daffie, JeroenT, Vlad Bo, pifagor, voleger, alexpott: Replace REQUEST_TIME in OO code w/o access to the container"
- #3110669 by quietone, ravi.shankar: Migrate d7 menu language content settings
- #2867788 by mondrake, daffie, dawehner, alexpott, larowlan: Log::findCaller fails to report the correct caller function with non-core drivers
- #3101516 by blazey: Add the EntityAutocompleteMatcherInterface
- #3061571 by Wim Leers, mradcliffe, webchick, heddn, mikelutz: If no Drupal 8 equivalent filter is found during migration, drop transformation-only filters, so that body fields show up
- #3112295 by mpdonadio, Hardik_Patel_12, daffie, JeroenT, Vlad Bo, pifagor, voleger, alexpott: Replace REQUEST_TIME in OO code w/o access to the container
- #3114195 by longwave: Remove deprecated configDirectories property from FunctionalTestSetupTrait
- #3104307 by Berdir, longwave, Gábor Hojtsy, Wim Leers, alexpott, andypost: Remove BC layers in various Drupal\Core components
- #3103918 by greg.1.anderson, Mile23, alexpott, Mixologic, catch: [policy + patch] Decide on backwards compatibility policy for Composer plugins in Drupal 8
- #3114785 by slootjes, longwave: [Symfony 5] Update deprecated short factory configurators in Yaml
- #2994915 by sysosmaster, kjay, bruceyboy, anthonylindsay, benjamindamron, BrightBold, imalabya, shashikant_chauhan, Yaremchuk, bowen111, quaxi, Gayathri J, Gnanasampandan Velmurgan, JayKandari, michaellenahan, mradcliffe, andrewmacpherson, shaal, philippze: Remove Page Title block from homepage
- #3109042 by znerol: Convert uses of $_SESSION in update module and authorize subsystem
- #2989609 by CeraRose, Sivaji: $filter_hander typo in Views ExposedFormPluginBase.php
- #3067576 by idebr, bgreco, Lendude: menu items lost on migration
- #3114017 by hash6, longwave, alexpott: Remove deprecated code from migrate module
- #3113608 by bnjmnm, lauriii: Add copies of Classy templates to core themes
- #3109287 by bnjmnm, lauriii, dww: Decouple Classy-inheriting themes from Classy's preprocess functions
- #3069052 by mikelutz, Berdir, longwave, ravi.shankar, voleger, lauriii, catch, andypost: Properly deprecate the stylesheets-remove key from theme info.yml files
- #3104372 by Gábor Hojtsy, mondrake, longwave, andypost, catch: Fix Drupal\FunctionalTests\AssertLegacyTrait inconsistent deprecation messages
- #3111942 by Gábor Hojtsy, Berdir: Remove all remaining @deprecated code from system module
- #3113988 by longwave: Remove all @deprecated code in run-tests.sh
- #3015811 by alexpott, longwave, Berdir, catch, Gábor Hojtsy, borisson_, andypost: Properly deprecate DRUPAL_USER_TIMEZONE_* constants
- #3113633 by alexpott, Berdir, catch: Improve schema incomplete exception
- #3112639 by alexpott, himmatbhatia, swatichouhan012, longwave, andypost, Hardik_Patel_12, Gábor Hojtsy, Berdir, catch: Remove all @deprecated code from config component
- #3089143 by mr.baileys: FinishResponseSubscriber adds empty Vary-headers on non-cacheable responses
- #3113985 by longwave, Berdir: Update dependencies for Drupal 9
- #3114026 by longwave: simpletest_uninstall() does not work
- #3096349 by bnjmnm, dww, lauriii: Create test for confirming Themes do not depend on Classy templates
- #3105583 follow-up by andypost, lauriii: Move HTML classes from claro_preprocess_radios to a template
- #3105583 by Hardik_Patel_12, kostyashupenko, hash6, siddhant.bhosale, lauriii, andypost: Move HTML classes from claro_preprocess_radios to a template
- #3113509 by mondrake: Replace @expectedException* annotations with dedicated methods
- #3112367 by Hardik_Patel_12, hash6, prabha1997, longwave, swatichouhan012, alexpott: Remove all @deprecated code from Asset component
- #3112683 by Hardik_Patel_12, andypost, alexpott: Remove all @deprecated code from Field component
- #3113053 by hash6, Hardik_Patel_12, longwave, alexpott: Remove $baseThemes BC layer from \Drupal\Core\Theme\ActiveTheme
- #3113582 by Hardik_Patel_12: Remove all @deprecated code from Drupal/Core/Form/
- #3063887 by mondrake, alexpott, longwave, catch, xjm: Support PHPUnit 8 in Drupal 9, drop support for PHPUnit 7
- #3113476 by alexpott, mpdonadio: Fallback when request is not available on the stack in Time service
- #3113284 by mpdonadio: Move deprecation of REQUEST_TIME to Drupal 10
- #3112642 by dhirendra.mishra, Hardik_Patel_12, alexpott: Remove all @deprecated code from menu_link_content module
- #3088077 by Sam152, bkosborne, rensingh99, tim.plunkett: Layout builder does not correctly bubble up cache metadata for empty blocks
- #3110104 by Tritof, catch: Incorrect documentation for RouteProvider::getRouteByName()
- #3111645 by bobbygryzynger, catch: Uninstall entity_reference module and prevent it being enabled again, remove deprecated code
- #3089206 by DamienMcKenna, Wim Leers, ravi.shankar, mr.baileys: Add "protocol version" cache context to allow optimizing responses for HTTP/1 vs HTTP/2
- #3112681 by Hardik_Patel_12: Remove all @deprecated code from Datetime component
- #3111729 by bnjmnm, prabha1997, ravi.shankar, dww: Stable templates/CSS that differ only in comments or indentation should match core's version
- #3111906 by himmatbhatia, alexpott, swatichouhan012, longwave: Remove deprecated AllowedTagsXssTrait
- #3112829 by alexpott: Fix fails due to Generic.CodeAnalysis.EmptyPHPStatement.SemicolonWithoutCodeDetected due to recent dependency updates
- #3110862 by longwave, alexpott, catch, Mile23, Lendude, Gábor Hojtsy, Berdir: Remove simpletest module from core