Install
To start a new Drupal project with version 9.4.9: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 patch (bugfix) release of Drupal 9 and is ready for use on production sites. Learn more about Drupal 9.
This is the final normal bugfix release of Drupal 9.4.x. It will receive security coverage until June 2023. Plan to upgrade to Drupal 9.5 or 10.0 soon to continue receiving bug fixes and new features.
If you are upgrading from Drupal 8, read upgrading a Drupal 8 site to Drupal 9, 9.0.0 release notes, and the 9.4.0 release notes before upgrading to this release.
Important update information
-
CKEditor 5 has been updated to version 35.3.2.
-
Drupal 9.4.9 has fixed an issue that could prevent some sites, especially those on Drupal 8.8 or lower with invalid configuration entities, updating to newer versions. If your site is on Drupal 8.8.x, you should consider updating directly to Drupal 9.4.9 so that you're able to run the fixed version of the update. Sites on versions lower than Drupal 8.8 must update to Drupal 8.8 first, and can then update directly to Drupal 9.4 from there. If you are on Drupal 8.9, you can continue to update directly to Drupal 9.4.
Known issues
- #3285724: [regression] Drupal 9.4 breaks BC of \Drupal\Driver\* overriding core drivers during installation and parsing connection URLs
- #3290924: [regression] With Drupal 9.4, can no longer call Database::getConnection() from within settings.php due to driver classes not yet in autoloader
- #3290936: Argument #1 ($database) must be of type Drupal\Core\Database\Driver\mysql\Connection, Drupal\mysql\Driver\Database\mysql\Connection given
Search the issue queue for known issues.
All changes since 9.4.8
- Issue #2314645 by herom, jsobiecki, Pawelgorski87, quietone, ashutoshsngh, zaporylie: Correct the type of $pattern in DateFormat
- Revert "Issue #3226117 by MegaChriz, marthinal, longwave, sinn, cilefen, dcam, ankithashetty, itaran, larowlan, catch: Uncaught RfcComplianceException when email From name contains a comma"
- Issue #3226117 by MegaChriz, marthinal, longwave, sinn, cilefen, dcam, ankithashetty, itaran, larowlan, catch: Uncaught RfcComplianceException when email From name contains a comma
- Issue #3265724 by ravi.shankar, nevergone, alexpott, quietone: Remove unused help text in UserViewsData
- Issue #3303329 by DieterHolvoet: Referenced method in NoCorrespondingEntityClassException docblock does not exist
- Issue #3174108 by _pratik_, asad_ahmed, rivimey, NivethaSubramaniyan, longwave: FieldableEntityNormalizerTrait::extractBundleData() has incorrect return type
- Issue #3268818 by ravi.shankar, quietone: Fix class comment doc blocks in non tests 'Drupal.Commenting.DocComment.ShortSingleLine'
- Issue #3159842 by smustgrave, andypost, longwave: Fix wording in BROWSERTEST_OUTPUT_BASE_URL comment
- Issue #2898903 by tetranz, alexpott, smustgrave, immaculatexavier, prasanth_kp, timmillwood, catch, vinaymahale, rajandro: Terms lose as the parent when editing
- Revert "Issue #2898903 by tetranz, alexpott, smustgrave, immaculatexavier, prasanth_kp, timmillwood, vinaymahale, rajandro: Terms lose as the parent when editing"
- Issue #2898903 by tetranz, alexpott, smustgrave, immaculatexavier, prasanth_kp, timmillwood, vinaymahale, rajandro: Terms lose as the parent when editing
- Issue #3322485 by anneke_vde: EntityInterface::toLink() $text documented as string|null actually also accepts an render array
- Issue #3318108 by Lendude, rreedy: Views Roles Contextual Filters Multiple Option not saving
- Issue #2925297 by Spokje, mpp, paulvandenburg, anmolgoyal74, gobinathm, catch, mmrares, shubhangi1995, Martijn de Wit: Fatal error on config form with translation enabled when config is missing
- Issue #1120020 by effulgentsia, andypost, Garrett Albright, pfrenssen, Taran2L, kim.pepper, phenaproxima, andregp, daffie, geek-merlin, rfay, ranjith_kumar_k_u, tf198, Damien Tournoud, catch, alexpott, xjm, chx, bradjones1, hestenet, mstrelan: SQLite database locking errors cause fatal errors
- Issue #3283802 by Wim Leers, bnjmnm, effulgentsia, mgifford: Update CKEditor 5 to 35.3.2 to fix voice control/IME on some platforms
- Issue #3322763 by Spokje: Fix PHPStan L2 error "PHPDoc tag @return with type Foo is incompatible with native type void."
- Issue #2689923 by pradhumanjainOSL, johnrosswvsu, WagnerMelo, leoneldiaz02, Anchal_gupta, sk33lz, apaderno, smustgrave, alexpott, jhodgdon: hook_views_pre_view incorrect documentation example
- Issue #3032078 by jrglasgow, dagomar, Berdir, nikitagupta, catch, anmolgoyal74, technoveltyco, idebr, ndf, jonas139, nod_: Multiple webheads can cause infinite growth of Twig cache
- Revert "Issue #3260173 by andregp, joachim, tstoeckler, nod_: Media should set the owner field to anonymous if no explicit owner is set"
- Issue #3260175 by jsricardo, andregp, joachim, nod_, alexpott: Saving media entity without an owner crashes
- Issue #3260173 by andregp, joachim, tstoeckler, nod_: Media should set the owner field to anonymous if no explicit owner is set
- Issue #3321771 by Wim Leers, Chi: CKEditor 5 Duplicated constants in assert statement
- Issue #3164428 by DonAtt, longwave, sahil.goyal, Anchal_gupta, alexpott: Use cacheBackend->setMultiple in ContentEntityStorageBase::setPersistentCache
- Issue #3276213 by nod_, Wim Leers, lauriii, mherchel, longwave: Uncaught exception when data-caption contains markup upcasting to a model element
- Issue #3321191 by nod_, longwave, Spokje: update ckeditor5 to v35.3.1
- 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 #3319839 by alexpott: Exceptions in post updates are very broken since #3295625
- Issue #3319735 by claudiu.cristea: Rename CKE5 button tooltip "Insert Drupal Media" to "Insert Media"
- 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 #3247121 by ramil g, joelpittet: Aggregation of nid when using COUNT produces syntax error
- 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 #3145501 by quietone, alexpott, Spokje, longwave, plach, catch, smustgrave, larowlan, xjm, mxwright: updb error processMultivalueBaseFieldHandler()
- Issue #3317515 by bnjmnm, longwave, catch, Wim Leers: Random fail in Drupal\Tests\quickedit\FunctionalJavascript\CKEditor5IntegrationTest::testArticleNode() on 9.4 and 9.5
- Issue #3251817 by alexpott, jonathan1055, nicxvan, longwave: Make run-tests.sh select all the required tests when testgroups: has more than one value
- Issue #3314469 by alecsmrekar, plach: ContextDefinition::isSatisfiedBy does not take into account cardinality
- Issue #3313946 by nod_, longwave, Wim Leers, catch: Update CKEditor 5 to 35.2.1
- 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 #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 #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 #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 #3311776 by Chi, Nitin shrivastava, emarinho, ckrina: Claro: Highlight dependency errors on admin/modules page
- Issue #3280302 by anoopsingh92, Shashwat Purav, arunkumark, bbrala: JsonApiDocumentTopLevelNormalizerTest::generateProphecies called with extra arguments
- Issue #3276469 by Wim Leers, Reinmar: [drupalMedia] MediaImageTextAlternativeUi has an extraneous border on the "cancel" button
- Issue #3284983 by angrytoast: Views FilterPluginBase::groupForm double translates group item label strings
- Issue #3251647 by dsdeiz, phenaproxima, joachim: Field mapping options in media type form are not sorted correctly