 All right, thanks everybody for coming. I hope you're having a good Drupal con Welcome to the Drupal distributions and recipes initiative update I put a link together for this slide deck at Jim BIR dot CH slash Drupal recipes or Drupal dash recipes. There's a lot of links that have included to help you Find your way around this Initiative I Am Jim birch. I'm an engineering manager at canopy studios. I'm the maintainer of a few modules that are primarily config starters Bootstrap paragraphs probably be in the most popular and I have SEO starter, which is another Another just config only module basically I'm former organizer of Drupal Chicago meetup and mid-camp Did that before I moved to the beach in Cape Cod, Massachusetts? And I am an initiative Coordinator of the recipes initiative We're gonna get into a lot of Technical things which are beyond the scope of my knowledge There's a lot of great developers that have worked on this project Alex pot bircher Ned Ned Joe That aren't here at this con so we wanted to talk about the distribution and its current state and You know what we need to move forward So I work at canopy studios We are hiring contract Drupal developers. So if you know if anybody who's looking or you're looking yourself Please feel to look us up So this all started last year at Drupal con Portland in Dries's keynote. He talked about starter templates so he had the idea that we could have a starter in Drupal that Can empower ambitious site builders? to Build things right away like a blog or an event calendar, you know one click, you know The person installs it they have it and it's done This piggybacked on the idea That was already happening in configuration management world the extension of this CI initiative from Drupal 8 and Alex pot created a proof of concept that harnessed YAML files To extend, you know what we already have in config To create a recipe So he gave a great presentation last year about The current state as it was we're not that far away from where that was And we'll get further into the details here. So there's a video up on YouTube that is Pretty great to watch goes into more technical detail than I can so the Problem maintaining distributions and install profiles is hard Sites can only start with it You can't ever uninstall it and The distribution maintainers need to maintain all the dependencies. So if that's core contrib, you know You need to continually maintain this it's probably why there's a lot of distribution maintainers that haven't Contributed to the recipes initiatives because they are busy maintaining their distributions You know so we come up with other features or other solutions like features And again, they're hard to share like distributions, you know, once they're installed on your site, you can alter them So it's hard to update them Because they're so complex it would be nearly impossible to get it into core And then you know like features and custom modules. They're hard to share You need update hooks to alter And it's hard to touch core and other people's contrib configuration so Alex created recipes. So recipe starts with the yaml file and First it goes through and installs any modules and themes that you need could be core could be contrived Then it creates or updates configuration Once a few other core initiatives happen, you'll be able to create content and then it applies other recipes So what recipes don't do is have their own code. So this is a strategic decision that you know recipes are going to have configuration and They can install modules that contain code, but they don't have any code themselves They can make dynamic changes to configuration or they don't make can dynamic configure. Sorry, they don't make dynamic changes to code related things only configuration And they provide their own upgrade path So like once you install the recipe it is your configuration So you can do with it what you want. So the question we often get is what if I need to do more Pre and post so like somewhere during the installation step, you know, what if I need to do here so you can install recipes that Can alter config if it's on the config world or you can install modules that can Do update hooks and things like that There's no update like some recipes, you know to keep it as simple as possible But as I mentioned earlier, this is in its infancy so everything is subject to change, you know There is code that you can go and install your own recipes and start playing around with it But you know, I'll mention later, you know, we are seeking co-maintainers co-leads people with vested interests in making distribution distributions better and Drupal for ambitious site builders better So if you have thoughts and time or money You can help out with this initiative All right, so let's get into what the recipe actually is Recipes in the folder just like a module or theme There is a recipe.yaml Which is next and then you can have a configuration folder and the recipe yaml structure Looks like this. This is a really simple example So you have the name of the recipe and the type The second recipes is for installing other recipes so the event manager recipe would also get installed We're going to install node in daytime range from core and then we are going to Alter config using the config actions API So this is the biggest part of the recipes initiative is that we have an API that can Change configuration in your site So in this instance The action is targeting the user role event manager Config and it's using the grant permissions action to give That role the edit and delete any event content So the convicts actions API this was added into The project already It just wanted to include a link to it so you can see the backstory if you so choose Config actions we have an open ticket that is to determine which core config entity methods should be Config actions there are a few There is a there are a couple issues. We'll talk about later on that are working to identify What other actions we need? By replicating the install profiles that are currently in Drupal core So what are Config actions or let's go. Where are they first? It's a namespace Drupal core config action plug-in config action And they're low those are located in cores library under core config action plug-in It is it will be once this is all merged in it will be in core Thank you for the clarification So Finding config actions I learned this last night from a wonderful gentleman on slack. He wrote a Little drush PHP script that searches For all the config actions and we'll go through them So the most common is the simple config update So you can basically pull say what config you want to alter So that's the node settings for the user settings the system theme and use the simple config update Action and then it's foobar so you can say what you want to alter and then what the result is so in this case we're allowing the Admin theme to be used We're changing the registration to admin only and we're using the Jin admin theme and the stark There are two that I haven't found a good use case for yet, and I don't think anybody else has so Ensure exist is used to conditionally create a config entity And then entity create is used to create a config entity and then Entity method there are two So set filter configs that would be for CK editor filters and then the grant permissions which I've seen used in a bunch of example recipes We have an issue for proposed config actions So there are couple umami has a case where they alter the views Config so basically we need to go in and figure out what would need to be done there And there's a couple other ideas that will possibly be needed there All right, so to recap recipes are applied to Drupal not installed They're easy to share. They don't lock sites in They're composable from other recipes and they leave no trace So let's see if I can share this Let me Accept privacy policy I can get over there All right, so Your friend in mine Kevin Quinlan who was mentioned in the keynote yesterday for being awesome at AI he was also awesome at taking all this recipe stuff and converting it into a nice workflow where you can basically get up and installed and up to date on recipes Right away. So he links to Alex's video In this case, he's using Drupal scaffolding to Install the recipe from composer so the first thing he does is creates a Repository a remote repository for his recipe Then he uses the composer installers extender To add a new installer type called Drupal recipe and then gives it a path where the recipe needs to live step 2 he adds the Repository to his composer.json and then there is a patch for Drupal core that allows Recipes to be applied So that is pulled directly from Git code.org So installs Drupal with a minimum profile Requires his recipe Which does a bunch of like Preset up things probably you know saves himself four to six hours of all the clicking that you do when you normally start a Drupal project and then he applies the recipe so there's a new script in that came along in Drupal that You can hit at Drupal core scripts Drupal That there's a recipe script now and then Where to put the recipes or where actually where to run the recipe from so that's where it was installed recipes contrived Drupal base and once that's Secure you can he logs into the site and you can actually see that the gen theme was enabled here pop back up and give a full fledged view of the config so he has a great read me really Looking at the recipe So if we looked at the simple example before this instance is Name Drupal base description The type is site and then he's going to install All these modules corn can trip Since he installed minimal he has kind of complete control over what he's installing Using the config section. He is importing and from the individual modules that he's installing He's going to put star for modules where he wants all the config And then individual redirect or individual configs for the ones he doesn't so in the redirect example He doesn't want all the views that comes with it. So he's just pulling in the three that he needs and then Down here in actions Based on the configs above He goes in and uses simple config update quite a bit to Turn on and off what he wants place blocks where he wants in which order So that's the admit admin theme So this is a great example of a nice little site starter. So Thank Kevin if you see him He also Made a recipe generator. So this is a drush command that will help you Start your recipe YAML file Using a nice interactive prompt on the command line All right, so now the good stuff why you're all here to learn about contributing to the initiative We're in Drupal Slack. So there is the distributions and recipes channel and I'll post a link to these slides in There so you all sign up and come back and check it out There's a bi-weekly meeting at 1600 UTC And there's a user issue on Drupal.org so Tim from the Drupal Association, you know It goes through and sets up new meetings and new meetings this year so people that attend and contribute get issue credit on Drupal.org which is a Task in itself. So thanks Tim if you're around Let's get into some important documentation so We have a strategic initiative page on Drupal.org this like other initiatives is meant to be an outline of The initiative so again, we define the problem who we building for approach kind of gives you the high-level overview We're breaking the tasks that need to be done Out into a few different tracks So, you know right now, you know, we all feel like this isn't a very Organized you know way to like get people immediately to come in and contribute So we're you know, we're actively working on it. That's what I'm gonna be working on in the next couple days But there are a few different things that are happening here So we're gonna have to make changes to Drupal.org great because there's no recipes So we're gonna need new projects new project type on Drupal.org Making changes to Drupal core Right now the code is in its own project like a lot of initiatives to be be able to more Innovate move faster, you know, we basically cloned Drupal core and working on it in a project like a module would be Until we get it to a point where we could create a patch or emerge request to get all that back into to Drupal core So there'll be more improvements on this page coming soon Go The patch that I mentioned earlier. There's a patch of that distribute. Yeah of that change Do There is a Drupal core idea Issue So I don't know if everybody knows but there is a project on Drupal.org called ideas That's where you know people think out of the box and what kind of changes we want to make to Drupal over the years So there's this issue that you know Goes back even more like before any code for this was you know made on how to Get this all in and there's a lot of issues tracked there that aren't necessarily in the code Because it affects more things than just code We have the project page So here's where everything is there's nice little just steps the link to the patch Linked to the documentation on how to get into everything here There are technical documentation inside the repository so when Alex made the initial commits for this You know he document documented everything out and read me files that went along with the project So this is you know the initial vision for everything a lot of links to Tickets that have already merged merged in so you can get the full story there And there's also a distribution and recipes tag on Drupal.org So, you know, I don't know if any of you went to Wim's configuration validation Talk, you know, there's a lot of Tertiary issues that are out there that could be related to Distributions like you know the validation doesn't need for it to exist for Recipes to work, but you know it would make it a lot better and safer All right, so I mentioned before we're looking for co-maintainers additional leads anybody that wants to contribute Cat or dog people alike Again in those docs, there's a road map Where we're trying to break out Individual steps that need to be done and Then What we see as our immediate goals, you know because Our friends in Europe Alex and in Berger and that oh aren't here today. I'm sorry. I'm probably ruining his name You know, there's some things that we can do, you know as you know Bob Snodgrass and I are kind of site builders in this Initiative here. We're trying to model cores Install profiles to see if we can with what's made recreate Standard minimal and umami as recipes So that will tell us if we're on the right track that we can You know install it from recipes or what config actions we need to Continue that process. So we have an issue for Standard that has a little bit of work done on it already. I made one an hour ago for umami probably need to make one for Oh, I made the issue Took me about two minutes really It was the minimal we need to have an issue for minimal too So yeah, again, I jumped the gun and talked about women's talk, but I'm putting a link in here So we can all watch it on YouTube when It comes out. All right, so anybody have any questions? All right. Thanks. Good night So at this point What's that? Thank you. So if two recipes are installed trying to change the same Configuration who wins it would be the latter one If there is something that happened to the config where the foo didn't exist for the bar to get updated Then it would fail. So I think that would need to be done in Read the question. Thank you. You're gonna say that a lot So is there a way to install recipes or functionality conditionally So we're using when we started modeling the standard profile You know initially we were like, oh, we're gonna have one recipe that install standard But what if I wanted to install the article content type but not tags So we're starting to go in a really composable method where there's a recipe that installs the tags And there's a recipe that installs the Article tag content type. So in theory, you should be able to compose your own recipe with the options that you want so there's a lot of There is a this sounds like features override from Drupal 7 and a lot of other modules in the config space This is a solution for Drupal core So I think it is in the family of config rewrite and in the config actions Drupal Contrib module and you know, there's a lot of things in this space I think this is trying to come up with a simple solution for Come up with the simplest solution possible for Drupal core. So this is once the recipe is It this this is the question that I get asked all the time is there a way to update recipes once they're installed No, so once a recipe is installed. It is yours and it is gone So you could Reinstall an update a recipe You could install, you know a custom module with your Distribution that did update hooks and things like that where you're still connected to the site that installed your recipe but The idea is that recipes are Gone in the night. Is there a composer jason and or how do we? Yeah, ensure that the dependencies are there there is the idea of composer jason in The works it hasn't been solidified yet. They're not sure if that's the right way to go yet Yes, all right. Are there any plans to have conditional questions during the recipe install process I Don't believe so is there an order of the way How is the order specified in the recipes? I believe it is Set in code. I don't believe there's a way to alter it. Are there Ways to track what recipes have been installed in your site At this time there is not in Drupal But if you follow Kevin's blog post you do have it in your composer dot jason, but there is there are issues discussing that You know, there are people that are talking about uninstalling ability Which if you uninstall then you need to be able to track what's installed, right? But again that adds another big layer of complexity. I would have in that Okay, so if we have Benji just come up and repeat the question So If you have Slight variations on a recipe, you know, how do you handle that? So in a scenario where I have a starter Where I can host on two major Hosting platforms that would love to sponsor this initiative I Would have Multiple recipes so I would have my base starter, but then I would have a host specific Recipe that would pull in the starter And I would even make it more composable to that because you know, you don't need an event calendar on every Website so even my starter might be like a base site structure starter and then you know, which content types I want or Blueprint schema Entities or you know that so on but yeah, I know there's host specific modules and configuration that every say Sure, so yes, there is oh it is one of the steps to install content Yes, so there are there's an effort in Drupal core that content entities are so if That can be figured out if we can install content using Configuration then you would be able to install those content entities using a recipe sounds like a fun task for tomorrow Is there a way to delete a field from a content type I Believe there is so you could use the config altar to alter the Form and the display it's a good question. I don't know if you can actually delete the field It's a good question. We'll have to look into that. Yeah, which at this time. I don't know if there's a config delete Action maybe somebody could make an issue about that I believe So so if a module installs an entity Okay, and then what's the next step? So if a module creates an entity and Another entity tries to create the same entity will this recipe solve it? I don't think so. I think the recipe install would fail also Yes, can recipes extend other recipes? Yes, is there an MVP? Goal to get Drupal recipes into core Have no idea how that works. Oh, I know what it means I have no idea what it takes to get something into core so Good question for tomorrow. Is the plan to replace installation profiles? I think at this point that would be a good lofty goal But at this point there's been no discussion of the actual implementation I think it would be easier to maintain more moving forward and really get into You know the ambitious site builder realm as if we you know got rid of install profiles altogether. You just had a Drupal install like you know a lot of people have talked about like light Drupal core There's probably other words for it But yeah, you just have your minimum minimal profile install and then you apply whatever recipes you need so inception was a really boring movie and How does recipes installing recipes and installing recipes work? So that's what we're trying to work through by replicating the install profiles What that looks like, you know how it looks like, you know like I really like the way Kevin's Looked where you know I can look at that yamal still it's it's large But it's still readable You can tell what it's doing and installing, you know, it's yamal. You could have comments in there too, you know talking through it I think because of you know Drupal core we need to be very specific about the micro recipes that we're gonna create and then putting them all together But yeah, only time will tell how Recipe-ception comes out so recipes do not Question is the recipe example that Kevin had Did not specify version of the module that it was installing. Yeah, just install a module So the versions would be specified by the composer file for the Site that he pulled it in if Composer.json is going to be in pulled into Recipes and this is a really good reason for it You know, you could specify the version that you're pulling in there But you know, this is almost like your core.extension yamal of this is what installed Module is being enabled basically Gordon recipe The question was there is because there's no trace and no lock file or versioning that's saved How do you move between versions? Move between servers environments So this is config So this is the same as you site building and then you know once you're ready to move between Environments or hosts you're exporting your own config and saving it So it's you know, replacing the manual steps. Thank you