 So, welcome everyone, let's get this in my pocket. Sorry, getting set up a little bit during the time. We're running late in this room, I guess. So, welcome, I'm Wes, I work at Netflix. But more importantly, I have the immense pleasure to work on a lot of open source JavaScript. All right, so that's probably what you're all here today to talk about, right? You don't really care about what I do at work. You wanna know about Express, right? Yeah? Some feedback here, there we go. Okay, much better, much, much better. Okay, so to get started, we're gonna talk about a few other projects. So, does anybody in the room use Fastify? Yeah? Yeah, yeah, a couple, not very many. Wow, okay, I thought more people would use Fastify. It's a great HTTP web framework. So, when I first got introduced to Fastify, I did what I often do, which, you know, call me crazy, but I cracked open the package JSON, I started pouring through its dependencies. You know, I'm a read the source code kind of person. So, I was in there and I noticed one that I recognized, the module proxy adder. Is anybody familiar with what that one does? No? No one? Man, I'm giving stompers. So, proxy adder is a module that will find the client IP address from the X forwarded four header, right? So, y'all work on the internet, you know, you cannot trust users on the internet. Everyone lies, right? So, headers come from a user, can't trust them. So, proxy adder goes through the process of safely parsing the X forwarded four header so that your application can get an IP address that it trusts, right? So, fast, sorry, I haven't talked much yet this morning. So, Fastify uses this module to get a trusted IP address. It parses the list, loops through them, finds the first untrusted IP address, which means if you've, water, that's the key. Okay, so if you've configured your servers correctly, which obviously you all have, because you're all stellar engineers, right? Then, you have put in all of your on network IP addresses. So, as the proxies, you know, as the request is proxied through your infrastructure, when it gets to your node server, it might have three or four different IP addresses in there. Oh, I'm skipping ahead. And, sorry, better get fast. And then it will give you in the application a trusted IP address. So, you might see where I'm going with this. Who are those modules maintained by? The Express team, right? So, this is one really great example of the way that the Express modules are used in the ecosystem, but there's a ton of other ones. Does anybody use React Router? Yes, a lot more. Okay, there we go. You're front-end people, aren't you? So, React Router uses path to regex under the hood for its route parsing. Path to regex. Anybody guess who maintains that? Express team, yes, of course. What about Webpack? Right, probably everybody if you're using React Router as well. Webpack, Dev Server, that's Express. Also though, as a, as you can see, Webpack has quite the dependency tree. So, in there you will find Express and everything that is directly required as a dependency or transit dependency of Express. But you also find that serve index, compression and range parser are in there independently, right? So, the reach of these modules that make up the, that are under the umbrella of Express, they go into all of these little areas that it takes to run an HTTP server. So, view. Anybody use view? Yeah, view, okay, do you use it with Nuxt? Nuxt, same kind of thing. Their server uses compression, e-tag, fresh, on-header, serve-static. All Express modules. It also uses connect, which you could say is an Express module, right? It's like the precursor. So, and lastly, anybody fan of Zeit products? They make a lot of great stuff, yeah? Okay, they have a bunch of open source modules, one of which is serve, right? As you can guess, uses some Express modules. So, it uses compression, serve handler, content disposition, mime types, and range parser, right? So, I've listed off a ton of things, and I've said over and over who maintains it, the Express team. But, who is that? You might think me. You'd only be partially right, this person. You all know who Doug Wilson is? No, yeah, some people? He's not a bird. You will see, he is some other inanimate objects, we'll see in a second. So, Doug, back in 2013, was participating in the project. You all probably are like, oh yeah, TJ, right? What about TJ? Well, TJ famously left the node ecosystem around then, and a bunch of other people stepped in to help foster the project. Very quickly, it became clear that Doug was both the most prolific and the only one who was going to stick around effectively. A lot of other people sort of moved on to other things, kind of like TJ did. So, slowly, Doug became the most prolific maintainer in open source, would be my guess. One of the most. This is a few years of his GitHub graph. I went through and you might see a couple of gray spots there, I think this is like 2014 to 2019. 14, 15, 16, 17, 18, 19, right? Very, very prolific. So, this is mostly express, and if you look at this, you're probably thinking, how could he possibly do this? He has a full-time job, right? I said the same thing in 2013. Well, I guess maybe it was 2014. And I was looking at the project and I'm going, wow, all these maintainers are sort of moving on to other things. Doug is very committed, but also he's gonna burn out, right? Like that's, this is a lot of work, right? Well, he did. Okay, I'll get to that a little bit more in a second. So, let's talk about myself and when I got into the project. So, around this time, it was 2014. I was a user, hopefully like all of you are. I didn't ask who uses Express. I'm just assuming that y'all do. And I was looking at the project just lightly following the GitHub, you know? Just, I wasn't super involved, but my company was, our entire app stack was built on top of Express, right? We had 100 microservices, all of them express. And so I said, I think this is an important project for me to follow and to understand, you know, what's going on. So, then, Netflix, always. I actually added this slide only because I was getting really annoyed with this thing repeating over and over as I was working on my slides and I'm like, I gotta have something in the middle there to break it up. Oh, I'm skipping ahead. Okay, so, where's my potato? There's my potato. So, I'm getting into the project and for a few days, the primary maintainer of Express was a potato. He changed his profile picture, he changed his name and if you can't guess, potatoes don't type very well, right? So, also, no commits, no work being done, right? It happened. The thing I was worried about happened, right? Was the primary maintainer, was like, I can't deal with some of this stuff, right? It's a lot of work. So, that was when I decided that I was going to jump in on the project. So, I opened up my, oh, I think I got a missing slide here. Well, I opened up my first issue and it was talking about the router being published as a separate module and it turned out that that aligned really well with what the team was thinking about for this. So, within like two months, the first commit was made on the PillarJS router module, which will be the, is and will be the router for Express V5. This was in 2014. So, it's been hanging there for quite a while. I did that. I started working on triaging a few issues. Then, and this is where I get to this, I made my first real code contribution. So, this was a silly little thing. As you can see here, it's a single index file, license readme, nothing else, right? This is a polyfill, because at the time I was running the Express router in the browser in IE8, okay? So, we needed a polyfill for this. I did it. Today, this gets about 17.2 million downloads a week. Stupid little line of code, right? Tiny contribution, outsized impact on the community. You don't even need this anymore. It still ships with it, like I said, $17 million. You shouldn't use this anymore. There's, you know, we've moved past this, we have object.set prototype of, right? But back then, we didn't, right? So, we needed something. That was my first code contribution. And I show that because the impact is huge. So, this is a little graph just comparing, and this is downloads per day. The project and all of the other people in the ecosystem, right? This is a outsized impact for the code that we support, right? As an Express team. So, when I was doing this, I work at Netflix now, so it's a little bit different. But back then, the code that I wrote could reach like a couple thousand people, right? Like the work I was doing, it was a startup. We had, you know, a small user base. When I realized the impact that I could have on people via the Express project and the code that we were shipping with that project, it really blew my mind. It made me like, oh, I like open my eyes to what open source impact really looks like, right? And this is today, I think the downloads were probably lower back then, because JavaScript is growing and that means Express is growing. But still, it felt like really powerful, right? Like I have these tools, and I made these, this module was like a couple lines, right? Took me less than an hour to write and was reaching, now my code is now running on millions and millions of people's projects. So, as I went from there, sort of typical stories, you slowly get more and more involved in the project, and I today, I'm the second most prolific contributor way behind Doug, right? But if you look at it, it quite quickly drops off, so you'll see Linus and Blaker are both TC members as well. There's a couple people who just, these contributions is code and comments and other sort of GitHub activity. So this story is to share a little bit about my history and why I'm here today. So, in 2018, after all of that, I wrote this blog post and I said Express is great, right? But not much has changed in the past few years. So in 2018, I made the argument that this was a good thing, right? And I still believe that it is because the power of Express and the ecosystem is that it is stable and you know you can build on top of it and run a service for the next, we're talking Express 4 landing in like 2013 and it's still the primary major version, right? You can run a service on top of Express without a lot of churn, it will be stable. That said, today, if we go back, ooh, not to the potato, I will never close that gap between 76 and 173. And if we go back a little bit more, you'll notice 2019, little slower, right? So, I was looking at it going, what can I do to push this project forward? I had all these open PRs, I had a lot invested in being a maintainer of Express, but I was looking at some of the movement on the project and I was like, this is a little slower than I would like and I will not become a potato, I don't have time for that, right? Like, I've got a job too, Doug is amazing, right? But I have a daughter, that is more important to me than Express, so I'm looking at this going, how can I help solve this problem? And I learned a lot about, so I'm a recent father and through having a daughter, I really saw this parallel with raising a child and having an open source project, right? So, it's a little silly, at first you're like, oh, it's so cute, I have this little baby, I get to take care of. And then you realize like, really it's a person, right? Open source is just a bunch of people, right? The code, sure, but what matters is the community and the people behind it, right? So, people are squishy, we have all these sort of weird things, we're trying to solve some hard problems in our software, right? But really, I wanna challenge everybody to think about the hardest problem in all of this is a squishy humans, right? Our little babies and the people who they will become, right? That is really the hard problem. So, the project, I really want to focus and this is where we're going, finally, it's how many minutes in? Halfway through the talk, and I finally get to the title slide. So, looking to the future of Express, the next decade, what I want it to be about is community building, right? I want to have open governance models, I want to have a nice onboarding experience for new contributors, I don't want that drop off from 176 to 76 to 22 and that person is just a drive-by on a PR, right? I wanna see project growth, I wanna see a community that we can rebuild, right? That existed back in 2012 and 2013 when Node was exciting and new, right? But now we have apps to maintain, we have people who depend on our code to run their products, right? So, to do that, I want to spend the next, at least year, really focusing on you all, right? Like, you're all here, I hope you didn't come here thinking I was gonna talk too much about the technical and the actual code in Express. So, sorry if I'm disappointing you in that, but I think that we all focus so much on that, that we can very easily lose sight of the impact of our work and the ways that getting involved really matters. I was laughing at, I'm not a huge fan of the one plus one equals three from the keynote before, but I think the sentiment is really what I want to spend the rest of the time talking about, right? Is how we as a community and as a team who use and love some of these JavaScript projects can come together and exponentially impact the community. So, and the project. So, there will be some code involved in that, right? It's not just a bunch of comments in GitHub. So, we have this, if you can see here, 2014 was when the Express 5 PR was opened, right? So, we have a lot of code that needs to be committed and push to the project. What we've done as the technical committee is we've decided that Express 5 needs to be cut. We need to push that release, right? So, a lot of the things on this original list are probably not gonna make it into the Express 5 release. So, here's where the technical parts do come in. We will be shipping promise catch support, which I think is probably the single biggest thing that people care about, I hope, in this room. HTTP 2 was on this list and it is being dropped. HTTP 3 is so close in concept that I think we didn't want to commit to the next couple of years of Express 5 maintenance with HTTP 2 being sort of an in-between state and HTTP 3, but the plan is once we get five out, we will get six staged and ready to go within a year. That's my commitment. Try to hold me to it. And then from there on, the breaking changes will have happened and we will have the path forward for all of you to contribute to the project and have it really move fast and for you to feel the impact of your work. So, to do that, let's now talk about some of the community things that we're gonna be doing. So, we've been working a lot with the package maintenance working group, which is a node core working group and we've been talking about how we can build programs that help these projects like Express, but not limited to, support the work. So, one of the first things that we have done is we have created a status board, so you can go here now. So, I should skip ahead one and talk about why this is important. So, the Express project is broken up into three main GitHub organizations. So, I mentioned all of those dependencies that these big projects have. Obviously, most of those weren't Express, like they're not NPM installing Express in those, right? So, most of those modules live in either JS HTTP or Pillar JS. So, I'll talk about the three sort of in top-down order. So, the main one you're all probably familiar with, Express.js, right? That's where Express lives. So, the modules that are housed under the Express.js GitHub org are the top-level things, the middlewares, the things that are really the Express layer. Below that is Pillar JS. So, Pillar JS, I think the tagline on the organizations like BYOF or something, bring your own framework. The idea is that that is the underpinnings that you would need to write an Express of your own, right? So, COA, are you all familiar with COA? Yeah, okay. So, when that split was being made, COA did build directly on top of a bunch of, this little video is a little bit slower than I was talking. So, we're not to the Pillar JS yet. But, so COA built on top of that, right? So, the idea is this is where things like path to regex live, right? Which is the React router dependency that I talked about. This is where, I'd like it to speed up so we can get the visuals. The joys of having video timings in your talk. That's probably not a good idea. Well, anyway. So, it's where the sort of underpinnings, the things that you need to construct the higher level abstractions that express, you use when you see Express. And then below that is JS HTTP. And so, this is where a lot of those things like compression, MIME types, range parser are. So, these are spec compliant technical implementations for the HTTP protocol layer, right? So, all that work is spread across all of these different organizations, all these different repos. How would you know where to start? The status board, okay? So, if you go here and go to the projects tab, you'll see all of the projects with their GitHub org and their name. It also shows a bunch of extra information about the health of the project, things open PRs, open issues. If you're interested in seeing what areas the Express project covers, this is your jumping off point, okay? So, you go there, look through the projects. And then, sort of my favorite feature of this, we are taking all of the tagged issues and we are showing some of the most important tags that we use across all three organizations. So, maybe, I don't wanna mess with this full screen stuff. So, we have top priorities. You'll see HTTP2 in there. You'll see TypeScript typing support. You'll see Express 5, obviously, right? I think there's a bunch others that need to go in that list. I think we want more community feedback on where Express 5 and 6, what features y'all really care about and those would be the things we'll tag as top priority. Those ones might be a little bit difficult if you're not super familiar with the project, right? So, we also have Help Wanted, Good First Issue and Discussion Tags. So, those are a lot better places for you to go if you're just trying to do what I did in 2014, which is, well, browse, I'm not sure if I can contribute here yet. I don't even know why I would. What are the modules that I might use in my day-to-day work that I should care about? How do I even discover those? So, if you go into the, there's also a section, see, I should have had this. That's the video problem. Anyway, you'll see it if we wait long enough on this video. So, that's a great place to get started, but then we were talking with the package maintenance working group who were like, well, okay, this helps, like this at least centralizes a lot of the information for people. But look at all those open issues. These top ones don't really show, but open PRs and open issues, there's hundreds and hundreds and hundreds, right? And people are opening new ones all the time, and two, maintainers are not enough to really answer all of that, right? So, we were talking in the package maintenance working group about what we could do to help with that. So, this is the second program that we're working on. Duresh, my partner in crime here, front row, has been working on this with us, thank you very much. So, this is a triage role, which we're starting to roll out across all three organizations. So, this is sort of your on-ramp to the project, right? We have, this is an example of requesting access. So, we have a process now for joining. If you are interested in this, the impact that I was talking about earlier, but you really just don't have, maybe the time to fully commit yet, you just wanna, you know, be around, but you'd love to have that, like, express logo on your GitHub page, right? Is this what we all want, right? And some extra little green dots and stuff. But really, that's obviously the vanity stuff. I wanna talk about the impact that this role will have on the team. So, the reason why we think this is the, one of the best places to start is because this is what Doug and I spend, like, most of our time on, is answering people's questions, right? And when we do that, we're not pushing code. We're not pushing new releases, right? We're doing the squishy work, right? Which is amazing work and invaluable to the project. But it means that the technical committee members sometimes aren't doing as much coding as we would like to push the future set forward. So this is really the way that you can enable the rest of the team and all the people to focus more on that pushing code. So to follow up here after the talk, Dresch and I will be running a little hands-on workshop, which we will be signing people up for this. So if you wanna come, it will be behind the Microsoft booth in the sponsors area. We're gonna, like, I'm gonna be, like, merging PRs and, like, adding you to organizations, like, on the spot. So come and join us for that. That'll be really exciting. You know, hopefully we can get at least a couple of active triageurs. If you all came and signed up, it would just change the trajectory of the entire community of the project. So I might not be able to merge all your poor requests, like, over there, but I promise we will get to them. Also, just to mention here, and we'll get links to all of this, REF PR 4055, there's some, we added some guidelines and some instructions on how to get started. So we'll go over those a little bit in the, you know, over in the other area. So you're not, you won't be alone and it won't be just, like, dumping you in and saying good luck, like we did to Dresch originally. But, you know, we'll have this. And then the goal would be that we can take some of this that we've worked on in Express and up-level it to the package maintenance working group and provide some structure for other projects in the ecosystem that might benefit from our experience running such a large ecosystem of modules. And the time where I sell out just a little bit. So Express is not funded. Doug and I volunteer our times. I don't want to make money off Express. I have a wonderful job at Netflix, but I want money for the project so we can do awesome things. Redesign the logo, right? Can't, like, fastify has an awesome logo and then it's like, Express is like the old feeling, right? Stuff like that where we can't do it without some, some finance, you know, things like stickers. I'm gonna, I have a bunch of Netflix stickers. Where's the Express sticker? Oh, right? So, oh, well, that was not a good idea. Whatever I just touched. Well, good thing we were toward the end of the talk and the last slide was like, thank you. So, that being said, please, we would love to have you on the project. The next decade for Express is really about you all coming and joining the project, right? You can be users, you can be triagers, you can be technical committee members. It only takes a little bit of work, like four years, right? But you can get there. I have faith. We're working on all of the things to make it easy for you and to make the project great in 2020. So, thank you for your time. Come join me and Juresh right after behind the Microsoft booth.