Install

To start a new Drupal project with version 9.1.0-alpha1@alpha:

To update your site and all dependencies to the latest version of Drupal:

To update your site to this specific release:
Pinning to a specific release may make it more challenging to update your site in future, see composer documentation for managing pinned versions

Using Composer to manage Drupal site dependencies

Downloads

Download drupal-9.1.0-alpha1.tar.gztar.gz 16.91 MB
MD5: 1dba4bfe13e4ac2dfe9fcf6e9a364014
SHA-1: e1ad7c607dc77ea5723c7e40220d552d293162ba
SHA-256: 886df43b099fb0b5024956dccfd29892e718914e0089163c35a77b2b6502880d
Download drupal-9.1.0-alpha1.zipzip 28.46 MB
MD5: 6b3cb670d702473294f5d1777fa694df
SHA-1: ad2d599fb094e509ea00a32308778ec8e3d1117b
SHA-256: 283c10ef49869908eae27978c51556823178ffed01957b30d23ab843c055198a

Release notes

This is an alpha release for the next minor (feature) release of Drupal 9. Alphas are good testing targets for developers and site builders who are comfortable reporting (and where possible, fixing) their own bugs. Alpha releases are not recommended for non-technical users, nor for production websites. More information on alpha releases.

This minor release provides new improvements and functionality without breaking backward compatibility (BC) for public APIs. Note that there may be changes in internal APIs and experimental modules that require updates to contributed and custom modules and themes per Drupal core's backwards compatibility and experimental module policies.

Drupal 9.1.x contains new features, and should be the target for new site development going forward. Drupal 8.9.x will continue to have security support until November 2021, and Drupal 9.0.x will continue to have security support until June 2021.

Regardless of which version you choose now, features will only be added to Drupal 9 minor releases, so plan to adopt Drupal 9 this year so that you can easily update to Drupal 9.2 and later.

Important update information

Updating from Drupal 8

For information on updating from Drupal 8 to Drupal 9, see Upgrading a Drupal 8 site to Drupal 9.

Sites on 8.7 or earlier must update to either 8.8 or 8.9 before updating to Drupal 9 as all Drupal 8 update functions from before Drupal 8.8.0-rc1 were removed from Drupal 9. We recommend updating to 8.9.x, as well as updating all contributed modules, before updating to any Drupal 9 release.

Note: The migration paths from Drupal 6 and Drupal 7 to Drupal 9 will remain supported throughout Drupal 9's release cycle.

Note for users of the experimental Workspaces module: Existing Drupal 8 sites using the experimental Workspaces module must update to at least Drupal 8.8.2 before updating to Drupal 9. (This is due to a required data integrity fix.) Remember that Workspaces is currently in beta status and is not intended for production.

Upgrading from Drupal 7

Drupal 7 users can continue to migrate to Drupal 8.8 or 8.9, or migrate to 9.0 or 9.1 directly. The upgrade path for multilingual sites is stable in Drupal 9.0.0, 8.9.0, and 8.8.7!

Changes to robots.txt and .htaccess

This release includes changes to the default versions of both robots.txt and .htaccess files shipped with Drupal core. Site owners should back up any customized versions of these files before updating, and add their customizations back in after updating.

  • Drupal's default robots.txt file (used for informing web crawlers what paths to not index) has been updated to disallow indexing of the user registration, password reset, login, and logout routes. These rules were already in place for years, but were ineffective because they had an incorrect trailing slash. This change has removed that trailing slash.

  • Drupal's generated .htaccess files now consistently escape dots (the . character) in rewrite conditions and rules. (For example, statistics.php has been corrected to statistics\.php. See the Drupal core issue for this .htaccess change for full examples.) These changes make the rules slightly more strict (and therefore safer). Site owners should make a backup of customized .htaccess files before updating, and may wish to also escape dots in their own custom rules where appropriate.

Drupal project templates no longer use minimum-stability "dev"

In Drupal 8.8 though 9.0, Drupal's Composer project templates declared a minimum stability of dev with an additional prefer-stable setting, which allowed any development versions of other packages such as modules to be installed with the template.

However, this occasionally produced unexpected results, such as upgrading to newer unstable releases rather than remaining on a current stable release (which could be dangerous for a production website). Therefore, starting with 9.1.0-alpha1, the minimum stability will match the stability of core itself. For example, the 9.1.0-alpha1 templates will have alpha as the minimum stability, and 9.1.0 will have stable.

The core change will not affect existing projects using the previous templates, so we strongly recommend that existing Composer sites also change their own templates to raise the minimum stability. In most cases stable is recommended for production websites. For more information on updating your templates, as well as instructions for allowing individual pre-release modules to be used with your stable templates, review the change record: Drupal project templates no longer use minimum-stability "dev".

PHP 8 compatibility

Drupal 9.1 core has made numerous internal changes in order to be compatible with PHP 8.0, which is due to be released in November. However, full compatibility with PHP 8 is currently blocked by several upstream dependencies that do not have PHP 8 versions available yet.

Some dependency updates required to support PHP 8 might require major version upgrades or other breaking changes:

  • We have already updated Drupal 9.1 to use PHPUnit 9 (details below).
  • We may need to update other dependencies including Composer packages and Laminas packages.
  • Finally, Drupal core's Goutte and Doctrine Reflection dependencies may need to be removed and replaced or supplemented with alternatives that will support PHP 8.

Follow Drupal 9.1's progress for PHP 8 support in the PHP 8 compatibility tracking issue.

Database driver changes for PHP 8 compatibility

