Removed Core Modules and Replacements
|
This content was generated with the assistance of AI and should be verified against the official Drupal documentation before being relied on in production. This sub-section’s Drupal bibliography lists the reference material consulted while preparing these pages. |
Drupal core sheds code at every major version: a module or theme is deprecated in a minor release, and the next major release deletes it. Some of it moves to a contrib project of the same name on drupal.org, which keeps working with help from the community; some is simply removed. This page lists every extension removed in 10.0 and 11.0, and every one scheduled for 12.0, says where it went and describes the replacement approach for each.
The page was checked on 2026-10-30 against Drupal 11.4.x (the current release), the 10.0.0 and 11.0.0 release notes, the Drupal 12.0.0-beta1 release notes and the drupal.org page that tracks deprecated, obsolete and removed core modules and themes. Drupal 12.0.0 is planned for the week of 2026-12-07 and has not been released, so everything labelled "12.0" below is scheduled, not final. Drupal 10 ends on 2026-12-09 (10.6 is its last minor), so a site still on 10.x should be moving to 11.3 or later now. The audience is the site administrator and the developer preparing an upgrade; the running example is the fictitious Meridian Museum site.
How a removal works
A removal follows the core deprecation policy. The extension is marked deprecated in a 10.x or 11.x minor release
(a lifecycle: deprecated key in its .info.yml file and a warning on the status report and in drush pm:list), and
the code is deleted in the next major release. In between, the extension keeps working, so deprecation is the signal to
act, not the moment things break.
What a "move to contrib" means in practice:
-
The contrib project has the same machine name as the module (for example
book,forum,toolbar), so a dependency in another module’s.info.ymlfile continues to resolve. -
The contrib project is maintained by volunteers, not by the core committers. It may have a different release cycle, a different security coverage and, for some projects, no stable release for the newest core.
-
Configuration, field storage and database tables are kept if the module stays installed.
The one rule: install the contrib version first, and never uninstall
The release notes for 11.0 and 12.0.0-beta1 give the same instruction. If a site uses a removed extension, require the contrib version before upgrading core, and do not uninstall the extension: uninstalling destroys its configuration and data. If the code is missing when Drupal boots a site that still lists the module as installed, the upgrade fails with a message about a missing module. Uninstall is only the right action for an extension that is genuinely unused.
The order of operations on the Meridian Museum site:
-
On the current release, list the installed extensions and check which ones are deprecated or scheduled for removal.
-
Run
composer require drupal/<project>for each one the site really uses, while still on the old core. -
Deploy, run
drush updatedband confirm the status report is clean. -
Only then raise the core constraint.
# Machine names of installed extensions that the site no longer needs are the ones to uninstall;
# those it uses are the ones to keep and to install from contrib.
ddev drush pm:list --status=enabled --type=module --format=list | sort > /tmp/enabled-modules.txt
ddev drush pm:list --status=enabled --type=theme --format=list | sort > /tmp/enabled-themes.txt
# Which removed or scheduled-for-removal extensions does Meridian still run?
grep -xE 'action|tracker|book|forum|statistics|tour|aggregator|color|hal|quickedit|rdf|ckeditor|ban|contact|field_layout|history|search|settings_tray|shortcut|telephone|toolbar|migrate_drupal|migrate_drupal_ui' \
/tmp/enabled-modules.txt
# Is a removed theme the default or the admin theme?
ddev drush config:get system.theme default
ddev drush config:get system.theme admin
# Install the contrib versions that are really used, while still on the old core
ddev composer require drupal/book drupal/forum drupal/statistics
Two tools do the same checking automatically: the Upgrade Status contrib module reports deprecated extensions and
code in custom modules, and composer why-not drupal/core:^11 (or ^12) shows which installed package blocks the
new core. The upgrade steps themselves are in Upgrading Drupal 10 to 11
and Preparing for Drupal 12.
Removed in Drupal 10.0
Drupal 10.0 removed the code deprecated during the 9.x series. The release notes list these extensions.
| Extension | Type | Where it went | Replacement approach |
|---|---|---|---|
Aggregator ( |
Module |
Contrib project |
Install the contrib project, or use a feed reader or a Migrate-based importer into a content type |
CKEditor 4 ( |
Module |
No supported successor in core; a contrib |
Move every text format to CKEditor 5 before upgrading (see Text Formats and CKEditor 5) |
Color ( |
Module |
Contrib project |
Install the contrib project, or set colours with CSS custom properties and theme settings (see Theme Settings and Configurable Themes) |
HAL ( |
Module |
Contrib project |
Use JSON:API (see JSON:API) or core REST with the JSON format |
Quick Edit ( |
Module |
Contrib project |
Install the contrib project, or edit through the normal node form or Canvas |
RDF ( |
Module |
Contrib project |
Install the contrib project, or print structured data yourself in Twig templates |
Entity Reference |
Empty stub |
Nothing |
Uninstall it; field types live in the Field module |
Migrate Drupal Multilingual |
Empty stub |
Nothing |
Uninstall it; its behaviour is in Migrate Drupal |
Bartik |
Theme |
Contrib project |
Use Olivero for 10.x and 11.x, then pick a custom theme before 12 (see below) |
Seven |
Theme |
Contrib project |
Use Claro for 10.x and 11.x, then Default Admin |
Classy |
Theme |
Contrib project |
Build a Starterkit theme; do not use Classy as a base theme |
Stable |
Theme |
Contrib project |
Use Stable 9 for 10.x and 11.x only, or a Starterkit theme |
Source: Drupal core 10.0.0 release notes
Notes on the 10.0 list:
-
CKEditor 4 is the removal that mattered most to editors. Every tutorial in this sub-section uses CKEditor 5, and a text format still configured for CKEditor 4 is not editable after the upgrade.
-
SimpleTest, the old in-browser test UI, left core before 9.0.0; 10.0 only removed the remaining support in the core test runner. Tests run with PHPUnit (see Automated Testing).
-
The replacement for Classy and Stable as starting points is a Starterkit theme generated with
php core/scripts/drupal generate-theme(see Starterkit and Subthemes). Stable 9 is the frozen copy of the Stable templates that keptstable9as a base theme.
Removed in Drupal 11.0
Drupal 11.0 (August 2024) removed these modules. All of them moved to contrib projects with the same machine name, except where the release notes name no destination.
| Extension | Type | Where it went | Replacement approach |
|---|---|---|---|
Actions UI ( |
Module |
Contrib project |
Install the contrib project to keep the admin page for configurable actions; the Action plugin API stays in core |
Activity Tracker ( |
Module |
Contrib project |
Install the contrib project, or build a Views listing sorted by changed date with comment statistics |
Book ( |
Module |
Contrib project |
Install the contrib project, or model hierarchy with a taxonomy or a menu (see Taxonomy and Menus and Path Aliases) |
Forum ( |
Module |
Contrib project |
Install the contrib project, or use a dedicated discussion product |
Statistics ( |
Module |
Contrib project |
Install the contrib project, or use an analytics service; remove the old statistics rule from your copy of |
Tour ( |
Module |
Contrib project |
Install the contrib project, or write help pages and use the Help module |
Help Topics |
Empty stub |
Nothing |
Uninstall it; the Help module covers the function |
Single Directory Components ( |
Empty stub |
Nothing |
Uninstall it; SDC is part of the core render system and is not a module to enable (see Single Directory Components) |
Source: Drupal core 11.0.0 release notes
The same release notes list non-module removals that affect the way code is added:
-
The pages
/admin/modules/install,/admin/theme/installand/admin/reports/updates/install, and adding an extension by URL, were removed without replacement. Composer is the only supported way to add code; updating core from the UI went in 11.2. -
IIS support was removed, and 11.0 ships no
web.configfile. -
jQuery Form and Shepherd.js stopped being public front-end dependencies of core.
-
Database drivers require MySQL 8.0 and MariaDB 10.6, SQLite 3.45 with the json1 extension, and PHP 8.3.
No theme was removed from core in 11.0.
Scheduled for removal in Drupal 12.0
The 12.0.0-beta1 release notes list nine modules and three themes as moved to contrib, and two modules as removed without a contrib project. Because 12.0.0 is not yet released, treat this table as provisional and re-read the final release notes in the week of 2026-12-07.
| Extension | Type | Where it goes | Replacement approach |
|---|---|---|---|
Ban ( |
Module |
Contrib project |
Install the contrib project, or block addresses at the web server, CDN or firewall |
Contact ( |
Module |
Contrib project |
Use the Webform module for the Meridian school booking form ( |
Field Layout ( |
Module |
Contrib project |
Install the contrib project, or use Layout Builder or Canvas (see Layout Builder) |
History ( |
Module |
Contrib project |
Install the contrib project when it exists; the "new" and "updated" markers depend on it |
Search ( |
Module |
Contrib project |
Use Search API with the database or Solr backend (see Search and Search API) |
Settings Tray ( |
Module |
Contrib project |
Install the contrib project, or configure blocks from the Block layout page |
Shortcut ( |
Module |
Contrib project |
Install the contrib project, or use the admin menu |
Telephone ( |
Module |
Contrib project |
Install the contrib project; field storage of type |
Toolbar ( |
Module |
Contrib project |
The new admin navigation in Default Admin is the replacement for new work (see Admin UI Navigation and Admin Themes); install the contrib project to keep the old toolbar |
Migrate Drupal ( |
Module |
Nothing: removed, not moved to contrib |
Migrate Drupal 7 data on 11.x first, then upgrade (see below) |
Migrate Drupal UI ( |
Module |
Nothing: removed, not moved to contrib |
Run migrations with Drush on 11.x |
Claro ( |
Theme |
Contrib project |
Switch the administration theme to Default Admin, a stable theme in 12 that was experimental in 11.4 |
Olivero ( |
Theme |
Contrib project |
Do not build on Olivero; use a Starterkit theme ( |
Stable 9 ( |
Theme |
Contrib project |
Remove it as a base theme; set |
The beta1 changelog also moves the text_with_summary field type into its own module. That module stays in core, so
it is not on this list, and body fields with a summary keep working after the update.
The two sources disagree on a few details, which this page states as they are: the beta1 notes name no destination project for any of the moved extensions and link to the tracking page for them, while the tracking page lists a contrib project for most but marks Contact and History as not yet available. It also gives inconsistent release numbers for Migrate Drupal and gives no deprecation version for Toolbar. The notes also give different database floors from the requirements page: beta1 lists MySQL 8.0, MariaDB 10.11 and PostgreSQL 19, and the requirements page names PostgreSQL 18 or 19.
Other 12.0 removals that change code rather than extensions:
-
The Syndicate block (the RSS feed icon), deprecated in 11.2.0 without a replacement, is removed, and its placements are deleted during the update.
-
Backbone and Underscore were removed from core’s third-party JavaScript libraries.
-
Password hashing defaults to argon2id, and Drupal 12 requires PHP 8.5.
-
Drupal 12 does not upgrade from 11.2 or earlier. Update to the latest 11.x first; the notes recommend 11.4 or later for the smoothest path.
The Migrate Drupal removal
Migrate Drupal and Migrate Drupal UI are the modules that read a Drupal 6 or 7 database and map it to Drupal 8+
entities. The Migrate API itself (migrate) stays in core, so custom CSV migrations such as the Meridian collection
import keep working. A museum with an old Drupal 7 site therefore must do the Drupal 7 import on Drupal 11, reach the
current 11.x, and only then move to 12. The workflow is in
Migrating from Drupal 7; the API is in
Migrate API.
The theme removals
Claro, Olivero and Stable 9 leave core in 12. A site that uses them has three choices:
-
Install the contrib theme of the same name and keep the look. Suitable for a short transition only.
-
Move to Default Admin for the administration theme, and a Starterkit-generated theme as the front-end theme.
-
For a Drupal CMS site, use the theme of the site template (Mercury for the Starter template).
For the Meridian site, the meridian theme was generated from Starterkit and has no base theme, so only the
administration theme changes. The change is one line of configuration:
ddev drush config:get system.theme
# default: meridian
# admin: claro
# On 11.4+, with Default Admin available:
ddev drush theme:install default_admin
ddev drush config:set system.theme admin default_admin -y
ddev drush config:export -y
Source: Theming Drupal: Starterkit
A Starterkit-generated theme does not inherit from Olivero, Claro or Stable, which is the reason the generator exists: copy the parts you need, own them, and a core removal cannot take them away.
An audit for the Meridian Museum
Meridian runs Book (a visitor guide), Statistics (a view counter on exhibitions), Search (the site search form), Contact (a general enquiry form), Toolbar and Claro. A check script before the upgrade finds those and reports the contrib project to install.
#!/usr/bin/env bash
# audit-removed-extensions.sh -- run inside the DDEV web container: ddev exec ./audit-removed-extensions.sh
set -euo pipefail
removed_modules="action tracker book forum statistics tour aggregator color hal quickedit rdf ckeditor \
ban contact field_layout history search settings_tray shortcut telephone toolbar migrate_drupal migrate_drupal_ui"
removed_themes="bartik seven classy stable stable9 claro olivero"
enabled_modules=$(drush pm:list --status=enabled --type=module --format=list)
enabled_themes=$(drush pm:list --status=enabled --type=theme --format=list)
echo "Removed or scheduled-for-removal modules still enabled:"
for m in $removed_modules; do
if grep -qx "$m" <<<"$enabled_modules"; then echo " $m -> composer require drupal/$m"; fi
done
echo "Removed or scheduled-for-removal themes still enabled:"
for t in $removed_themes; do
if grep -qx "$t" <<<"$enabled_themes"; then echo " $t"; fi
done
Source: Drush: pm:list
The script suggests composer require drupal/migrate_drupal for a project that has no contrib version. For
migrate_drupal and migrate_drupal_ui the correct action is to finish the Drupal 7 migration first and then uninstall
them, because no contrib project exists. Read its output as a prompt to check, not as a command list.
The resulting composer.json fragment for the museum, with contrib projects added while still on the old core:
{
"require": {
"drupal/core-recommended": "^11.3",
"drupal/book": "^3.0",
"drupal/statistics": "^1.0",
"drupal/toolbar": "^1.0",
"drush/drush": "^13"
}
}
The constraints above are illustrative; ask Composer for the real ones with composer show drupal/book --all or check
the project page, because a contrib project may not yet have a stable release that supports the newest core.
Common errors and pitfalls
-
Uninstalling to "clean up". Uninstalling Book removes its configuration, its table and the book outline of every node. The only safe uninstall is for an extension nobody uses.
-
Upgrading first, installing later. The contrib project must already be present in
composer.jsonwhen the new core is installed, otherwise the update step cannot load the module. -
Assuming contrib means supported. A contrib project may be maintained by one person, may lack a stable release for the newest core, or may be marked as unsupported. Check the project page, its issue queue and its security coverage before relying on it.
-
Treating Entity Reference or SDC as installed modules. They are empty stubs; the entries in the table are only there so that they can be uninstalled safely.
-
Forgetting the theme. A site whose administration theme is Claro boots to a missing-theme state when 12.0 removes it. Switch the theme on 11.x and export the configuration.
-
Copying old tutorials. Older books such as Drupal 10 Development Cookbook (2023) still use the Statistics module for counters and
core/jquery.uifor theming, and Drupal 10 Masterclass (2023) shows Drupal 7 as supported and Drupal 11 as a future release. Statistics was removed in 11.0; Drupal 7 reached end of life in January 2025.
Security
-
Contrib projects receive security advisories only when they are covered by the Security Team. Check the project page for the "Covered by Drupal’s security advisory policy" badge. An uncovered project can be installed but is the site owner’s responsibility.
-
Unmaintained modules such as an abandoned Forum or Contact replacement receive no fixes. If the feature is user-facing, plan a replacement rather than carrying the module.
-
Contact forms and Search are common spam and abuse targets; when you replace them, keep rate limits, CAPTCHA or honeypot protection and access checks (see Security Hardening).