This idea has graduated to a strategic initiative after Dries approved this as a strategic initiative during the Driesnote at DrupalCon Portland. This page is now archived in favor of the official initiative documentation.
Historical Information
Background
The Distribution Modernization Initiative is a community effort modernize how distributions in Drupal work, as well as update how they are discovered and delivered by Drupal.org.
Distributions have been proposed as key Drupal feature since Dries blogged in 2006 about better support arriving in Drupal 5. Drupal 8's configuration management system has underpinned some improvements for Distributions and there are a few successful distributions such as Open Social, Varbase, Contenta, Thunder, and LocalGov.
Problem
Distributions are difficult:
- They are hard to discover before you install Drupal
- Once you've chosen to start with a distribution, switching the profile is hard
- Distributions are awkward on Drupal.org
- Distributions are hard to maintain over several Drupal release cycles
- Sites built on distributions can be hard to update - for example Panopoly (a very popular D7 distribution) still does not have a stable D8 or 9 release.
Proposed resolution
We intend to implement:
- A new concept: Drupal Recipes. Drupal recipes allow the automation of Drupal module install and configuration via the user interface and via the Drupal recipe composer plugin.
- An improved concept: Composer project templates. Add new abilities to composer create-project for Drupal distributions to leverage in order to completely replace some of the special functionality of install profiles / starter kits / distributions.
More documentation about the initiative can be found at: https://git.drupalcode.org/project/distributions_recipes
We aim to:
Improve discovery
When you install Drupal for the first time you are presented with Standard, Minimal or the Umami Demo to install. We want to explore using the Project Browser to allow a user to select a Drupal recipe whilst installing.
Allow multiple Drupal recipes to be used on the same project
If you choose a distribution, for example, OpenSocial, you cannot also install another distribution like Commerce Kickstart or Thunder to easily add e-commerce or professional publishing tools to your site. You're locked in. Multiple Drupal recipes can be installed on the same site.
Install a recipe at anytime in a project’s life-cycle
Similarly, if after a few years of running your site built on standard Drupal you cannot use OpenSocial to add community collaboration tools to your site. We want to remove the barriers to do this.
Make it easier to maintain 100s of sites that have a common starting point
One use-case that distributions satisfy is to provide a way to start and maintain 100s of micro-sites. This is particularly common within the education sector. We want to make this easier and also ensure that any of the other changes don't make this harder.
Easier updates
One of the pain points maintaining distributions is providing updates to sites that are already using your distribution. Working out how to add new functionality to existing sites is hard because every existing site is in a different state. A few distributions are working together on the Update Helper module and we're looking to bring this functionality to core.
Better support on drupal.org and via composer
Drupal.org support for distributions has been improved to identify distributions correctly and will support pushing distributions to packagist so they can be used as composer project templates.
Enable Drupal recipes to ship demo content
Many distributions provide example content as a way of introducing their functionality. At the moment distributions are doing this in many different ways, importing from CSV or using the Default content module. It's often complete something custom. We want to provide functionality in core and make it easy for a Drupal recipe to provide example content.
Process and where to find it
We meet fortnightly on Tuesday at 16:00 UTC in the #distributions-and-recipes channel in Drupal Slack.
- 03:00 Tuesday - Australian Eastern Time (AET)
- 21:30 Tuesday - India Standard Time (IST)
- 17:00 Tuesday - Central European Time (CET)
- 9:00 am Tuesday - Pacific Time (PT)
- When in doubt, ask the oracle.
Proposal roadmap
Drupal recipes: https://git.drupalcode.org/project/distributions_recipes/-/blob/1.0.x/do...
Composer project templates: https://git.drupalcode.org/project/distributions_recipes/-/blob/1.0.x/do...
Not in scope
Related work
- The project browser initiative - hoping to use this to fix #2818085: [meta] Recipe downloads from the installer.
Existing core features
- Installation system
- Update system
- Current distribution & install profile functionality
Open core issues
#3252534: [Plan] Distribution support on drupal.org and packages.drupal.org
#3265281: Use composer templates for starter kits instead of install profiles
#3264926: Split distribution functionality into a composer template and a module
#1497268: Add revert functionality to Config entities
#2114713: Enable installation of distribution (install profile) at install time and provide curated list of available distros
Contributed projects
TBD - Not sure.
Team and resources
@todo: Does this need to be more specific than the following list?
- Members of the Drupal Core committer team
- People from the DA Engineering Team
- Maintainers of Distributions
- Other interested community members
- ...
Signoffs
Dries signed off on the initiative as it was presented during the DriesNote at DrupalCon Portland.
Comments
Comment #2
alexpottComment #3
dwwFleshed out "Team and resources" section with @mixologic's general categories from the Slack thread about your 5 min talk @ DDD. Does it need to be more specific than that? Do we want sublists with specific users for each category?
Comment #4
kreynen commentedbut it can be done.
Comment #5
alexpottLinking up so of the prior work in the idea's queue that is in the same space.
Credit to @DamienMcKenna for #3155656: Change how distributions are handled which is closely aligned to #3265281: Use composer templates for starter kits instead of install profiles
Credit to @larowlan for #2818085: [meta] Recipe downloads from the installer. which is closely aligned to the idea using the Project Browser in the installer.
Comment #6
alexpottAdding link to #2114713: Enable installation of distribution (install profile) at install time and provide curated list of available distros in issue summary as we should use the existing issue to add Project Browser to the installer
Comment #7
alexpottOne of the key tasks we have is to define the requirements for the concept of Starter Templates that Dries announced in the keynote in Portland. I've created a google doc to flesh this out prior to posting to a task or this issue - see https://docs.google.com/document/d/1_PoxyIPND-d2TkgrThzivcJS8B_Bg1gIIrkF... - please request edit access if you want to contribute, comments are already enabled. I'm using google to final the requirements for starter templates as it is slightly easier to have multiple contributors at the same time.
Similarly before posting the roadmap here I'd like to work on it as a team in google docs - see https://docs.google.com/document/d/1LAbky8RTNpnurZiDeHwhKbHVhDynnzJYPhul... - please request edit access if you want to contribute, comments are already enabled.
Comment #8
nedjoA promising initiative. Some background material and comments drawing on my experience in this area, including a number of modules I've written or contributed to, some little more than proofs-of-concept and others more fully developed.
It's a laudable aim. Over the years a lot of thought and work has gone into what might be required to make it happen. I summarized some of this in Tips for writing interoperable Drupal distributions. While the article's a decade old and applied to Drupal 7, most of the core challenges remain. See also an 8-part blog series on "Managing shared configuration", starting with part 1.
Many of the key challenges can be derived from just a couple of simple problem statements of what interoperable distributions would presumably need to do:
Problem #1 would require:
Re problem #2, see Drupal distributions, blocks, and subthemes and the Skins module.
Comment #9
alexpottUpdating issue summary with work from the https://git.drupalcode.org/project/distributions_recipes repository and with all the initiatives recent work on documentation and terminology.
Comment #17
gábor hojtsyCrediting people who participated in the discussions so far outside of the issue, list from @alexpott.
Comment #26
gábor hojtsyCrediting continued.
Comment #33
gábor hojtsyDone crediting.
Comment #34
alexpottComment #35
mpotter commentedI missed DrupalCon this year so coming into this late. This is super exciting. It honestly sounds like the kind of problem we were trying to solve with Features (and Apps) back in the day (reusable pieces of functionality).
I agree with nedjo on many of the hard problems. There needs to be a well-defined way for a site to use a recipe and decide if it wants to get new updates to that recipe in the future, or if it wants to fork/override it.
One problem with Features was that they would get reverted, losing local changes, breaking sites, requiring a need for an override mechanism.
In D8/9/10 with core config management, a module can provide starting configuration, but once the module is installed, updates to that configuration are ignored unless they come in via update hooks by the module. And updating config in an update hook could have the same problems as Features losing local changes or breaking sites.
As a site builder, I'd want a way to browse recipes (Project Browser), select the ones I want, then either "lock" them or not if I want to receive updates and improvements. But that might conflict with how a developer (vs site builder) would want to control recipe versions via composer and semantic versioning. The idea of mixing recipes rather than being tied to a monolithic distribution would be great.
Comment #36
amjad1233Hi There,
Just read the intro and it sounds like an excellent idea. Especially for use cases like universities sites, where you have multiple sites with similar code base and don't want a lot of maintenance burden.
The only piece missing here seems to be front-end components. For example, if I have a recipe with one or more React components it would be good to pull in front-end deps as well.
What everyone thinks about it? I am not digesting it well and bit confused about if Recipe is a "decoupled component or piece of functionality" or it's like the installer script?
Also, if I am reading correctly distributions are collection of recipes or something like traditionally how we have we install and then carry on from there?
Any light on above questions would be appreciated.
Comment #37
kreynen commented@amjad1233 Because the goals for this features have been discussed for 10+ years, the information about this is spread across many issues and channels.
https://www.drupal.org/about/core/strategic-initiatives-distributions-an... is the summary of what is and isn't in scope for this as well links to where the work is being done and how to get involved.
The easiest way to discuss how this impacts/relates to front end components would be to join https://www.drupal.org/project/infrastructure/issues/33013 or open an issue in https://www.drupal.org/project/distributions_recipes
Since you are also in higher ed, I've reached out to you directly as well. There are several people from higher ed involved, but we can always use more people/perspectives.
Comment #38
effulgentsia commentedI think #2873160: Implement core management of 3rd-party FE libraries is the relevant issue for that. That issue is independent from the Recipe initiative. If it ends up getting solved via Composer, then Recipes will be able to benefit from that. If instead of Composer, we decide to use npm or similar, then we might want to define how recipes can identify their npm dependencies (presumably via a package.json file). Per #2873160-111: Implement core management of 3rd-party FE libraries, I hope we can find a solution there that doesn't require Node.js on the server in order to be able to install recipes via Project Browser, but I don't know if we'll be able to.
Comment #39
amjad1233Thanks @kreynen & @effulgentsia I really appreciate your input. The strategic initiatives page is a valuable resource. Also, the issue #2873160 seems like a place to start with and port over some knowledge to Recipes initiative. I found a link to next meetup and will try to attend it to discuss this further.
My main objective is to have one front-end component (not to confuse with React component but could be one) as example or at least tool set in the recipe framework's "core", to give other users a way to build up and share their library.
Especially, in education arena where re-usable components are very viable scenario. In a way keeping the philosophy of mix and match.
To give you a scenario,
In the most university websites, I find courses/programs listing and filtering view a common thing.
Imagine how good it would be to put that view as a backend and a barebone React component which someone can download via composer and override it with their own requirements. Like how we have at https://study.uq.edu.au/study-options/programs
In addition to that, they can add new functionalities and share it back to the community. It's same approach as Modules but again but this example, however config is not sort of "ejected" after initial installation, here if, I add a common type of filter, like text search, other people can easily receive through recipe updates for the view as well as the React component I shipped.
I mean just receiving update for views config does not make sense, because then I am going back and updating my front-end component to alight with the changes pushed. In which scenario, why don't I just use a module ? So I sort of don't have to comply with the updates...
Comment #40
nerdsteinMarking as "closed (outdated)" in favor of the strategic initiative documentation found here: https://www.drupal.org/about/core/strategic-initiatives-distributions-an...
Comment #41
tim.plunkettUntil the initiative has been completed, this issue should be kept open. The other closed (outdated) ideas issues are for abandoned ideas, not active ones.
Comment #42
manarth commentedComment #43
bsnodgrass commentedShould the title include [META]?
Comment #44
thejimbirch commentedPhase 1 has been completed and merged into Drupal core. Additional work continues in the initiative space to help move Starshot forward.
Comment #45
pameeela commentedI think this can be considered fixed now that it is in core. Certainly there is no further work required in the ideas queue.
Comment #47
xjmAmending attribution.