A new StatementWrapper class added to wrap PHP's built-in \PDOStatement. Contributed and custom database drivers that use PDO need to use this class for PHP 8 compatibility. See \Drupal\Core\Database\Connection::$statementClass is deprecated; use the new DB API StatementWrapper class instead for more information.

Symfony 5 and 6 forward-compatibility

Work is underway to make Drupal 9 forward-compatible with Symfony 5 (already available) and 6 (not yet released), by ensuring Drupal 9 does not use APIs deprecated in newer releases of Symfony. A few of these fixes may require changes to contributed and custom modules:

  • Sites installed prior to Drupal 9.1.0 that are using a customized version of default.services.yml may need to update the YAML syntax in that file. See YAML format in default.services.yml may need updating for more information.

  • Drupal has been updated for upstream changes in the Symfony 5 Events system, including changes to event classes, the order of arguments for the EventDispatcher::dispatch() method. Review the change record on Symfony 5 Events changes for more information, including suggestions for modules extending ContainerAwareEventDispatcher.

Views exposed filter form changes

Views exposed filters that involve multiple form elements are now wrapped in a fieldset. For example, this applies to numeric filters with a 'Between' operator, or any filter with an exposed operator. The filter label is now always visible, as the fieldset legend, and any included elements are nested inside.

This significantly improves the user interface for both sighted users and people using assistive technology. However, this means that the form structure of the exposed filter form is changed. Sites that implement hook_form_alter() to modify the exposed filter form may have to update that implementation to handle the changed form structure. See the change record on the Views exposed filter form for details.

Change to "Node from URL" context may affect block visibility

The context provider for the "Node from URL" context now provides a context value on node preview and revision pages. For example, this means that blocks with node type visibility conditions will now be displayed on these pages. It might also affect certain blocks, conditions, and other plugins using the context system to work correctly on these pages. For more information, see the change record on the "Node from URL" context change.

SimpleTest stub module can no longer be installed

Prior to the release of Drupal 9.0.0, most SimpleTest functionality was replaced by a PHPUnit test suite, and the old SimpleTest module was moved into contrib for projects that had not yet upgraded their tests to PHPUnit. A stub module was left in Drupal 9 core to prevent fatal errors for sites upgrading from Drupal 8 that had for whatever reason left the module enabled. In Drupal 9.1, we've made it so that the core stub module can no longer be installed. If your site still has the SimpleTest module installed, you should uninstall it.

Dependency updates

Production dependencies

  • CKEditor has been updated from 4.14.1 to 4.15.0, which includes numerous bugfixes and improvements.

  • Most Symfony components have been updated from 4.4.9 to 4.4.15.

  • Two Symfony components have added new internal dependencies on symfony/http-client-contracts and symfony/polyfill-intl-normalizer, so both dependencies are now included in Drupal 9.1 installations.

  • A couple of unneeded polyfills for versions of PHP prior to 7.3 were unnecessarily included in the core-recommended template and the lockfile. These have now been removed.

  • composer/semver has been updated from 1.5.1 to 1.7.1. It may be updated to a newer major version prior to 9.1.0.

  • Many other top-level dependencies PHP have all been updated to the latest minor and patch versions for the major version in use.

PHPUnit 9

Drupal 9 now uses PHPUnit 9 to run tests on PHP versions higher than PHP 7.3. This prepares Drupal core to support PHP 8 when it is released, but may require some small changes to tests in contributed or custom modules. See the change record about the PHPUnit 9 update for more details.

Other development dependencies

  • symfony/mime and symfony/phpunit-bridge have all received patch-level updates to version 5.1.7. These updated versions resolve several issues with the Drupal test runner.

  • symfony/var-dumper is now a top-level development dependency and has been upgraded from 4.4 to 5.1.7. (Note that an older version of the dependency was previously installed indirectly as a requirement for symfony/error-handler.)

  • The EasyRDF development dependency has been updated from 0.9.0 to 1.0.0 for compatibility with PHP 7.4. See the change record on EasyRDF for more details.

  • The drupal/coder development dependency has been updated from 8.3.9 to 8.3.10, and it has added a new development dependency on sirbrillig/phpcs-variable-analysis.

  • The development composer/composer requirement has been updated from 1.10.8 to 1.10.15.

  • The postcss-preset-env development dependency has been added to replace usage of postcss-custom-properties for CSS post-processing in Claro.

  • All yarn development dependencies have been updated, including major version updates for chalk, chromedriver, cross-env, eslint, eslint-plugin-react-hooks, mkdirp, postcss, postcss-header, prettier, stylelint-config-standard, and terser.

  • Numerous other development dependencies have received patch- and minor-level version updates.

Changes to coding standards

The following additional coding standards have been enabled in the core ruleset:

  • Drupal.Commenting.DocComment.TagsNotGrouped
  • Drupal.Semantics.FunctionT.ConcatString
  • Drupal.NamingConventions.ValidClassName
  • PSR2.Namespaces.UseDeclaration.UseAfterNamespace
  • Squiz.PHP.NonExecutableCode
  • Some parts of the Squiz.ControlStructures.SwitchDeclaration standard.

Known issues

Search the issue queue for known issues.

All changes since 9.0.0

View fixed issues in 9.1.x.

What’s next?

  1. Learn how to install Drupal
  2. Learn how to update Drupal
  3. Extend Drupal to do more
  4. Get training
  5. Check out what others built
Created by: xjm
Created on: 23 Oct 2020 at 15:21 UTC
Last updated: 18 Nov 2020 at 18:10 UTC
Bug fixes
New features
Insecure

Other releases