Install

To start a new Drupal project with version 8.7.0:

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-8.7.0.tar.gztar.gz 16.99 MB
MD5: f6135e49de6bc5b1f259ef3e76580dd0
SHA-1: 00081dd191baffc7179c69dd1efb6270e583f661
SHA-256: fa59c87eb83fb39b90946f965885cbb4fa3cd64f16708380390bb78d49da39f2
Download drupal-8.7.0.zipzip 27.13 MB
MD5: 618a81ede844d8b045d3037ad3baaf46
SHA-1: d192b0ddd1ce4438ae305e40d11e13d13967e422
SHA-256: b0ab6f5e7704a8c0fa62127a85f3cb4cda429e68ab86bc63aa79a5159616b8b7

Release notes

This is a minor version (feature release) of Drupal 8 and is ready for use on production sites. Learn more about Drupal 8 and the Drupal 8 release cycle.

This minor release provides new improvements and functionality without breaking backward compatibility (BC) for public APIs. 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. Developers should review the Drupal 8.7.x change records for information on API additions and internal backwards compatibility breaks.

Minor releases may include string changes and additions. Translators can review the latest translation status on localize.drupal.org.

These release notes provide important update information for Drupal 8 site owners. You can also read about the new features in Drupal 8.7.0.

Important update information

Site update and module owners planning to update to this release should take note of the following important changes:

PHP 5 support, automatic entity updates, and Internet Explorer 9 workarounds have been removed
 

Entity and field system changes
 

  • Entity schema operations will now leave backup tables in place for inspection. See the change record on entity update backup data for more details including how to disable this functionality.

  • Custom menu links and taxonomy terms are now revisionable, which allows them to be used in editorial workflows (similarly to nodes, media, and custom blocks). These changes involve an upgrade path and updates to the respective entity storages. Custom code updating these entities programmatically may need to update to take account revision creation. This may also impact API clients, exported default content, and custom database queries. See the change records for details:

  • Serialized properties of base fields are now automatically unserialized to be consistent with configurable fields. Existing workarounds for this bug might need to be adjusted if they relied on the old behavior of passing a string to those fields. Read the change record about loading serialized field properties.

Changes for Symfony 4 and 5 compatibility
 

Plugin system changes
 

  • ConfigurablePluginInterface, which is used by many, many plugins, is deprecated in favor of a combination of two interfaces: ConfigurableInterface and DependentPluginInterface. If the plugin does not have external module dependencies, then developers may opt to just implement ConfigurableInterface by itself and not implement DependentPluginInterface.
    Read the change record on deprecation of ConfigurablePluginInterface.

  • For context-aware plugins defined by annotation the context key is deprecated. To define context definitions, use the context_definitions key. Interacting with the context definitions of a plugin is unchanged, see \Drupal\Component\Plugin\ContextAwarePluginInterface.
    Read the change record on context definitions for plugins.

Changes to base themes (Stable, Classy)
 

This release includes some small changes to core's base themes (Stable, Classy). Themes that extend one of these base themes should review the following changes.

New stable module: Layout Builder
 

Layout Builder allows content editors and site builders to easily and quickly create visual layouts for displaying content. Users can customize how content is arranged on a single page, or across types of content, with an easy to use drag-and-drop interface.

This module was introduced as an experimental core module in Drupal 8.5.0, but is now stable and ready for production use! For sites using the experimental module prior to 8.7.0 there are some important changes:

  • The Layout Builder module is designed to support extensible storage for layouts, so that layouts can be created and saved for various use cases. (For example, the core module has two storages, one for default content layouts and another for individual entity layouts.) A serious bug with the beta API prevented other storages from being used and API changes were required to resolve this issue.

    Layout Builder section storage plugins must adapt to changes to their interface and rely on the context system instead of external setter calls. Additionally, those interacting with the Layout Builder API must use the new methods for loading SectionStorage plugins.

  • Layout Builder overrides are now stored in non-translatable fields. This means that on entities with overridable layouts, when Content Translation is enabled, the Layout tab is only available when viewing the entity in its default language (not from a translation) and layout changes made from there apply to all translations.

    For sites that installed Layout Builder and enabled layout overrides for some entity bundles while it was still Experimental, this release retains the site's existing translatability configuration of those fields. For those sites, manually setting the layout field to non-translatable is strongly recommended unless there is existing layout translation data. See the change record on Layout Builder translation changes for more details. Layout translatability is planned as a feature for a future release.

  • Layout Builder now has more granular permissions Previously, it only provided a single permission to access all aspects of Layout Builder (configuring/deleting layouts, adding or removing inline blocks, etc.). One example of Layout Builder's more granular permission options means users will only be able to manipulate the layout of content if they have access to edit that content. Review Layout Builder's permissions after updating and change to permissions where appropriate for better access control.

  • CSS classes used in Layout Builder's user interface have been renamed in accordance with BEM standards. For example, classes like .layout-section are now .layout-builder__section.
    Read the change record on BEM standards for Layout Builder's user interface classes.

