Install

To start a new Drupal project with version 9.1.0-beta1@beta:

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 tar.gz 16.92 MB
MD5: e4f377030f0285832f7d556dd0a381c4
SHA-1: dd10d348846bafdeadfaaf9118da3283818cd12e
SHA-256: ec46d25fbfca2b70030a1cdae9c1d640ecc902741bc5b5f34ecdbd73b83780cd
Download zip 28.43 MB
MD5: 6785ce952baff1ca695d547867b477b6
SHA-1: 3fc07861e544ed59653b169b72f5b696da398b78
SHA-256: a2c131a630ba575f359139351494e7b9e197313ab4fc98be4c78c0c44cbb9b5f

Release notes

This is a beta release for the next minor version (feature release) of Drupal 9. Betas are good testing targets for developers and site builders who are comfortable reporting (and where possible, fixing) their own bugs. Beta releases are not recommended for non-technical users, nor for production websites. More information on beta 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. Drupal 8.9.x will continue to have security support until November 2021. 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 and changes since 9.1.0-alpha1

If you are updating from 9.0.x or earlier, also read the 9.1.0-alpha1 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 8.8, 8.9, 9.0 and 9.1!

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 upstream dependencies that do not have PHP 8 versions available yet.

There are two remaining dependency updates required to support PHP 8. These dependencies may still be updated prior to 9.1.0-rc1 and could include disruptive changes:

Dependency updates since 9.1.0-alpha1

  • In order to support PHP 8, Drupal core is now using composer/semver version 3, and the tests are now using composer/composer version 2 internally. For more information, see the change record on Drupal 9.1's internal composer requirements. Note: These are only internal dependencies. Site owners may use either Composer 1 or Composer 2 on the command line to manage their Drupal 8.8, 8.9, 9.0, and 9.1 sites. Drush users must update to the latest dev version for compatibility with this change in Drupal 9.1.

  • The locked version of the fabpot/goutte development dependency has been updated to 3.3.1 for PHP 8 compatibility.

  • doctrine/annotations has been updated from 1.10.4 to 1.11.1, and doctrine/reflection has been updated from 1.2.1 to 1.2.2 .

  • Symfony packages have been updated from 4.4.15 to 4.4.16, and several Symfony polyfill libraries have been updated from 1.18.1 to 1.20.0.

  • symfony/mime, symfony/var-dumper, and symfony/phpunit-bridge have been updated from 5.1.7 to 5.1.8. Note that these packages may be further updated to 5.2.0 prior to 9.1.0-rc1.

  • Twig has been updated from 2.13.1 to 2.14.1.

  • squizlabs/php_codesniffer has been updated from 3.5.6 to 3.5.8.

Critical issues resolved since 9.1.0-alpha1

Known issues

Search the issue queue for known issues.

  • Running composer update with this beta's project templates will still cause a downgrade to a stable version (9.0.7). If you encounter this issue when trying to update to subsequent alphas or betas, you can try specifically using (e.g.) composer require drupal/core-recommended:9.1.0-beta1 for the top-level Drupal packages in your composer.json. #3179061: Further discuss use of "prefer-stable" and "minimum-stability" in core

