Install

To start a new Drupal project with version 9.3.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.3.0-alpha1.tar.gztar.gz 18.3 MB
MD5: f354769bff3e6127f4a95211d2300b2b
SHA-1: b3352248c19509f4a17effd49ac72bf9b4cd2a05
SHA-256: a507624a4f4ccb3384a2415439141b0925b97ed200f2c6b3733adddca1a149e3
Download drupal-9.3.0-alpha1.zipzip 30.29 MB
MD5: 4f7edd7685462dad495e204a0c22e4b5
SHA-1: 7f018c662796bcef1bd16b966664e2ede3c44d7d
SHA-256: 14bc71c0126f08b91dce7fa8e281667bcaf6f81f80a124024dc3285070847b10

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.3.x contains new features, and should be the target for new site development. Drupal 9.2.x will continue to have security support until June 2022. Security support for 9.1.x ends with the release of 9.3.0 on December 8, 2021, and security support for Drupal 8 ends November 3, 2021.

Beta testing program

The Drupal Association and the Drupal core maintainers are partnering with agencies and site owners in an official beta testing program for Drupal core minor releases. The program aims to identify and minimize regressions in minor releases. Participating in the program is a way to contribute to the Drupal project and will be credited accordingly.

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.

Upgrading from Drupal 6 and 7

Drupal 6 and 7 users can continue to migrate to Drupal 8.9, or 9.3 directly. The migration paths from Drupal 6 and Drupal 7 to Drupal 9 will remain supported throughout Drupal 9's release cycle.

Important changes for this release

Note that release highlights will be contained in a separate post on Drupal.org, the following are changes for existing sites to be aware of.

  • Most file URLs will now use relative instead of absolute links, after refactoring of the file generation APIs. See the change record for more details.
  • Config is sorted by the order defined in its schema. You should always re-export configuration and commit it to version control after running updates. See the change record for more recommendations.
  • drupal_internal__target_id has been added to JSON:API responses, see the change record for more information.
  • Field labels can now be up to 255 characters long. This has no impact on the API, but requires attention in admin themes to account for the longer possible label length.
  • Shortcut icons are now output as <link rel="icon"> as per the HTML spec instead of <link rel="shortcut icon">.
    Change record.
  • Each user role now depends on the modules that provide the role's permissions. This means that permissions will be automatically cleaned up when a module is uninstalled. Additionally, if a custom or contributed module uses a permission callback, see how to add additional dependency to the callback's return value. Existing roles will be updated to remove permissions that do not exist and dependencies will be added.
  • In order to limit Drupal core's dependency on jQuery for forward-compatibility with future versions, the eslint core-js-passing config now includes the eslint-plugin-jquery plugin.

    Currently, only a small number of the available rules in eslint-plugin-jquery are enabled; these are the rules that check for jQuery features not used by core. As core eliminates uses of a given jQuery feature (typically because modern ES6 JavaScript has native replacements), additional eslint-plugin-jquery rules can be enabled. This will prevent those jQuery features from being reintroduced.
    Change record.

  • jquery.once has been deprecated, contributed modules should update to use the new once library. See the change record for details.
  • ​​Submit buttons themed as <button type="submit"> elements now trigger AJAX within Views exposed forms, just like they do when themed as <input type="submit"> elements. This now matches the behavior of Drupal 7 Views, fixing a regression from Drupal 8 and earlier versions of Drupal 9.
  • FunctionalJavascript tests now automatically check to see if any JavaScript errors have been thrown during the test's execution. In Drupal 10, this will cause the test to fail, while in Drupal 9.3, a deprecation warning is issued for tests that pass despite the presence of JavaScript errors. See the change record for details.
  • Block plugin forms no longer get a 'block_theme' key in form state. See the change record for more details.
  • GuzzleMiddlewarePass has been removed in favor of the generic TaggedHandlersPass, code interacting with GuzzleMiddlewarePass should use TaggedHandlersPass instead.
    Change record.
  • While we do not normally remove Drupal core dependencies in minor releases, Drupal core's dependencies on fabpot/goutte and behat/mink-goutte-driver have been removed in 9.3 because core does not use them and because they prevent us from allowing forward-compatibility with Guzzle 7 and PHP 8.1. If your site or module uses either of these dependencies, be sure they are added to the project's composer.json.
    Change record.
  • The package Doctrine/reflection is abandoned and the parts Drupal core relies on have been copied to Drupal\Component\Annotation\Doctrine. The package will be removed from Drupal 10. Contrib and custom code should update any code that uses the package and remove their dependency too.
    Change record
  • field--node--title.html.twig, field--node--created.html.twig, and field--node--uid.html.twig have been modified to render these fields as they are configured by the site builder for sites that allow configuring the display of these fields. Themes that include these templates should add this change to them as well. See the change record for details.
  • The users table will be updated to change the uid column to a true serial field. See the change record for more information.
  • The Quick Edit module is slated for removal from core in Drupal 10. To this end, Quick Edit has been removed from the Standard profile in Drupal 9.3.0. This change does not affect existing sites, only new sites installing the Standard profile for the first time. For more information, see the change record on Quick Edit's removal from the Standard profile.
  • Drupal-specific <link> tags have been removed from node and taxonomy term pages to improve performance. There are no known uses of these tags in the wild.

    <link rel="canonical"> and <link rel="shortlink"> tags remain, and have been extended to cover all entity types.

  • Drupal core previously declared support for Opera Mini in 'Extreme Data Savings' mode, due to an issue with how CanIUse documents the browser's features. Drupal never actually supported this mode, so the declaration has been removed. Opera Mini in 'High Data Savings' mode, as well as Opera Mobile (a different browser altogether), are unaffected.
    Change record.

