 Hi. My name is Sarah Kristoff. I'm the Porter Project Lead Maintainer, and I'm here to talk to you about what Porter does and what a bundle is. Thanks for your patience. So Porter takes the last 10 years of decisions that your company has made around DevOps tooling, scripts, and frameworks, and it bundles that into an OCI artifact. The reason we do this is you've probably onboarded onto a new team. You wanted to get the app running locally, and you had to brew install a bunch of stuff, go find that specific version of Terraform, and go find those special Ansible scripts while also juggling a bunch of read needs that all different types of developers made. So what a bundle is is a cloud-native application bundle. It takes all of those decisions, allows you to specify those versions and things it should do, and it rolls it up into that single secure version-controlled and signed artifact. Right now, the CNAB specification doesn't have to use Docker, but it does, and it can be extended. And also, I think it's really cool, but I know I'm kind of biased. So you're asking yourself, how do bundles get built? Valid. First, you're going to start with Porter Create. This is really similar to how Helm works, where it builds out that scaffolding on your machine. So Porter is going to give you that default Porter.yaml. On top of that, it will give you a template, a Docker file, and a bunch of other craft. This is just to get the ball rolling for you. So that Porter.yaml is a YAML file. I come from HashiCorp, so I know the drama around YAML, but this has been, in our experience, the best way to get people to onboard easily. So to you, a user, this is a bundle. This Porter.yaml allows you to specify different mixins, which are extensions of Porter that let you say, hey, I want Terraform to apply these things, or I want to Terraform plan or upgrade. I'm really on a Terraform kick, but there's other ones, too. You can use Docker or some Azure stuff, if that's also what you're into. It allows you to specify these different actions, install, upgrade, and uninstall, or installs, or actions you have to specify, but you can create your own custom actions, like plan, rollback, or whatever else you need. So after you build your Porter.yaml, and we have an awesome quick start that someone I might know made that could walk you through making a Porter.yaml, you're going to run a Porter build. And this is where the real fun happens. So Porter.yaml will then create this, like, CNAP directory. You're not supposed to mess with it. This is all just for Porter. And so Porter will take that and create all of the scaffolding for that bundle to get built. Now, you're going to see this another Porter.yaml. You created one, and now Porter has created one, too. And internally, we call that an internal manifest. And the reason we do that is because to you, it's going to look like we're just recreating that same Porter.yaml. But if you're passing build options, if you're passing different, like, images, Porter will then resolve these images for you. And so I have an example here where on the, you're right, yeah, on your right, I didn't pass in the digest itself. I just said, hey, I want this example image from this repository at this tag. Porter went, it went into the container registry, it went and pulled that digest just so we had that hard coded. We're not going to do anything silly at publish or runtime. We know exactly what we're running. You're also going to see this fun bundle.json. And this is technically the bundle schema itself. It takes all of that Porter.yaml. It takes a lot of other things under the hood, but we're not going to get into it. And it resolves it into this JSON file that you're not supposed to touch. But if you're going to be touching the Porter code base, you should know about it. And lastly, you're going to see this Docker file. Now, when I showed the scaffolding before, you would have saw the template.docker file that we gave you. So this is for you. You can say, hey, I want these images. I want to go, W, get these tools, whatever you need. Porter then takes that and we create that Docker file. I released a blog earlier and it was in the original days of Porter, people would complain that Docker files were way too complicated, messy and hard to maintain. Porter does a really great job of letting you specify exactly what your Docker file should look like and the different actions it can take and making that Docker file for you. So that Docker file builds what is called the heading left, but it's called the invocation image. And so that invocation image takes everything in the Porter.yaml, that template.docker file, your build options, all of this different stuff and it builds that into that Docker file itself. And that invocation image then gets pushed into Porter publish. And so this is kind of the last little bit where we either go from that file, from that Porter.yaml or from archived, which is for air gap. So you have a Porter.yaml, you've built it. Now you have a Docker file and now you have an image. Now what you can do is push that up into any OCI registry you want or for archived what we will do is say, hey, give me that tar GZ. We will start a local container registry. We will then go into there, remap all of the names to something over the network to something local and handle that air gapped messy bits for you. So right now it's not super magic. Just OCI annotations. Super fun. We're just kind of doing something a little bit different. Again, though the CNAM specification is not just for Docker. We're hoping to use this for things like VMs, micro VMs and wasm. Right now we also have a demo where we spin up Fermion Cloud and use containers, which is kind of interesting to deploy wasm apps into Fermion Cloud. So you can bring your app images. We'll build the invocation image. We didn't cover bundle descriptor, but we will soon at the ContribFest on Thursday and that creates a cloud native application bundle. I really appreciate your time today. Please check out Porter.sh. We are a CNCF incubating project. Sandbox, the other one. Yeah, new contributors are welcome and thank you so much.