The main focus of Richard Gaunt’s session at DrupalSouth Melbourne 2025 was simplifying Drupal site building using Feature Recipes. His talk explored how recipes provide a lightweight, composable alternative to traditional site profiles, enabling developers to build scalable, modular configurations that streamline both setup and ongoing site maintenance.
Ready, set, Drupal: simplifying development with feature recipes
In this session, Richard Gaunt, technical lead at Salsa Digital, introduced feature recipes as a powerful way to streamline Drupal development. Unlike traditional install profiles, recipes offer a modular, one-time application of configuration, themes and modules using simple YAML files. Richard’s talk walked through the why, how and what of recipes, highlighting how they reduce complexity, improve reuse and support more flexible, maintainable site builds.
Drawing from hands-on experience and Salsa’s work on CivicTheme, Richard showed how recipes can simplify both developer workflows and content editor experiences. He also touched on how Drupal CMS integrates recipes, enabling site builders to install functionality directly through the UI, no command line required.
What are Drupal feature recipes?
Feature recipes are a lightweight, composable way to bundle and apply functionality in Drupal. Instead of relying on complex install profiles or content modules, recipes use simple YAML files to define tasks like installing modules, enabling themes, importing configuration and even providing starter content. They are applied once, leaving no ongoing dependency between the recipe and the site.
Each recipe acts as a building block that can be combined with others, allowing developers to compose functionality in a modular way. You can use a single recipe for something specific (like adding a blog content type), or combine multiple recipes to create a fully configured starting point for a site.
Recipes are designed to be reusable, shareable and easy to apply. They simplify setup and help avoid common problems like configuration collisions, making them a powerful addition to the Drupal developer toolkit.
Why feature recipes matter
Before feature recipes, Drupal developers often relied on install profiles or custom content modules to package up functionality. These approaches had major limitations. Install profiles required a fresh site and couldn't be reused on existing projects. Content modules bundled configuration inside code, which often led to maintenance overhead and conflicts when fields or entities already existed on a site.
Feature recipes solve these issues by introducing a simpler, more flexible way to apply functionality. They’re applied, not installed, which means they work with existing sites. They also support a composable architecture, which makes it easy to mix and match features without creating tangled dependencies or rigid structures.
For teams working across multiple projects or maintaining design systems like CivicTheme, feature recipes provide a scalable way to deliver consistent, reusable functionality without added complexity.
How Drupal CMS uses feature recipes
Drupal integrates feature recipes directly into both the installation process and the admin interface. During setup, users can select recipes like “Blog” or “Events” before completing installation, allowing them to add structured functionality from the start. These recipes automatically create content types, configure fields and even generate example content to guide new users.
Once the site is installed, site builders can continue to apply recipes through the Project Browser module. This interface lets users browse and install contributed feature recipes without needing the command line. Some recipes also include custom forms that prompt the user for input, such as tags or API keys, before installing.
By embedding feature recipes at both the beginning and ongoing stages of site creation, Drupal CMS makes it easier for non-developers to build structured, functional websites faster.
Structure of Drupal feature recipes
At their core, feature recipes are built to be lightweight, configurable and reusable. Rather than relying on custom code, recipes use structured YAML files to define actions that Drupal should take when the recipe is applied. This makes them easy to version, share and apply across different environments.
A basic recipe includes the following elements:
- recipe.yml: This is the core file that defines what the recipe does. It includes metadata (like the recipe name and description), a list of modules and themes to install, any other recipes it depends on and configuration or content it wants to import.
- Configuration directory (config/): Optional, but commonly used to store predefined configuration entities (like views, content types or display settings) that get imported when the recipe is applied.
- Content directory (content/): Used to provide sample content. For example, the Blog recipe includes a fully filled-out blog post to show content editors how things work.
- composer.json: Optional, used when recipes need to include contributed modules or libraries via Composer.
- Custom actions and inputs: Recipes can also use two key APIs:
- The Config Actions API allows recipes to update existing configuration, not just import new ones. This means you can adjust roles, permissions or layout settings programmatically.
- The Input API lets a recipe prompt the user for input, such as an API key or preferred options, during installation and then apply those inputs to the configuration.
- The Config Actions API allows recipes to update existing configuration, not just import new ones. This means you can adjust roles, permissions or layout settings programmatically.
Recipes are applied using Drush (e.g., drush recipe:apply path/to/recipe) or via the Project Browser in Drupal CMS. Once applied, a recipe is “done”—it doesn’t remain active or linked to the site. This makes it easier to apply functionality without adding long-term dependencies or tight coupling.
For example, in the CivicTheme installation recipe, Salsa selectively includes existing Drupal core recipes, applies only the CivicTheme components needed and updates the site configuration to set CivicTheme as the default theme. The result is a clean install process that mirrors the intended site experience without the overhead of legacy install profiles or unnecessary modules.
Feature recipes in Drupal 11 and CivicTheme
One of the most significant developments in Drupal is the shift from rigid install profiles to modular, reusable feature recipes. Richard explained that the standard site install profile in Drupal 11 has been fully restructured into a series of atomic recipes. These include recipes for individual content types like “Article” and “Page”, as well as recipes for permissions, performance settings, admin theme configuration and more.
This change means developers no longer need to start with an all-in-one profile and then disable unwanted features. Instead, they can mix and match only the recipes they need, improving flexibility and reducing unnecessary configuration.
, the open-source design system supported by Salsa Digital and used by over 30 Australian government sites, is already embracing this new approach. Richard described how CivicTheme’s current build process previously relied on scripts, modules and content bundling to assemble a working site. But now, the team is actively transitioning to feature recipes to simplify and streamline that process.
In CivicTheme’s case, the recipe selectively pulls in Drupal core recipes (like the basic block type), installs CivicTheme, imports only the relevant config (like media and form view modes) and sets CivicTheme as the default theme. In some setups, additional actions like disabling unnecessary blocks or enabling layout plugins are added. Richard also noted that this approach reduces install complexity, improves developer experience and supports faster onboarding for new projects.
Looking ahead, Salsa is exploring more composable versions of CivicTheme recipes—allowing developers to choose which content types or features to install, based on their specific needs. This mirrors the modular setup seen in Drupal 11’s standard profile and gives teams greater control over their Drupal builds.
Conclusion
Feature recipes are now a stable and well-supported part of the Drupal ecosystem. Richard Gaunt’s session at DrupalSouth Melbourne provided a practical overview of how they work, how they fit into modern Drupal workflows and the benefits they bring to both developers and site builders.
From simplifying configuration to enabling more modular and reusable functionality, recipes are set to play a central role in future Drupal site builds. With CivicTheme already adopting this approach, organisations can expect more efficient setup processes and greater flexibility in how sites are assembled.
About Richard Gaunt
Richard is responsible for setting the overall technical direction of Salsa projects and providing technical strategy. Richard works with Salsa engagement managers to investigate clients’ needs and technical requirements.