Install
To start a new Drupal project with version 9.5.0-rc1@RC: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 a release candidate for the next minor version (feature release) of Drupal 9. Release candidates are not supported for production sites, but they are intended for widespread testing in preparation for the upcoming stable release. More information on release candidates.
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.5 is the final minor release of the 9.x series and will be supported until November 2023. It also provides the same public API as Drupal 10.0 aside from deprecated code. For more information on the upcoming Drupal 10 release, read the Drupal 10.0.0-rc1 release notes.
Important changes since 9.5.0-beta2
- Some sites have not been able to upgrade from Drupal 8.8 or earlier because of invalid configuration. This problem is now fixed. For information on updating from Drupal 8 to Drupal 9, see Upgrading a Drupal 8 site to Drupal 9.
- Improved performance for Apache serving gzipped JavaScript and CSS aggregates to browsers. Sites should update their .htaccess files to take advantage of this performance improvement.
- Indexing of oEmbed media links is no longer allowed due to changes in robots.txt.
- All YAML files have correct indentation, as per the existing core standards.
- The 'Basic HTML' format provided with the Standard profile no longer allows the
<span>
tag. In particular, CKEditor 4 is prone to generating many unnecessary<span>
tags. This should simplify copying and pasting from MS Word, Google Docs and similar programs into either CKEditor 4 or CKEditor 5 on new installs. Existing installs may want to consider removing the tag from text formats and reviewing existing content.
Backend (PHP) dependency changes
- Symfony has been updated to the latest patch release of Symfony 4.4.
Frontend (CSS and JavaScript) dependency changes
- CKEditor 5 has been updated from 35.1.0 to 35.3.1.
- Shepherd.js has been updated from 9.1.0 to 9.1.1.
Development dependencies
- The JavaScript
chromedriver
package has been removed. If you were running Nightwatch tests locally, you may need to start Chromedriver manually. - The JavaScript
raw-loader
package has been removed as it is no longer required by Drupal’s build process. - Other development dependencies have received minor or patch-level updates.
All changes since 9.5.0-beta2
Change log
- Issue #3276213 by nod_, Wim Leers, lauriii, mherchel, longwave: Uncaught exception when data-caption contains markup upcasting to a model element
- Issue #2254175 by smustgrave, pooja saraah, larowlan, sun: Fix test performance of Drupal\comment\Tests\CommentPreviewTest
- Issue #3317873 by longwave, andypost, Spokje: Update dependencies for Drupal 9.5
- Issue #3321191 by nod_, longwave: update ckeditor5 to v35.3.1
- Issue #3321002 by longwave: Update Babel to 7.20.2
- Issue #3321003 by longwave: Update Shepherd to 9.1.1
- Issue #3320518 by longwave, andypost: Update webpack
- Issue #3317879 by longwave, pooja saraah, nod_, andypost: Remove Chromedriver as a JavaScript dependency
- Issue #3010132 by Krzysztof Domański, dhirendra.mishra, longwave, joachim, jhedstrom, timmillwood, Berdir, catch: NodeCreationTrait::createNode() doesn't work in kernel tests without the Filter module
- Issue #3319819 by effulgentsia, longwave: Update eslint to 8.27
- Issue #3317887 by longwave, nod_, lauriii, effulgentsia: Update PostCSS, postcss-header, and postcss-preset-env
- Issue #3319839 by alexpott: Exceptions in post updates are very broken since #3295625
- Issue #3320483 by andypost: Remove unused variable $pos in system.install
- Issue #3320315 by Wim Leers, Anchal_gupta, alexpott, longwave: Allow uppercase service IDs/names — necessary for autowiring support
- Issue #3317885 by longwave, Ankit.Gupta, nod_, catch: Update jsdom, terser, minimist and underscore
- Issue #3319917 by nod_, lauriii: Remove raw-loader dependency
- Issue #3319780 by longwave: Add longwave as provisional release manager in MAINTAINERS.txt
- Issue #3319845 by alexpott, larowlan, catch: user_post_update_update_migrated_roles_followup() needs to be a hook_update_N
- Issue #3319735 by claudiu.cristea: Rename CKE5 button tooltip "Insert Drupal Media" to "Insert Media"
- Issue #3317882 by longwave, nod_: Update to stylelint 14.14.1 and stylelint-config-standard 29.0.0
- Issue #3317758 by DieterHolvoet: The return type of TermInterface::getWeight is wrong
- Issue #3318985 by andypost, longwave: Bump REQUEST_TIME deprecation to Drupal 11
- Issue #2503063 by alexpott, Lendude: Removing XssTest causes test failures due to UrlHelper's static $allowedProtocols
- Issue #3318867 by longwave, lauriii, Wim Leers: Update CKEditor 5 to 35.3.0
- Issue #3313473 by Wim Leers, tim.plunkett, effulgentsia, smustgrave, mglaman, balintpekker: CKEditor 5 plugin definitions should be derivable
- Issue #3312198 by catch, alexpott, longwave, Nixou, Spokje, darvanen: Regression concerning the cache of private files
- Issue #3318581 by andypost, alexpott: FIx \Drupal\Core\Config\ConfigImporter::doSyncStep() to accept callable
- Issue #2965929 by dimitriskr, jhedstrom, kkalashnikov, sun, Lendude, catch, DanielVeza: DX: Insufficient error message "The form argument is not a valid form."
- Issue #3247121 by ramil g, joelpittet: Aggregation of nid when using COUNT produces syntax error
- Issue #3029782 by wengerk, knyshuk.vova, yogeshmpawar, karishmaamin, longwave, claudiu.cristea: UniqueFieldValueValidator lowercasing Label of field on violation message
- Issue #3176393 by quietone, huzooka, benjifisher: Use SourcePluginBase::getSourceModule() in DrupalSqlBase::checkRequirements()
- Issue #3145501 by quietone, alexpott, Spokje, longwave, plach, catch, smustgrave, larowlan, xjm, mxwright: updb error processMultivalueBaseFieldHandler()
- Revert "Issue #3254986 by Matroskeen, paulocs, mikelutz, benjifisher, danflanagan8, quietone: Remove requirements array from RequirementsException message"
- Revert "Issue #2965929 by jhedstrom, dimitriskr, kkalashnikov, sun, Lendude, DanielVeza: DX: Insufficient error message "The form argument is not a valid form.""
- Issue #3317504 by Wim Leers, penyaskito: run-tests.sh claims to support running a particular test method, but does not
- Issue #2965929 by jhedstrom, dimitriskr, kkalashnikov, sun, Lendude, DanielVeza: DX: Insufficient error message "The form argument is not a valid form."
- Issue #1120020 by effulgentsia, andypost, Garrett Albright, pfrenssen, Taran2L, kim.pepper, andregp, phenaproxima, daffie, geek-merlin, rfay, ranjith_kumar_k_u, tf198, Damien Tournoud, alexpott, xjm, chx, bradjones1, hestenet: SQLite database locking errors cause fatal errors
- Issue #3316871 by Soham Sengupta, Chi: Fix wrong documentation in hook_requirements_alter
- Issue #3279289 by rizzie, claudiu.cristea, Berdir, cilefen: file_requirements() can trigger a PHP 8.1 deprecation notice when called without a SERVER_SOFTWARE server env variable
- Issue #3254986 by Matroskeen, paulocs, mikelutz, benjifisher, danflanagan8, quietone: Remove requirements array from RequirementsException message
- Issue #2867336 by mbovan, jcnventura, Berdir, hchonov, gabesullice, jonathanshaw: File size validator should only respect the explicitly configured maximum file size
- Issue #3317515 by bnjmnm, longwave, catch, Wim Leers: Random fail in Drupal\Tests\quickedit\FunctionalJavascript\CKEditor5IntegrationTest::testArticleNode() on 9.4 and 9.5
- Issue #3317330 by Wim Leers, nod_: Random failure in ImageTest::testAltTextRequired
- Issue #3315884 by Wim Leers, lauriii: Fix typos: s/CKEditor5/CKEditor 5/
- Issue #3317332 by Wim Leers: Remove obsolete core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/README.md
- Issue #3316921 by Wim Leers, deviantintegral, longwave: Remove span tag from the basic HTML format in the standard profile
- Revert "Issue #3314770 by Wim Leers, smustgrave, bnjmnm, alexpott: Enforce order of CKEditor 5 plugin settings in config export (as well as other sequences)"
- Issue #3127883 by Wim Leers, Oscaner, bbrala, ptmkenny, alexpott, jhedstrom, kswamy, catch: JSON:API should provide a helpful error response if there is a typo in a field property name
- Issue #3316971 by Mile23, andypost: Ensure run-tests.sh works with future PHP versions
- Issue #3251817 by alexpott, jonathan1055, nicxvan, longwave: Make run-tests.sh select all the required tests when testgroups: has more than one value
- Issue #3316813 by immaculatexavier, apaderno, RoSk0: Remove mentions of node_access_example.module from docblocks
- Issue #3314469 by alecsmrekar, plach: ContextDefinition::isSatisfiedBy does not take into account cardinality
- Issue #3316816 by Wim Leers, nod_: Stabilize FunctionalJavascript testing AJAX: make ::setValue() trigger both "input" and "formUpdated" events
- Issue #3312641 by nkoporec, pradhumanjainOSL, Ratan Priya, Anchal_gupta, daffie, mglaman, catch: Bring back temporary tables (Connection::queryTemporary())
- Issue #3074765 by Chewie, dxvargas, Ankit.Gupta, heddn, Denes.Szabo, SpadXIII: Performance improvement for importing of project translations
- Issue #3314478 by Wim Leers, pooja saraah, smustgrave, lauriii, alexpott: Follow-up for #3231334: global attributes should result in HTMLRestrictions becoming simplified
- Issue #3314770 by Wim Leers, smustgrave, bnjmnm, alexpott: Enforce order of CKEditor 5 plugin settings in config export (as well as other sequences)
- Issue #3313946 by nod_, longwave, Wim Leers: Update CKEditor 5 to 35.2.1
- Issue #2826592 by sourabh.singhal, jeffam, dhirendra.mishra, pk188, Manibharathi E R, krina.addweb, David_Rothstein, Berdir, shortspoken, ameymudras: No redirection to term view display page from term edit page
- Issue #309040 by claudiu.cristea, David_Rothstein, Chi, BryanGullan, larowlan, dww, joachim: Add hook_requirements_alter()
- Issue #3256356 by mstrelan, tstoeckler: Update browser test Xdebug integration for Xdebug 3
- Issue #3316136 by julien.sibi, flocondetoile: LanguageNegotiationInterface.php : function's name error in docblock
- Issue #3316224 by alexpott: Drupal\FunctionalJavascriptTests\Tests\JSWebAssertTest randomly fails
- Issue #3315490 by alexpott, Wim Leers: Random fail in Drupal\Tests\layout_builder\FunctionalJavascript\InlineBlockPrivateFilesTest
- Issue #3309047 by mondrake: Fix 'should return {type} but return statement is missing' PHPStan L0 errors in test code
- Revert "Issue #3045612 by alexpott, Krzysztof Domański: Random test failure in MediaStandardProfileTest::testMediaSources"
- Issue #3315319 by Wim Leers, Spokje, alexpott, lauriii: Random fails in Drupal\Tests\ckeditor5\FunctionalJavascript\AdminUiTest and Drupal\Tests\ckeditor5\FunctionalJavascript\CKEditor5Test
- Issue #3045612 by alexpott, Krzysztof Domański: Random test failure in MediaStandardProfileTest::testMediaSources
- Issue #3315753 by alexpott: Random fail in Drupal\Tests\media_library\FunctionalJavascript\WidgetUploadTest
- Issue #3259109 by mondrake, longwave, andregp, daffie, mglaman, neclimdul, alexpott: Fix 'Cannot unset offset' PHPStan L0 errors
- Issue #3183423 by immaculatexavier, alexpott, quietone: Remove \Drupal\FunctionalJavascriptTests\DrupalSelenium2Driver::attachFile() once upstream dependency has a new release
- Issue #3315362 by alexpott: Remove duplicate JSWebWithWebDriverAssertTest
- Issue #3315227 by alexpott, Spokje, andypost, quietone: Drupal\Tests\views\FunctionalJavascript\Plugin\views\Handler\FilterTest is failing a lot at the moment
- Issue #3314710 by alexpott, Spokje, longwave: dragTo random fails for example DrupalTestsfield_uiFunctionalJavascriptManageDisplayTest
- Issue #3314523 by alexpott: PostCSS results in CSS that does not comply with our coding standards
- Issue #3231950 by mondrake, daffie, pradhumanjainOSL, Anchal_gupta, joegraduate: Split Database tests in 'core' ones and 'driver specific' ones
- Issue #3314511 by Wim Leers: CKEditor 4 → 5 upgrade path may trigger warnings in some edge cases, making upgrade path tests impossible
- Issue #3314541 by saschaeggi, eashika, Wim Leers: Remove unnecessary fill from SVG icon for the "Media Library" CKEditor 5 button — enabling dark mode support in contrib
- Issue #3314353 by immaculatexavier, dpi: EntityTestRev has duplicate view_builder annotation entries
- Issue #3308733 by mherchel, ckrina, chetansonawane, andy-blum, lauriii, alexpott, Abhijith S, ameymudras, Asha Nair, Shiv Yadav, ranjith_kumar_k_u, Libbna: Claro: "Spinner" loading icon not vertically aligned properly
- Issue #3314134 by Anybody, Grevil, quietone: Add i18n_taxonomy_term_reference_plain to TaxonomyTermReference
- Issue #3112452 by lalitware, guilhermevp, narendra.rajwar27, WagnerMelo, ravi.shankar, mradcliffe, adalbertov, himanshu_sindhwani, quondam, Vidushi Mehta, alexpott, longwave, anmolgoyal74: Fix indentation consistency in core's yaml files
- Issue #3311776 by Chi, Nitin shrivastava, emarinho, ckrina: Claro: Highlight dependency errors on admin/modules page
- Issue #3251647 by dsdeiz, phenaproxima, joachim: Field mapping options in media type form are not sorted correctly
- Issue #3284983 by angrytoast: Views FilterPluginBase::groupForm double translates group item label strings
- Issue #3307696 by _shY, smustgrave, Amber Himes Matz: Update breadcrumbs in help, image, language, layout_builder, locale, media, and menu_ui help topics to use help_route_link function
- Issue #3307694 by smustgrave, pooja saraah, Amber Himes Matz: Update internal links in forum help topics to use help_route_link_function
- Issue #3219539 by quietone, mradcliffe: Update Drupal 7 migration database fixture
- Issue #3276469 by Wim Leers, Reinmar: [drupalMedia] MediaImageTextAlternativeUi has an extraneous border on the "cancel" button
- Issue #3307692 by smustgrave, _shY, Amber Himes Matz: Update breadcrumbs in contact, content_translation, cron, editor, field_ui, filter help topics to use help_route_link function
- Issue #3250683 by beatrizrodrigues, Tauany Bueno, ravi.shankar, joachim, quietone: MigrateException documentation for class properties should link to where values are defined
- Issue #3165010 follow-up: Using the layout builder discard changes button should ignore any input and skip validation
- Issue #3121157 by apaderno, neelam_wadhwani, jungle, Lendude, alexpott, bnjmnm: Small correction needed in ThemeInstallerInterface::uninstall() docblock
- Issue #3165010 by dpi, acbramley, tim.plunkett, larowlan: Using the layout builder discard changes button should ignore any input and skip validation
- Issue #3308915 by smustgrave, longwave: Fix test performance of Drupal\Tests\workspaces\Functional\WorkspacesUninstallTest
- Issue #3313833 by Wim Leers, longwave, alexpott: Make it easy to run only tests for one specific core module
- Issue #3300246 by mglaman, Wim Leers: Allow other CKEditor 5 plugins to rerender drupal-media when their attribute changes
- Issue #2895352 by claudiu.cristea, neclimdul, rbosscher, Chi, alexpott: Allow tableselect element options to be disabled
- Issue #2993165 by kkasson, tatianag, Spokje, mpdonadio, xurizaemon, raman.b, wombatbuddy, pooja saraah, tannguyenhn, VladimirAus, ranjith_kumar_k_u, jannakha, pameeela: Date Only field shows incorrect default value when UTC date is different than user's date
- Issue #2842141 by hchonov: Document that more specific hooks might be called before the primary hook depending on the module names
- Issue #2975616 by drubb, pguillard, mattlc, rkoller, webchick, ckrina, jrockowitz, AaronMcHale, benjifisher: Move Relationships above Contextual Filters in Views Advanced Settings
- Issue #3265574 by mondrake: Convert remaining assertions involving use of xpath to WebAssert, where possible
- Issue #3307700 by _shY, Amber Himes Matz: Update breadcrumbs in aggregator, color, and tracker help topics to use help_route_link function
- Issue #3307691 by smustgrave, asad_ahmed, Amber Himes Matz: Update breadcrumbs in ban, block, block_content, book, config, config_translation help topics to use help_route_link function
- Issue #3307697 by quietone, Amber Himes Matz: Update breadcrumbs in migrate_drupal_ui, responsive_image, search.configuring, search.index help topics to use help_route_link function
- Issue #3168624 by DerekCresswell, ravi.shankar, BramDriesen, jonathanshaw, catch: Add 'user/edit' route
- Issue #3271222 by Rajab Natshah, yogeshmpawar, BramDriesen: Include Disallow Oembed media links in the robots.txt file for better Drupal SEO
- Issue #3260227 by mondrake: Move driver specific database Unit tests to their modules
- Issue #3307468 by darvanen: Improve Batch API $context['sandbox'] documentation
- Issue #3313435 by daffie: Add daffie as core subsystem maintainer for the Database API
- Issue #3310510 by igorbarato, Anchal_gupta: Harden error logging of OEmbed thumbnail fetching logic (YouTube errors contain special characters)
- Issue #3195033 by Neograph734, imalabya, sonam.chaturvedi, ranjith_kumar_k_u, lauriii: Different colors for visited links bleed into the toolbar
- Issue #2864115 by smustgrave, hass, amit.drupal, mstrelan: Simplify wording of "create a css class" label in Views
- Issue #3110761 by Vivek Panicker, anagomes, lucassc, apaderno, Sivaji_Ganesh_Jojodae, bnjmnm: Make more explicit the email address is necessary to recover the password
- Issue #3204175 by Amber Himes Matz: Add security advisories Help Topic
- Issue #3044117 by e.escribano, segovia94, bkosborne, Webbeh, zterry95, tim.plunkett, emerham: Add getter for layout object in Layout Builder's ConfigureSectionForm
- Issue #2919158 by danflanagan8, quietone, mikelutz, maxocub, Spokje: Add the MigrationPluginManager to Drupal\migrate\Plugin\migrate\id_map\Sql
- Issue #3308449 by owenbush: CategorizingPluginManagerTrait::getSortedDefinitions() sometimes returns plugins in the incorrect order if they have categories or labels translated
- Issue #3006812 by NickDickinsonWilde, Ankit.Gupta: ViewsExecutable->exposed_widgets has wrong variable type in definition
- Issue #3111192 by tim.plunkett, larowlan, mohit_aghera, mstrelan, lauriii, jibran: Themes have no context of the entity being rendered in preprocessing a layout when using Layout builder
- Issue #3202665 by danflanagan8, Ratan Priya, rupertj, longwave, smustgrave, thursday_bw: "A(n) object was thrown while attempting to stub." Hard to debug migration message
- Issue #59750 by quietone, larowlan, mikeryan, quicksketch, sreynen, kleinmp, kim.pepper, Bèr Kessels, chx, S3b0uN3t, ravi.shankar, mrddthi, webchick, neclimdul, Lendude: Required flag on file forms breaks on validation
- Issue #3310760 by poker10, Wim Leers: Broken issue links in @todos
- Issue #3291622 by smustgrave, g-brodiei, ameymudras, ambikahirode, danflanagan8, catch, Lendude: Formatter 'URL to image' from ImageUrlFormatter shows PHP warning due to the newly introduced loading attribute on image field
- Issue #3307972 by AlirezaK, rik.scholten: ModulesListForm.php assigns string value to ['attributes']['class']
- Issue #3284254 by Wim Leers, smustgrave, nod_: HTMLRestrictions should not allow because that is equivalent to
- Issue #3295880 by Spokje, longwave: ->willReturn(...) would make more sense here
- Issue #3293446 by alexpott, daffie: Create less static cache in ExtensionDiscovery during KernelTests
- Issue #3211992 by alexpott, catch, quietone: TestSiteApplicationTest::testInstallWithNonExistingFile() fails when another test creates database tables during the test run
- Issue #3305748 by kay_v, Spokje, bmahesh03121: improve instructions for allowedOrigins in default.services.yml
- Issue #3294833 by claudiu.cristea, alexpott: Page variant plugin is not correctlly instantiated
- Issue #3096101 by quietone, danflanagan8, abhisekmazumdar, anmolgoyal74, alexpott, gabesullice, Wim Leers, Matroskeen, ankithashetty, mikelutz, benjifisher, daffie, webchick: Allow migrate_drupal_ui source database to be set in settings.php
- Issue #1040534 by catch, Owen Barton, danreb, mikeytown2, ogi, omega8cc, xjm: Rewrite rules for gzipped CSS and JavaScript aggregates cause lots of lstats for files that will never exist
- Issue #3273317 by clayfreeman, larowlan, tim.plunkett, danflanagan8: Add 'in_preview' variable to block and layout templates
- Issue #2875987 by raman.b, smustgrave, ericgsmith, anushrikumari, Lendude: Form alter hook called twice for views forms without view arguments
- Issue #3268829 by quietone, bbrala: Fix class property comments for Drupal.Commenting.DocComment.ShortSingleLine
- Issue #3313021 by Spokje: Remove obsolete \Drupal\KernelTests\KernelTestBase::prepareTemplate
- Issue #3311474 by ravi.shankar, immaculatexavier, mmjvb, daffie, longwave: The requirements test for transaction_isolation checks against a wrong version
- Issue #3312439 by mondrake: StatementInterface::fetch() return typehint is wrong
- Issue #3231694 by Wongjn, lucassc, alexpott: TestFileCreationTrait::getTestFiles() has incorrect @return type
- Issue #3226139 by Spokje, longwave: ->willReturn(...) would make more sense here (ding ding round 2)
- Issue #3269000 by longwave, quietone, Shashwat Purav: fix docblock of TestFieldWidgetMultiple::isApplicable
- Issue #3189876 by Matroskeen, quietone, benjifisher: Add documentation for file source plugins
- Issue #3117069 by Pasqualle, priyanka.sahni, smustgrave, NicklasMF: Undefined index: terms
- Issue #2341553 by GoZ, DuaelFr, smustgrave, Prashant.c, Rajender Rajan, Lendude, marvin_B8, voleger, dawehner: Use routing to generate update.php url
- Issue #2617330 by dagmar, mfb, pradhumanjainOSL, Ratan Priya, fgm, alexpott, dawehner: LogMessageParser::parseMessagePlaceholders() needs to switch bang placeholder to colon placeholder
- Back to dev.
- Drupal 9.5.0-beta2