PHP Dependency updates

 
| Prod Packages                        | Operation | Base     | Target       |
|--------------------------------------|-----------|----------|--------------|
| composer/installers                  | Upgraded  | v1.11.0  | v1.12.0      |
| doctrine/annotations                 | Upgraded  | 1.13.1   | 1.13.2       |
| drupal/core                          | Upgraded  | 9.2.7    | 9.3.0-alpha1 |
| drupal/core-project-message          | Upgraded  | 9.2.7    | 9.3.0-alpha1 |
| drupal/core-vendor-hardening         | Upgraded  | 9.2.7    | 9.3.0-alpha1 |
| guzzlehttp/promises                  | Upgraded  | 1.4.1    | 1.5.1        |
| guzzlehttp/psr7                      | Upgraded  | 1.8.2    | 1.8.3        |
| laminas/laminas-diactoros            | Upgraded  | 2.6.0    | 2.8.0        |
| laminas/laminas-escaper              | Upgraded  | 2.7.0    | 2.9.0        |
| laminas/laminas-feed                 | Upgraded  | 2.14.1   | 2.15.0       |
| laminas/laminas-stdlib               | Upgraded  | 3.3.1    | 3.6.0        |
| masterminds/html5                    | Upgraded  | 2.7.4    | 2.7.5        |
| pear/pear-core-minimal               | Upgraded  | v1.10.10 | v1.10.11     |
| symfony/console                      | Upgraded  | v4.4.25  | v4.4.30      |
| symfony/debug                        | Upgraded  | v4.4.25  | v4.4.31      |
| symfony/dependency-injection         | Upgraded  | v4.4.25  | v4.4.31      |
| symfony/error-handler                | Upgraded  | v4.4.25  | v4.4.30      |
| symfony/event-dispatcher             | Upgraded  | v4.4.25  | v4.4.30      |
| symfony/http-foundation              | Upgraded  | v4.4.25  | v4.4.30      |
| symfony/http-kernel                  | Upgraded  | v4.4.25  | v4.4.32      |
| symfony/mime                         | Upgraded  | v5.3.0   | v5.3.8       |
| symfony/polyfill-mbstring            | Upgraded  | v1.23.0  | v1.23.1      |
| symfony/polyfill-php80               | Upgraded  | v1.23.0  | v1.23.1      |
| symfony/process                      | Upgraded  | v4.4.25  | v4.4.30      |
| symfony/psr-http-message-bridge      | Upgraded  | v2.1.0   | v2.1.1       |
| symfony/routing                      | Upgraded  | v4.4.25  | v4.4.30      |
| symfony/serializer                   | Upgraded  | v4.4.25  | v4.4.31      |
| symfony/translation                  | Upgraded  | v4.4.25  | v4.4.32      |
| symfony/validator                    | Upgraded  | v4.4.25  | v4.4.31      |
| symfony/var-dumper                   | Upgraded  | v5.3.0   | v5.3.8       |
| symfony/yaml                         | Upgraded  | v4.4.25  | v4.4.29      |
| twig/twig                            | Upgraded  | v2.14.6  | v2.14.7      |
| typo3/phar-stream-wrapper            | Upgraded  | v3.1.6   | v3.1.7       |
| laminas/laminas-zendframework-bridge | Removed   | 1.2.0    | -            |
 
