Where Older Books and Tutorials Are Outdated
|
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 has a six-month release cadence and a deprecation policy, so a book that was correct when it was printed can describe a module, a hook style or a requirement that has since changed. This page was checked on 2026-10-30 against Drupal 11.4.x, with Drupal 12.0.0 scheduled for the week of 2026-12-07 and the end of life of Drupal 10 scheduled for 2026-12-09. It lists, area by area, what older material says, what is true now, since which version, and where the official source is. It covers three books published by Packt in 2023: Drupal 10 Development Cookbook by Matt Glaman and Kevin Quillen (third edition), Drupal 10 Masterclass by Adam Bergstein and Modernizing Drupal 10 Theme Development by Luca Lusso, and the advice that recurs in tutorials, blog posts and community answers from 2022 to 2025. In the tables they are shortened to Development Cookbook, Masterclass and Theme Development. The books are cited only to show where they differ from current documentation; none of their text, figures or screenshots is reproduced, and their explanations of concepts such as the Entity API, Views, the render pipeline and the test pyramid remain a good introduction. Where any older source and the official documentation disagree, the official documentation wins.
The books target Drupal 10.0 or 10.1, PHP 8.1 and Drush 12. Everything below follows from that baseline: the platform moved twice (Drupal 11 in 2024 and Drupal 12 in preparation), and several features that the books present as new or experimental became ordinary, while a few that they present as core were removed. The timeline behind most rows is on Versions, Release Cycle and Support.
Platform and versions
| Older advice | Current state | Since | Official source and site page |
|---|---|---|---|
Development Cookbook and Masterclass target PHP 8.1 and database minimums of MySQL 5.7.8, MariaDB 10.3, PostgreSQL 12 and SQLite 3.26. One Masterclass example sets |
Drupal 11 needs PHP 8.3 or later and runs on 8.3 to 8.5; Drupal 12 requires PHP 8.5. The database minimums are higher too, and Drupal 12 raises them again (the requirements page and the 12.0.0 beta release notes give different PostgreSQL values, so check both before choosing a server). Set |
11.0 |
PHP requirements and Database server requirements; Requirements and Hosting |
Masterclass describes Drupal 11 as a future release and Drupal 7 as still supported. Development Cookbook treats Drupal 10 as the current line. |
Drupal 11.0.0 was released on 2024-08-02 and Drupal 7 reached end of life on 2025-01-05. Drupal 10 ends on 2026-12-09, with 10.6 as its last minor, so a new site should start on 11.4. Drupal 12 refuses to upgrade from 11.2 or earlier; upgrade through 11.3 or later. |
11.0 |
Drupal 11.0.0 release notes and How to upgrade from Drupal 11 to Drupal 12; Versions, Release Cycle and Support |
Masterclass is written against Symfony 6.2. |
Drupal 11 uses Symfony 7, and Drupal 12 moves to Symfony 8. Code that type-hints Symfony classes, subscribes to kernel events or extends Symfony Console commands must follow the major version of the release it runs on. |
11.0 |
|
The books assume Apache, nginx or IIS as equally valid hosts. |
IIS support was removed in 11.0, and Windows production hosting is deprecated from 11.3. Use Apache 2.4.7 or later or nginx. From 11.3, a reverse proxy or CDN must also pass the HTMX request headers. |
11.0 |
Installation and project setup
| Older advice | Current state | Since | Official source and site page |
|---|---|---|---|
Download a tarball, upload a module archive or install a module and theme from a URL in the administration interface. |
Composer is the only supported way to add or update code. The pages that install an extension from a URL or an archive were removed in 10.4 and 11.0, and the user interface that updated modules and themes through |
10.4 and 11.0 |
Change record: The feature to install a new extension from a URL via the Drupal UI has been removed; Updates, Composer and Security Advisories |
Install Drupal with the Standard profile and open the Article and Page content types. |
From 11.4 the Standard install no longer creates the Article and Page content types. Create the types you need, or apply the matching core recipe. Tutorials that begin with the Article type need a first step that creates it. |
11.4 |
Drupal 11.4.0 release notes; Recipes and Installation with Composer and DDEV |
Start from |
|
11.4 |
Using Composer to install Drupal and manage dependencies; Installation with Composer and DDEV |
Development Cookbook uses DDEV with MariaDB 10.3 and the matching |
DDEV remains the recommended local environment, but the database type and version, the PHP version and the web server come from the current Drupal 11 quickstart. Create the project with |
11.0 |
DDEV quickstart: Drupal; Project Layout and Local Development |
Registration is open by default and |
New installs register users as "Administrators only" (11.1), |
10.3 and 11.1 |
Change record: User logout route is now CSRF protected and Change record: Super user access policy; Security Hardening |
Site building and content
| Older advice | Current state | Since | Official source and site page |
|---|---|---|---|
Development Cookbook builds pages with Layout Builder; Masterclass presents Layout Builder as the only visual builder in core and treats Project Browser, Automatic Updates and recipes as future work. |
Layout Builder stays in core, but Canvas (formerly Experience Builder, contributed, 11.3 or later) is the visual builder of Drupal CMS 2.x and renders Single Directory Components and JavaScript code components. Recipes shipped in 10.3, Drupal CMS followed in 2025, and Project Browser and Automatic Updates exist as contributed projects. Drupal CMS 2.0 has no automatic migration from Layout Builder or Paragraphs to Canvas, so decide per site. |
10.3 |
Drupal Canvas documentation and Drupal CMS documentation; Canvas and Layout Builder |
Recipes are an initiative still to come. |
Recipes are in core since 10.3 and applied with |
10.3 |
Distributions and Recipes documentation; Recipes and Drupal CMS and Site Templates |
Both books use the Statistics module for page counters and the Book, Forum and Activity Tracker modules as core features. |
Actions UI, Activity Tracker, Book, Forum, Statistics and Tour were removed in 11.0, and Color, Quick Edit, RDF, Aggregator and HAL in 10.0. Before upgrading, install the contributed version of each removed module you use and do not uninstall it first. |
10.0 and 11.0 |
Deprecated and obsolete modules and themes; Removed Core Modules and Replacements |
Text format examples are written for CKEditor 4 in older tutorials and forum answers. |
CKEditor 4 was removed in 10.0. Every editor page uses CKEditor 5, whose toolbar items, styles and plugins are configured differently. The books cover CKEditor 5, but tutorials from 2022 and earlier do not. |
10.0 |
Change record: CKEditor 4 is removed from Drupal Core in 10.0.0; Text Formats and CKEditor 5 |
Administration interface
| Older advice | Current state | Since | Official source and site page |
|---|---|---|---|
The administration bar is the Toolbar module, with Admin Toolbar as its usual extension. |
The Navigation module became stable in 11.3 and is the navigation that remains in core in Drupal 12. Toolbar and Shortcut move to contrib in 12, so a site that uses them requires the contributed projects before upgrading and does not uninstall them. |
11.3 |
Drupal 12.0.0-beta1 release notes; Admin UI, Navigation and Admin Themes |
Claro is the administration theme and Olivero the front-end theme; Stable and Classy are the base themes. |
Classy and Stable were removed in 10.0 (Starterkit replaces them). Default Admin, based on Gin, arrived as an experimental core theme in 11.4 and replaces Claro as the admin theme in Drupal 12, which also removes Olivero and Stable 9. Choose a base theme and a front-end theme with that in mind. |
10.0 and 12.0 |
API reference: default_admin.info.yml; Admin UI, Navigation and Admin Themes |
Migrations from Drupal 7 use Migrate Drupal and its UI. |
Drupal 12 removes Migrate Drupal and Migrate Drupal UI with no contributed replacement, so a Drupal 7 migration must land on an 11.x site first and then be upgraded. |
12.0 |
Theming
| Older advice | Current state | Since | Official source and site page |
|---|---|---|---|
Theme Development and Masterclass present Single Directory Components as an experimental module: enable |
SDC is part of the core render system since 10.3. There is no module to enable, generated libraries are named |
10.3 |
Using Single Directory Components; Single Directory Components |
Theme Development says "Drupal 11 doesn’t exist yet" and targets PHP 8.1 and Starterkit from 10.1.0. |
Starterkit remains the way to start a theme ( |
11.0 |
|
Theme code calls |
Preprocess hooks can be class methods from 11.2 and themes support the other hooks as classes from 11.3, so a theme can keep its logic in |
11.2 and 11.3 |
Change record: Hooks in themes can now be OOP; Hooks and OOP Hooks |
Libraries list |
jQuery UI is internal to core and is no longer a public library, |
10.0 and 12.0 |
Adding assets (CSS, JS) to a Drupal theme via libraries.yml; Libraries and Assets |
Twig templates use |
The |
11.1 and 11.4 |
Filters - Modifying Variables In Twig Templates; Twig Templates and Debugging |
Tailwind CSS 3 with a |
Tailwind CSS 4 is configured in CSS, Vite is the usual bundler for Drupal, and the Storybook module renders real Twig through Drupal instead of Twig.js, which does not know Drupal filters and functions. |
n/a |
Module development
| Older advice | Current state | Since | Official source and site page |
|---|---|---|---|
Plugins are written with docblock annotations: |
Plugins use PHP attributes such as |
10.2 |
Change record: Plugin implementations should use PHP attributes instead of annotations and Plugin API: Attribute-based plugins; Plugin API and Attributes |
Hooks are functions in |
Hooks are methods marked with |
11.1 |
Change record: Support for object oriented hook implementations using autowired services; Hooks and OOP Hooks |
Classes call |
Inject services through the constructor. Core registers service aliases for autowiring (10.1), autowiring is enabled in core’s services files (10.2) and |
10.1 and 10.2 |
Change record: Core services provide aliases for autowiring and Change record: AutowireTrait allows ContainerInjectionInterface classes to be autowired; Services and Dependency Injection |
Entity queries run without an explicit access decision. |
|
9.x |
Change record: Access checking must be explicitly specified on content entity queries; Database API and Entity Queries |
Settings forms read and write configuration in |
|
10.2 |
Testing and tooling
| Older advice | Current state | Since | Official source and site page |
|---|---|---|---|
Development Cookbook uses PHPUnit 9.5 with |
Drupal 11 runs PHPUnit 11 with metadata as attributes ( |
11.2 |
PHPUnit 11 manual: Attributes and PHPUnit in Drupal; Automated Testing |
Drush commands are classes with |
Drush 13 serves Drupal 10.2 and 11, Drush 14 serves 11.3 and 12. Commands use attributes ( |
Drush 13 |
Drush: Writing commands and Drush: Deploy command for Drupal; Drush |
Coding standards are described on the old drupal.org pages and checked with an older Coder release. |
Standards moved to |
n/a |
Drupal coding standards and Coder project page; Coding Standards and Static Analysis |
Headless and APIs
| Older advice | Current state | Since | Official source and site page |
|---|---|---|---|
Theme Development builds a decoupled front end with the next-drupal Pages Router and |
Current Next.js guidance uses the App Router and |
n/a |
Change record: Simple OAuth 6.0.x removes unrecommended grant types; Decoupled Drupal with Next.js and JSON:API |
REST resources are the default way to expose content. |
JSON:API is the recommended default for entity data; the REST module remains for custom resources and serialisation. |
8.x |
|
AI is not part of the books. |
The AI module supports many providers through the Key module, and the MCP Server module exposes a site over MCP. Keys never belong in exported configuration. |
n/a |
Changed since older tutorials
The tutorials and books above share a short list of changes that account for most of what no longer works. Each is a pair of "you may read" and "do this now".
| You may read | Do this now |
|---|---|
Annotations on plugins |
Attributes on plugins (10.2, 11.2 for all core types) |
Hooks in |
|
|
Autowired command classes with attributes (Drush 13 and later) |
PHPUnit docblock annotations |
PHPUnit attributes (11.2 and later) |
Experimental SDC module |
SDC in core since 10.3, nothing to enable |
Layout Builder as the only visual builder |
Layout Builder in core, plus Canvas for Drupal CMS 2.x and new component-based sites |
Toolbar module |
Navigation module (stable in 11.3) |
Claro admin theme |
Default Admin (experimental in 11.4, the admin theme in 12) |
Install modules from the administration interface |
Composer, then optionally Project Browser or Automatic Updates |
Standard profile creates Article and Page |
Create content types yourself or apply a recipe (11.4) |
Run Drupal on IIS |
Apache or nginx (IIS removed in 11.0) |
Generic warning signs in older tutorials
A tutorial is probably out of date when it:
-
targets Drupal 8, 9 or 10.0 and 10.1, PHP 7.x or 8.1, or Drush 8 to 12;
-
has you upload a module through
/admin/modules/installor download a tarball; -
uses
.modulehook functions with no mention of#[Hook], or plugin annotations with no mention of attributes; -
shows a
drush.services.yml,@commandannotations or Classy and Stable as base themes; -
installs the
sdcmodule, or builds with the Toolbar, Claro and Layout Builder only; -
describes CKEditor 4, the Statistics, Book or Forum modules as core, or Migrate Drupal as a long-term option;
-
tells you to use the Standard profile and then edit the Article content type.
When in doubt, check the date of the source against the timeline on Versions, Release Cycle and Support, search the change records for the feature, and confirm the fact in the official documentation below.
References
-
Change record: The feature to install a new extension from a URL via the Drupal UI has been removed
-
Change record: Support for object oriented hook implementations using autowired services
-
Change record: Plugin implementations should use PHP attributes instead of annotations
-
Change record: AutowireTrait allows ContainerInjectionInterface classes to be autowired
-
Change record: Access checking must be explicitly specified on content entity queries
-
Change record: CKEditor 4 is removed from Drupal Core in 10.0.0
-
Change record: Simple OAuth 6.0.x removes unrecommended grant types