May 15th, 2021

Learning Drupal 9

Here are some of the key resources I've relied on to build skill and knowledge in developing Drupal 9 applications. I start with some general thoughts and then list out the resources themselves according to that general framework. I highly recommend a subscription to, and many of the links below will require one.

General approach

  • Create a user account!
  • Spend some time initially reading up and watching videos on how Drupal 8/9 is different from 7, some of the key features baked into core, and high-level overviews of things like configuration, media, entities, module development, and to some of the basic OOP principals introduced
  • Get a local environment set up. I've done so with MAMP, Vagrant, and DDEV, but I really like to do it with Lando. This will give you an introduction to composer, the codebase, the file structure, and drush commands.
  • Set up the config sync directory and run drush cex in the container / on the server in Lando to export your site's configuration to that directory. Take a look at some of the files that are exported (yaml) and note the difference between this kind of configuration and the active configuration stored in the database. Review the configuration management section, particularly those items related to syncing, splitting, deploying, and overriding configuration.
  • Practice creating content types, fields, and entity references—especially to paragraphs (which will necessitate at least a cursory look at revisions). Understand entities... and then wrap your head around media management (which is a special subset of file management).

    Find a project to work on, or a particular problem to solve. Whatever you do, just don't wait until 3:14am on January 19, 2038.

  • Learn some basic PHP.
  • Checkout and install a dev version of some module using composer. Make updates to that module's code, export a patch and share with a colleague who will then apply that patch using composer and verify. Try the other way around as well.
  • Build a basic module and then learn about things like plugins, services, and events (and event routes and controllers). Read up on the difference between events (OO) and hooks (older, procedural), and get comfortable with the project structure, listing and issues on, and how to get help.
  • Finally, dig into decoupling!


What's new

Object-oriented PHP

Getting set up

Other resources

Development resources




Patching and contributing

Configuration management


Configuration API

Configuration Management Initiative (CMI) 2

Content modeling and workflows

Entities and revisions


Content moderation

Media management

Core media module


Module development


Hooks and events

Service containers




JSON:API and web services

API documentation


Example code