 Hello, everyone. My name is James Daverac. I'm a staff solutions engineer at Jetstack, and I'm here to talk to you about Rust. So I'm going to talk about the language a little bit. I'm going to talk about how the Kubernetes API works on kind of a slightly more fundamental level. And I'm going to talk about how we can make the two integrate together and what that might mean for you and your projects going forward. So first of all, Rust is a programming language. It's been around for about 10, 15 years or so now. I could list a bunch of facts about it, but the more interesting thing about it, or the basic things you need to know, is much more about the community and much more about the other factors. So I have found, when I've interacted with Rust, a very welcoming community, which is someone who's worked in the cloud-native community, something I really appreciate when working with people on languages, on projects. It's got a really thought-out and well and mature ecosystem. And honestly, some of the most helpful, I don't know if I've ever seen out of a compiler, which is really saying something. I had the good fortune to attend a Rust conference in London earlier this year where I got my fantastic Ferris plushie. What really struck me about this conference was how eager everyone was to talk about the things they learned and the things they knew and bring their knowledge forward to other people. And I think that really reminded me of Kubernetes and the cloud-native ecosystem. So I think we have a lot that we can do with each other. So back on the topic, how does anything talk to Kubernetes to begin with? Well, YAML fans cover your eyes. It is, in fact, actually JSON under the hood. If you run QCTL in verbose mode, it will tell you the HTVS endpoint it's going to hit. And if you run it in really verbose mode, it will tell you the JSON output it got back to do this. So all you really need in the language to talk to Kubernetes is sockets. And you can try this yourself. So I'm using a kind cluster here as an example. So I'm using certificate-based authentication. But if you just pull your certificates out of your cube config and just fire them into a curl invocation, you will get some JSON back. And you can use Kubernetes perfectly well this way if you really wanted to. And, you know, Rust has very good libraries for HTTP requests and TLS and JSON handling. But we can do a bit better than that. So in Rust, a dependency is called a crate. And there is a cube crate which is designed to handle interactions with the Kubernetes API. In their own words from the documentation, they're built in the style of client go and control runtime and cube builder from the Go ecosystem. I should stress I'm not a developer of a cube crate. I'm just a great admirer of their work. So I'm going to show you some code. I do not have time to explain how Rust works in its syntax. So I'm just going to walk you through the important bit. You'll have to trust me. So what we're going to do in this code snippet is we are going to list some pods from the Kubernetes API in the default namespace. So first of all, we're going to create a client configuration. We're going to ask it to try to default. This will go and look for a cube config on disk and the various other default ways of accessing Kubernetes. We're going to do this async using async await in Rust because it does file IO. And then that question mark at the end is error handling. Don't worry about it. It's error handling. Once we've gotten our config, we're going to create an API for pods. So this is typed in a pod. That's what those angle brackets are, Go developers. We are going to tell it to look in the default namespace and we're going to pass in the client configuration that we created in the last line. Once we've created this, we're just going to do a simple list operation. A normal cube CTL get kind of thing actually does a list on the hood. We're going to default listening parameters and again, we're going to do the async and the error handling. Once we've got that list, we're going to get it into an iterator. We're going to iterate over all the pods we get back. And we're going to grab the metadata, not name. So we're going to get the name of a pod. In Kubernetes, all objects names are optional. So we're going to tell it what to do if there is no name, which is we're just going to set it to the empty string. And then we're going to collect it up and dump this out into standard out. And if you run this, it will just give you the list of the main pod. I only had one pod in my default namespace called Debian. It's a pretty simple example. So the cube create itself can do a lot more than that. It has full support for all the verbs you'd expect. It's got CRD support. It does a whole bunch of stuff. Check out the documentation. So what does this mean for the ecosystem? Well, when you're working with a new project and you're starting from scratch, language choice is one of the most impactful early decisions that you can make. And Rust will not be appropriate for every project. I'm not trying to suggest it will be. But if you are thinking of looking at Rust for your project for whatever reason, don't be afraid of using it to keep it at ease. Thank you.