Changes since 9.1.0-alpha1:

  • #1538118 by dww, swentel, dawehner, pwolanin, sanduhrs, alexpott, ayushmishra206, Wim Leers, yogeshmpawar, mgifford, cilefen, David_Rothstein, drumm, larowlan, Heine, colan, tedbow, benjifisher, klausi, borisson_, quietone: Update status does not verify the identity or authenticity of the release history URL
  • #3164686 by mondrake, longwave, ridhimaabrol24, alexpott, larowlan: WebAssert::addressEquals() and AssertLegacyTrait::assertUrl() fail to check the querystring
  • #3151118 by alexpott, Beakerboy, kapilkumar0324, anmolgoyal74, jungle, heddn, Mile23, andypost, daffie: Include bootstrap.inc using composer
  • #3175666 by paulocs, shetpooja04, Lendude, anmolgoyal74, jijojoseph_zyxware, sanjayk, catch, kapilkumar0324: Remove unused $admin_user variable in FieldEntityOperationsTest.php, views module
  • #3014969 by TR, longwave, Abhijith S, joachim, shimpy: Unescaped "@" in ContextProviderInterface doc comment
  • #2736777 by alexpott, mondrake, Charlie ChX Negyesi, catch, Mile23, andypost: MySQL on PHP 8 now errors when committing or rolling back when there is no active transaction
  • #3179768 by bnjmnm, DyanneNova: Fix Claro details caret
  • #3062751 by katherined, bnjmnm, boulaffasae, HOG, joseph.olstad, kapilkumar0324, Vidushi Mehta, shimpy, phenaproxima, antonellasevero, lauriii, KondratievaS, SharmaAnmol, ckrina: Media and media library
  • #3061042 by DyanneNova, komalkolekar, anmolgoyal74, bnjmnm, katherined, ranjith_kumar_k_u, lauriii, L2G2, ckrina, antonellasev: Status Report Page Update
  • #3180092 by Gábor Hojtsy: Update fabpot/goutte to 3.3.1 for PHP 8 compatibility
  • #3176910 by kishor_kolekar, anmolgoyal74, hansa11, kostyashupenko, mherchel: Move Olivero's preload.twig documentation to @file and include variables passed for the template
  • #3156260 by anmolgoyal74, Abhijith S, bandanasharma, ranjith_kumar_k_u, andrewmacpherson: Undocumented title variable in feed-icon.html.twig
  • #3174928 by alexpott, andypost: Improve the stability of core JS testing and prepare for update of MinkSelenium2Driver
  • #3177318 by mherchel, proeung, kostyashupenko, jwitkowski79: Identify and add maintainers for Olivero theme to MAINTAINERS.txt and other respective places
  • #3173018 by kostyashupenko, Pooja Ganjage, proeung, mherchel: [Code Review] Remove .form-type as this prefix block element doesn't exist
  • #3178806 by kishor_kolekar, mherchel, larowlan, kostyashupenko, ayushmishra206: Node teaser should not hard-code the text-content CSS class in template
  • #3179157 by komalkolekar, mherchel: Small variant of select form element doesn't look correct in RTL
  • #3156887 by andypost, mondrake, ayushmishra206, alexpott, Ayesh, longwave: \Drupal\system\Plugin\ImageToolkit\GDToolkit needs to support \GdImage objects for PHP 8 compatibility
  • #3132426 by alexpott, dww, GuyPaddock, catch, VladimirAus: Notice: Undefined index: title in Drupal\update\ProjectSecurityRequirement
  • #3179318 by dww: Always use HTTPS for fetching translations
  • #3177541 by alexpott, andypost: stream_open() needs to cope with a failure in \Drupal\Core\StreamWrapper\LocalStream::getLocalPath() better
  • #3179284 by alexpott, longwave, andypost: Update dependencies for Drupal 9.1 and 9.2
  • #3178998 by alexpott, andypost: Update error types and messages for PHP 8
  • #3128631 by andypost, longwave, hussainweb, ayushmishra206, greg.1.anderson, xjm, catch, Mixologic, jungle, Gábor Hojtsy: Update dependencies composer/composer ^2 and composer/semver to ^3
  • #3179013 by alexpott, andypost: EntityRouteEnhancerTest has a meaningless assertion that breaks in PHP 8
  • #3177377 by ranjith_kumar_k_u, kapilkumar0324, paulocs, longwave: Remove unused variable $charcodes and $node2
  • #3173004 by beram: Incorrect typehint documentation for FieldItemInterface::view() and FieldItemListInterface::view(): $display_options could also be a string
  • #3173891 by shetpooja04, meena.bisht: Remove unused variable $assert_session in UpdateScriptTest.php, system module
  • #3177557 by alexpott, andypost, dawehner: \Drupal\error_test\Controller\ErrorTestController::generateWarnings() notice is not a notice in PHP 8
  • #3176908 by kostyashupenko, mherchel: Add variables to Olivero's fieldset.html.twig documentation
  • #3157308 by hansa11, kishor_kolekar, riccardoR, steinmb, mherchel: Classy stylesheet attached from Olivero twig template for node
  • #3177545 by alexpott, andypost: \Drupal\field\Entity\FieldStorageConfig::getCardinality() needs to be more type safe
  • #3173905 by nod_, ravi.shankar, kostyashupenko, mherchel: Olivero: node.classList.remove() only supports one argument
  • #2918149 by harpreet16, tim.plunkett, raman.b, anil.gangwal, dalin, grndlvl, nikunjkotecha, kalyansamanta, paulocs, ranjith_kumar_k_u, froboy: "This block is broken or missing..." should only be shown to users that have access to do something about it
  • #3177590 by alexpott, longwave, hussainweb: ViewsFormBase::getForm() re-uses $key and relies on odd PHP 7 behaviour
  • #3177546 by alexpott: \Drupal\views\Plugin\views\PluginBase::listLanguages() incorrectly uses in_array() resulting in listing additional languages
  • #3173595 by shetpooja04, meena.bisht, Pooja Ganjage, quietone, longwave: Remove only Unused variable $email in SearchBlockTest.php, search module
  • #3156542 by alexpott, voleger, andypost, Charlie ChX Negyesi, Gábor Hojtsy, longwave: \ReflectionParameter::getClass() is deprecated in PHP 8.0
  • #3178039 by anmolgoyal74, Matroskeen, xjm, Kristen Pol, alvar0hurtad0: Correct typo "is has" in a few code comments and tests in core
  • #3178338 by jonathan1055: Fix coding standard fail committed to core 9.1 and 9.2
  • #3095113 by gapple, longwave, ravi.shankar, Deepak Goyal, anmolgoyal74, Sahana _N, geek-merlin, catch, lauriii, Meenakshi.g: Deprecate IE conditional comments support
  • #3178273 by longwave: BasicAuthTestTrait::basicAuthPostForm() does not work
  • #2607116 by rajeshwari10, rakesh.gectcr, andypost, mayurjadhav, ZeiP, alexpott, xjm: Unused variable in token.api.php
  • #3069026 by anmolgoyal74, Pooja Ganjage, mikelutz, longwave, alexpott, xjm: Fix Call to deprecated method addAutowiringType() of class Symfony\Component\DependencyInjection\Definition in YamlFileLoader
  • #3178037 by xjm, Kristen Pol: Fix typo "is has" in SimpleTest deprecation warning
  • #3037436 by alexpott, jonathan1055, Wim Leers, catch, tedbow, longwave: [random test failure] Make QuickEditIntegrationTest more robust and fail proof

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: 6 Nov 2020 at 14:14 UTC
Last updated: 18 Nov 2020 at 18:10 UTC
Bug fixes
New features
Insecure
Unsupported

Other releases