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.

flowchart LR D[Deprecated in a minor<br/>lifecycle: deprecated] --> S{Moved to contrib?} S -- yes --> C[Install contrib project<br/>with Composer before upgrading] S -- no --> R[Replace the feature<br/>or drop it] C --> U[Upgrade the core major] R --> U U --> X[Core deletes the code]

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.yml file 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:

  1. On the current release, list the installed extensions and check which ones are deprecated or scheduled for removal.

  2. Run composer require drupal/<project> for each one the site really uses, while still on the old core.

  3. Deploy, run drush updatedb and confirm the status report is clean.

  4. 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 (aggregator)

Module

Contrib project aggregator

Install the contrib project, or use a feed reader or a Migrate-based importer into a content type

CKEditor 4 (ckeditor)

Module

No supported successor in core; a contrib ckeditor project exists but CKEditor 4 is end of life

Move every text format to CKEditor 5 before upgrading (see Text Formats and CKEditor 5)

Color (color)

Module

Contrib project color

Install the contrib project, or set colours with CSS custom properties and theme settings (see Theme Settings and Configurable Themes)

HAL (hal)

Module

Contrib project hal

Use JSON:API (see JSON:API) or core REST with the JSON format

Quick Edit (quickedit)

Module

Contrib project quickedit

Install the contrib project, or edit through the normal node form or Canvas

RDF (rdf)

Module

Contrib project rdf

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 bartik

Use Olivero for 10.x and 11.x, then pick a custom theme before 12 (see below)

Seven

Theme

Contrib project seven

Use Claro for 10.x and 11.x, then Default Admin

Classy

Theme

Contrib project classy

Build a Starterkit theme; do not use Classy as a base theme

Stable

Theme

Contrib project stable

Use Stable 9 for 10.x and 11.x only, or a Starterkit theme

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 kept stable9 as 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 (action)

Module

Contrib project action

Install the contrib project to keep the admin page for configurable actions; the Action plugin API stays in core

Activity Tracker (tracker)

Module

Contrib project tracker

Install the contrib project, or build a Views listing sorted by changed date with comment statistics

Book (book)

Module

Contrib project book

Install the contrib project, or model hierarchy with a taxonomy or a menu (see Taxonomy and Menus and Path Aliases)

Forum (forum)

Module

Contrib project forum

Install the contrib project, or use a dedicated discussion product

Statistics (statistics)

Module

Contrib project statistics, which now ships its own .htaccess protection

Install the contrib project, or use an analytics service; remove the old statistics rule from your copy of .htaccess

Tour (tour)

Module

Contrib project tour (Shepherd.js was dropped as a core dependency)

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 (sdc)

Empty stub

Nothing

Uninstall it; SDC is part of the core render system and is not a module to enable (see Single Directory Components)

The same release notes list non-module removals that affect the way code is added:

  • The pages /admin/modules/install, /admin/theme/install and /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.config file.

  • 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 (ban)

Module

Contrib project ban

Install the contrib project, or block addresses at the web server, CDN or firewall

Contact (contact)

Module

Contrib project contact (the tracking page lists it as not yet available)

Use the Webform module for the Meridian school booking form (school_booking) (see Forms for Visitors: Contact and Webform)

Field Layout (field_layout)

Module

Contrib project field_layout

Install the contrib project, or use Layout Builder or Canvas (see Layout Builder)

History (history)

Module

Contrib project history (the tracking page lists it as not yet available)

Install the contrib project when it exists; the "new" and "updated" markers depend on it

Search (search)

Module

Contrib project search

Use Search API with the database or Solr backend (see Search and Search API)

Settings Tray (settings_tray)

Module

Contrib project settings_tray

Install the contrib project, or configure blocks from the Block layout page

Shortcut (shortcut)

Module

Contrib project shortcut

Install the contrib project, or use the admin menu

Telephone (telephone)

Module

Contrib project telephone

Install the contrib project; field storage of type telephone is kept while the module stays installed

Toolbar (toolbar)

Module

Contrib project toolbar

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 (migrate_drupal)

Module

Nothing: removed, not moved to contrib

Migrate Drupal 7 data on 11.x first, then upgrade (see below)

Migrate Drupal UI (migrate_drupal_ui)

Module

Nothing: removed, not moved to contrib

Run migrations with Drush on 11.x

Claro (claro)

Theme

Contrib project claro (deprecated in the 11.x series)

Switch the administration theme to Default Admin, a stable theme in 12 that was experimental in 11.4

Olivero (olivero)

Theme

Contrib project olivero

Do not build on Olivero; use a Starterkit theme (meridian) or a Drupal CMS theme

Stable 9 (stable9)

Theme

Contrib project stable9 (deprecated in 11.4)

Remove it as a base theme; set base theme: false or use a Starterkit theme

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:

  1. Install the contrib theme of the same name and keep the look. Suitable for a short transition only.

  2. Move to Default Admin for the administration theme, and a Starterkit-generated theme as the front-end theme.

  3. 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

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.json when 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.ui for 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).