New stable module: JSON:API
 

JSON:API is now included in core. Contributed modules that depend on the contrib JSON:API project should remove this dependency now that the module is in core.

Sites currently using the 8.x-2.x branch of the JSON:API contributed module should remove the contributed module from the codebase, ensuring that any contrib modules depending on the contributed project are updated at the same time. Use composer remove drupal/jsonapi to remove the JSON:API contributed project when updating core, and rm -rf modules/jsonapi if not using composer, when updating to Drupal 8.7.0.

The contributed module will not receive further updates aside from security fixes.

Sites using the 8.x-1.x branch may require changes to API clients, but the contributed module may be left in place with Drupal 8.7 until any needed conversions are complete. You may experience difficulties upgrading with Composer to Drupal 8.7.0 with drupal/jsonapi installed, or, are unable to install drupal/jsonapi into Drupal 8.7.0 with Composer. See #3053700: Impossible to update drupal/core to 8.7.0 with Composer >= 1.7.3 if drupal/jsonapi is installed for information about how to work around this problem.

Note that the core version of JSON:API uses a read-only mode by default for security reasons. This is configurable at /admin/config/services/jsonapi. Sites requiring create, update, or delete access should review the JSON:API security considerations documentation.

Third-party library updates
 

The following third-party libraries are updated in this release:

  • Guzzle has been updated from 6.3.0 to 6.3.3. With this update, the http_client service also now supports empty headers.

  • Previously, Drupal packaged a copy of the PEAR Archive_Tar library in a Drupal core namespace. In 8.7, this has been deprecated and replaced with a proper Composer dependency on this library. The dependency has also been updated to version 1.4.6.

  • Stylelint has been updated from 9.1.1 to 9.10.1.

  • drupal/coder has been updated to ˆ8.3.1. You may need to re-install coder if you have automated coding standards checks as part of your workflow, since the update includes new coding standards checks.

  • CKEditor has been updated to 4.11.3.

  • Twig has been updated to 1.38.4.

  • A number of other PHP dependencies have also been updated, including:

    • composer/installers to 1.6.0
    • composer/semver to 1.5.0
    • egulias/email-validator to 2.1.7
    • paragonie/random_compat to v2.0.18
    • Most symfony/* components to v3.4.26
    • symfony/http-foundation to v3.4.27
    • symfony/polyfill-* to v1.11.0
    • typo3/phar-stream-wrapper to v2.1.0

Other important update information
 

  • Previously, a fix was committed following upstream Symfony issue with lazy session data in Symfony 3.4.24. Symfony has now reverted the commit in Symfony 3.4.27 (released May 1). Drupal 8.7 has therefore reverted the workaround for the issue and updated symfony/http-foundation to 3.4.27. Other Symfony components remain on 3.4.26 as of Drupal 8.7.0. Any site owners encountering issues with lazy session data should review the above issue and ensure that http-foundation is updated to 3.4.27.

  • datetime fields that store both date and time now specify a time zone when normalized, datetime fields that store only a date no longer expose a (meaningless) time when normalized. daterange fields behave the same way as datetime fields, because both field types use the same "data type" under the hood, and hence get the same normalization. Finally, there is now automatic time zone conversion when POSTing or PATCHing datetime or daterange fields: the client can specify any time zone, and the necessary transformations to match the site's timezone are applied.
    Read the change record about normalization of the Date and Date range fields.

  • The session_handler.write_check service has been removed from core.services.yml. In the unlikely event that this service is being swapped out, the functionality has been moved to \Drupal\Core\Session\WriteSafeSessionHandler - the session_handler.write_safe service.
    Read the change record on removal of the session handler proxy.

  • In order to resolve a critical issue affecting the PostgreSQL database, The naming scheme for PostgreSQL sequence generators has been changed.

  • For all changes that may affect contributed or custom code, search the Drupal 8.7.x change records.

Important bug fixes

In addition to those already listed above, the following critical and important issues have been fixed in Drupal 8.7.0.

Beginning with the Drupal 8.7.0-beta1 release, the Drupal Association and Drupal core maintainers have partnered with agencies and site owners in an official beta testing program for Drupal core minor releases. A number of issues were identified and resolved directly as a result of this initiative. Participating in the beta program is an important way to contribute to the Drupal project. Special thanks to the following individuals and organizations for participating, and directly contributing to the quality of this release:

Known issues

Search the issue queue for all known issues.

All changes since 8.7.0-rc1

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: 1 May 2019 at 18:53 UTC
Last updated: 18 Mar 2020 at 19:52 UTC
Bug fixes
New features
Insecure
Insecure

Other releases