| Dev Packages                       | Operation | Base    | Target  |
|------------------------------------|-----------|---------|---------|
| behat/mink                         | Upgraded  | v1.8.1  | v1.9.0  |
| behat/mink-selenium2-driver        | Upgraded  | v1.4.0  | v1.5.0  |
| composer/ca-bundle                 | Upgraded  | 1.2.9   | 1.2.11  |
| composer/composer                  | Upgraded  | 2.1.0   | 2.1.9   |
| composer/xdebug-handler            | Upgraded  | 2.0.1   | 2.0.2   |
| instaclick/php-webdriver           | Upgraded  | 1.4.7   | 1.4.10  |
| justinrainbow/json-schema          | Upgraded  | 5.2.10  | 5.2.11  |
| mikey179/vfsstream                 | Upgraded  | v1.6.8  | v1.6.10 |
| phar-io/manifest                   | Upgraded  | 2.0.1   | 2.0.3   |
| phpdocumentor/reflection-docblock  | Upgraded  | 5.2.2   | 5.3.0   |
| phpdocumentor/type-resolver        | Upgraded  | 1.4.0   | 1.5.1   |
| phpspec/prophecy                   | Upgraded  | 1.13.0  | 1.14.0  |
| phpunit/php-code-coverage          | Upgraded  | 7.0.14  | 7.0.15  |
| phpunit/php-file-iterator          | Upgraded  | 2.0.3   | 2.0.4   |
| phpunit/phpunit                    | Upgraded  | 8.5.15  | 8.5.21  |
| seld/phar-utils                    | Upgraded  | 1.1.1   | 1.1.2   |
| sirbrillig/phpcs-variable-analysis | Upgraded  | v2.11.0 | v2.11.2 |
| squizlabs/php_codesniffer          | Upgraded  | 3.6.0   | 3.6.1   |
| symfony/browser-kit                | Upgraded  | v4.4.25 | v4.4.27 |
| symfony/css-selector               | Upgraded  | v4.4.25 | v4.4.27 |
| symfony/dom-crawler                | Upgraded  | v4.4.25 | v4.4.30 |
| symfony/filesystem                 | Upgraded  | v4.4.25 | v4.4.27 |
| symfony/finder                     | Upgraded  | v4.4.25 | v4.4.30 |
| symfony/lock                       | Upgraded  | v4.4.25 | v4.4.27 |
| symfony/phpunit-bridge             | Upgraded  | v5.3.0  | v5.3.8  |
| theseer/tokenizer                  | Upgraded  | 1.2.0   | 1.2.1   |
| behat/mink-goutte-driver           | Removed   | v1.2.1  | -       |
| fabpot/goutte                      | Removed   | v3.3.1  | -       |
 

Known issues

Search the issue queue for known issues.

All changes since Drupal 9.2

Core commit log on GitLab

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: catch
Created on: 29 Oct 2021 at 12:18 UTC
Last updated: 19 Jan 2022 at 17:46 UTC
Bug fixes
New features
Insecure

Other releases