 Okay, so I guess it's nine o'clock. So we might as well get started Just want to say before we do get started that we will have time about Two-thirds of the way through through questions. So as we're talking, you know, think about what you'd like to ask and we'll pass Around the mic and you know do our best to answer And so now the point I'll ask Matteo to everybody to sort of introduce themselves Hi, I'm Matteo Collina Yeah, I'm technical director at near-firm and I'm a member of the streams working group and most involved in streams HTTP HTTP to all things streaming really so Hi, I'm Anna. I also work at near-firm on Node.js Kind of been all over the place and currently working on quick and HTTP 3 support in Node.js together with James Snell Who I guess isn't in the room, but yeah Hi, I'm Anatoly. I work at Postmates as a staff software engineer On Node, I primarily contribute to timers and HTTP2 as well as some Kind of more obscure internal stuff I'm Gabriel. I work at Intel and I've been working mostly on an API and the C++ wrappers for an API and the native add-ons in general making them work with workers that kind of thing And I'm Michael Dawson IBM's community lead for Node.js and I work with a number of the teams and projects sort of strategic initiatives across the project including things like NAPI and others as well So let's start out Matteo, you know given what's gone on in the last few years. You think Node is still relevant? Absolutely Michael. It's not JS. I was hoping that was the answer so hopefully I don't know maybe maybe not You know, Node is done. Okay. It's boiled. It's cooked. Whatever. No, no more Node I don't know why you're here really So Node is doing great. I think Node.js is entering it's It's It's a mature technology now to some extent and it's fully grown up as what I would say and it's It's basically like all like all great technologies is to some extent fading in a little bit in the background Where it's not making the headlines of big company use Node now or whatever. It's just it's just there and companies all over the world and developers all over the world are using it for building great things and I'm I'm not seeing growth like slowly slowing or anything, but At this point, it's it's a technology available for everybody like if you consider things like you probably all of most of you will use Visual Studio Code to develop in whatever language and this is built on electron and node and Or other folks might just use serverless and there's some nodding there as well so node is basically just a technology that is you know Available for developers to use and you know, everybody can there are others of course is not that there's a mantra of you know We should just be everything with no so it's it's just doing great. It's it's evolving and it's It's definitely a different phase though for One of the things I really noticed is that we've had I don't know the fifth or sixth version of this conference and You know as opposed to the first one where a lot of people are experimenting now Almost everybody I talked to was like, yeah, we're using node and we're using it in production in some way Yep Yeah, I think the other part that's interesting is there's a whole community of developers now who are using it on the front end and for react and all that whole ecosystem that doesn't even know that Everything they do is powered by node All of the build tools everything and it's just kind of in the background, right? And I think that's that kind of speaks to the maturity part Absolutely, I just wanted to to add one quick thing. It's there is one of the Greatest thing that I that I had that that happened to me this year was I went to design design system training So I was in the room full of designers most of the time just completely like completely out of my comfort zone so whatever and I I One of the things that happened was okay in order to do the one of the exercises of doing during this is this Day of training was well, you need to use this software and in order to do that you need to install node. Yes, and They were just like okay now We have all this room full of designers that have no JS installed in their app They don't even have know what this is, but they just use this tool to Use node to use some tool on top of it and for them is basically just a runtime just a dependency. So It has been a fantastic feeling really like it's you know, we have been we are helping other a lot of folks Innovating and creating new things that are disrupting other industries that are not even you know We're not even our start starting targets. You see Okay, so it sounds like you know, we've seen a lot of on the business side node maturing and it's always how do you think the code base is aging? I Think it depends right so it's it's interesting because there's a lot of a lot of parts And though that they're moving really fast and are really progressing at a good pace and And moving forward. I mean you look at stuff like workers. You look at stuff like modules and that stuff is really kind of The quote the code quality is really amazing But then you go back to some of the stuff that requires backwards compatibility if you think about streams and HCP There's you know, there's ecosystem modules like express out there that support all the way back to 0.10. I think maybe yeah yeah, so You have this tremendous range of versions they have to support And it creates a lot of difficulty in terms of maintaining You know, you fix a bug or you think you're making something more consistent and in the process You break everybody that you didn't know you were gonna break And we have tools that help us help us deal with that there is obviously canary in the goldmine and that helps us test things but It's it still makes it tricky and you have to have a lot of kind of Specialized knowledge to contribute to those modules and to keep them evolving which I think makes it really tricky So there are any things you think we should be doing differently in the project to help, you know help us manage the aging of the code base or I Don't know Mateo any thoughts We definitely need more we always need more people involved especially on those On those areas that are not most of the time are not, you know There is no sparkles like is in this is those in maintaining that that that that those that code like, you know, it's A friend of mine An old jazz collaborator Matthias Booth says, you know, every time we try to like Maintaining not streams is like playing guacamole every time you squash a bug the time more pops up and You know It's basically trying to you know, keep them all down at the same time and this is not But it's that's it really it's no it It's hard because of backward compatibility needs and we are slowly making things a little bit more coherent every one release of the time Trying to break as as little as possible in a tiny single step and hopefully providing incremental improvements so it's just it's a long process and We are trying to work with, you know Module authors and maintainers to you know, help them evolve their module and practically fix them because we can detect with canary We can detect that for example your broke express or some something like that So we can go ahead and says look we're going to break this so I'm sending you a poor request right now So it will pass so it will pass when not the new node node version is coming out So and we've done this several times already. So If you have a some popular my open source module that is not included in canary in the gold mile Please reach out if there is a model that we have broken for whatever reason that we are not It has not been patched when the new node release comes out, please contact us. I Think one other thing speaking to the what could we do better? I think this has worked for some modules and node is just kind of code documentation and Documenting edge cases and and why certain things are done the way they are I think in htp and streams that sometimes isn't quite Isn't quite the case So I think in general like if people are trying to contribute I mean if you're kind of browsing through that code and you kind of understand why something is the way it is Documenting that I think PR to just add comments It's gonna be helpful for future people who are trying to understand that same code, which is very confusing Yeah, it sounds like a great idea so Anna Mattel mentioned contributors and one thing we've noticed we've maybe seen a little bit of a slowdown in the growth of contributors Do you think that's an issue? No, no, it's not an issue. I like I think that really just reflects what Mattia said earlier to like I think your first question and that is that node just has become a lot more mature Like I like I know our contribution rate and the rate at which we add new collaborators I think it's like maybe I don't know 70 80 percent of what we was two years ago or so So it's slow down a bit, but that's really just a sign that yeah node is mature and maybe there's fewer low-hanging fruit You know hanging around And and that it takes because of that it takes more commitment to contribute To note on the regular basis Like and I totally said like some areas where we actually need folks the most require a lot of Time working your way into it like HTTP or screams or TLS or stuff like that, you know old code Say I yeah, I don't see it as an issue and I think we're still healthily growing like there's still I don't know like about a handful of people that you know are on the path to become collaborators I would say so It's not a slowdown. Yeah, I mean I when I look at and try and keep on top of the the github notifications It's really hard to believe that there's any sort of slowdown There's so much stuff going on and so much stuff coming in that I agree a hundred percent that it's really just you know we're reaching a certain point in our maturity and We need to continue to focus on making it as easy as possible for people to join But it is gonna get a little harder and just with so much going on it's not necessarily an issue Yep So Now that we've talked about about the node that sort of node core ecosystem. What do you Gabriel? What do you think? How is the the overall ecosystem do? so the the other day I think the Person from npm mentioned in their talk that there are what fifty eight billion downloads from npm a month or so Sorry, I thought it was fifty eight billion fifty eight billion. Yeah, we would be as in Bravo so So I Given that I suspect that the ecosystem isn't exactly stagnating and Given given that I work mostly with with native add-ons. I can tell you that on the native add-on front We're also making great progress to to make it more like the JavaScript add-ons. So in the last year, I think Know that on API alone, which is just a C++ inline wrapper library for for an API Went up to like 300,000 downloads a week So and that's not entirely reflective of all the native add-ons out there Because you know a lot of people they ship a pre-built binaries And so, you know that the developer downloads once and then the binaries get downloaded who knows how many times So we we have rough figures The the maintainer of of leveled down did a great job Compiling all the native add-ons recently and and breaking them down by which ones are moved to an API and which ones aren't it? And that's that's a great help for us and and in the new year when when when node 8 goes out goes out of maintenance We have a lot more sort of We have like fairly big modules like I think node sass is sort of poised to move to an API and they've just been waiting for node 8 to sort of drop off the map and So that's gonna add I suspect a few more downloads a week To to our tally And so so yeah an API adoption is going along well And I've actually heard from Mateo that in one case I forget which module you yeah leveled down They they actually had a performance boost by moving from from Nan to an API. So that's great to hear So I I have no worries. I suspect about Either the JavaScript ecosystem or the native one so Yeah, I know that You know because of all the value that that ecosystem is delivering there does seem to be you know some discussion But like how do we get funding? How do we get support? So I think we have a few things that like that we're working on through that pack package maintenance Effort in terms of like helping the ecosystem, but it still seems to be pretty healthy and you know growing and doing well um so Let's move on to you know new features because we're all interested in what's going on in node core So anatoly, what's your favorite new feature? Yes modules, I mean I come from front-end background and don't really do that anymore, but Yes modules have been around forever in tools like Babel and TypeScript And I think a lot of people are familiar with them in some way, but they're now I'm flagged in node They're a little different than you might have been used to from kind of the previous implementations So I think it'd be fun if people played around with them give their feedback I know the module steam is always looking for feedback Yeah, I think we really should have a big shout out to the teams who's worked on that because it's been a sort of a Really big area with lots of different ideas and sort of to bring that into something that we actually got in It's I think a pretty good pretty good accomplishment Whoo, yeah So I know what's your favorite? new feature I Mean I like I don't think it's actually new at this point anymore But I mean workers are still something that I'm excited about and proud of to be honest Like I put a lot of work into that Making that happen and I mean it's only been officially stable since like September or August. I think something Something like that. Yeah, and I mean like it has like there haven't been many changes up until that point So it's almost been stable like the factor for a year or so and people are starting to use it and People are actually starting to use what we intend to People to use it for like like we know when we started working workers We were kind of worried that people might use it like basically do the same as cluster like Put IO onto multiple threats and tried to do multi-threading like the classical way that you know, you did before note But I don't like people are actually using it for CPU intensive tests that have to be moved off the main thread, which is exactly what they are there for and There's npm libraries evolving around the feature and that's just really cool to see happening Yeah, that was definitely one of the ones I'm really excited about and just to see all the different ways people are gonna use it and I think hopefully it gives node some of some other use cases that people are gonna be able to use it for so really important Gabriel, how about you? What's your favorite? I will surprise you greatly. It's an API No, but so so I mean an API isn't a new feature, right? I mean, it's I think it's around been stable last year, right? This year though, we've added some stuff to it that that actually does a lot to to support the new workers because Something really strange has happened because of worker threads, right? So so native add-ons and API or otherwise before worker threads were basically singletons, right? The no process starts sooner or later the application loads some native add-ons and then the application runs quote-unquote forever and then the process quits right at at forever it quits, right? but the native add-ons they had absolutely no motivation to to to clean up, right? Because you know, the colonel is gonna clean up the process anyway. So why clean up, right? There's there's not that much reason I mean, you know if you if you if you have things like, you know Database handles going in and out in and out you might want to clean those up But but there's a lot of like static module data That's just not necessary to clean up because you know, it's like global static and call it a day, right? So all that changes with with with workers because now you essentially have node instances going On and off on and off on and off, you know running what is potentially an entire application with who knows how many native add-ons and Then the threat quits, but the process is still there. So there's nobody cleaning up that memory, right? The the colonel is still waiting for the process to quit and that doesn't quit, right? So so what what what became global singletons? Had to become essentially self-contained and properly life cycle managed objects and that's that's a huge shift, right? Because we're talking about like 30% of the of the of the ecosystem that has to now all of a sudden Whoa, no that this thing's on this thing's static data Now I all of a sudden got to move it because it has to be threat safe and and it has to be cleaned up And oh my references all my wrapped objects What happens if they don't get garbage collected before the environment quits, right? And and so so a lot of the features for an API 4 and 5 which we released since last year Are about that so we added Well, and I added environment cleanup hooks first to node and then we exposed them over an API Then then we added Something that's similar, but not exactly the same which is the which is the instance data Which makes it really easy for any native add-on to just say, you know during in it You know allocate the status ticket there and here's the thing with which to free it And then when the environment quits it calls the freeing thing So and and at any point in the add-on you can just say give me that data, right? So you don't need to like like with with hooks you need to sort of yes You have a pointer now no more static data Yeah, and you have a way to free it But you still have to sort of thread it through through all your async workers and threat safe functions and and all your Bindings and stuff like that with with instance data. You don't need to thread anything You can just get it very cheaply from from the environment And and it's going to be unique to your module right to your module instance in fact So if you have three instances of the module each one get a different one So so these are some of the features for an API and then I mentioned thread safe function in passing That's that's another one that that was that was really in demand because people had their own native libraries out there that were doing threading and so forth and They they tried to write bindings for Node.js to expose all of this to to people who write JavaScript and and the first well No, the second thing they encounter is You know, I can't call into the engine from another thread, right? And so so how do I make that easy, right? And so basically thread safe function sort of bundles a bunch of utilities threading utilities provided by LibUV together To give you the the abstraction of just making a function call into JavaScript as if it were on the same thread But now it's okay because it's thread safe, right? So you call into JavaScript and and you can even receive a response back But of course, it's all asynchronous because it has to be so so that's that's another very cool feature that that I found That people are using and filing lots of bugs about which is great Okay, so Mateo, what's your favorite? Well, you probably know already to some extent it's not news to stop something's still not new still But it's it's a sync iterators. I Did a big talk yesterday about that. So I don't know. Maybe you watch that if not this YouTube and I think it's it's so so many problems that That people are facing with using streams and Node.js for a lot of cases and you should probably know more about These new primitive that is available in the language consider that from January all Active LTS lines of Node.js will have a sync iterators So essentially we you can actually ship a sync iterators. You use a sync iterators and all supported lines So there's no real reason for not to use them everywhere to some extent. So it's pretty cool another thing that Another thing that it has been happening in the last in the last while is we are making some progress on The unhandled rejection problems, so I don't know how many of you are familiar with unhandled rejections hopefully it's Essentially that the core part of this it's Just to summarize because it's a very long topic very long discussion like we are I'm talking about a hundred plus comments on GitHub issues Every single time this thing has been open. So or you know Order of magnitude off. Yeah, it's like Thousand comments. Yeah, thousand comments like for every single get a bishops and the key part there is What happens when your promise rejects and there is nobody listening for it Nobody uptouching a catch-hander what should be the default behavior our note should behave and so on and so forth So we have added some flexing node to introduce a strict mode, which it actually make note crash Which I personally think it's the right thing to do and a lot of other people do but not everybody So, you know long long story short Says there is all of that has been making some progress I've recently landed a PR that I've been working for six months You know when you land a PR working for six months. You're actually quite happy and that Basically allow you to to capture the rejections that happen inside the metameters and you know Have them actually do the right thing for example destroy a stream Or close an HTTP request or so on and so forth. So It's a might be get a little bit safer to Not crash on You know on hundred rejections by default, but you should really so you should I just want to add in my two cents that Landing the full internationalization support by default was a good one one of my favorites where now people, you know Across the world and working on their own languages a bit more easily So at this point we want to open it up to questions from the floor It includes I see full icu so it includes the full icu data by default So if you use the icu apis before By default you would only get English and you would have to take extra steps to be able to get the data For those other languages Now it comes bundled in and all the data for all the languages are there. So if you're converting currencies or You know, it's not you know, you still got to internationalize your text But the support for the things that vary between languages is there by default for the different so there is So that there is There is no such thing as done in software Okay, like it's there's always bugs always new feature the javascript language itself. It's evolving It's evolving rapidly. So there's new feature being added new paradigms and so on and so forth. I think one of the key One of the key topics for the next few years would be to To some extent try to reconcile node.js with the largest front end and web community So there is a lot. There is some quirks in making code that can run on both node and the browser So that for me that is that is a challenge and there's a lot of focus will go And on top of that there is new things that are happening in the ecosystem. So for example, there is The quick quick and htp3 is going to happen and It's happening already all over the all over the industry. So the big vendors are all Implementing that so that is kind of that would be kind of the new thing and and so on Overall node.js is Doing well to some extent. So it's there's a ton of work. So if you want to get involved there are 900 open issues So and 300 open protocols. So, you know, it's uh, However, I think with the addition of of worker probably we have tackled most of the, you know, biggest Challenges of of of bigger requirements for node. There's also a lot of things that can be done. For example to improve the performance of On on serverless environments So reducing cold start and other things that needs to be done inside the internals, which might not be, you know Fancy like this is a lot of hard work to shelve off. I don't know 50 milliseconds or something that that is Cold start, but you know We have ship. We have done some of the work. I don't know Yeah, yeah, I just wanted to add like like so one thing that we always have to do is keep up with the language Like Matio said, it's not just that, you know, the language is evolving and we ship new v8 versions and we get new features But we also like we try to keep like integrating them with node.js Um, for example a single generator support and screens stuff like that that's going to keep happening um Like like if there are some open questions like for example, what exactly do we do with private properties when we're inspecting objects with console.log, right? These things get tricky And so yeah, there's always a lot of work to also quick. Um, I mean, that's a huge thing. It's a huge addition to the code base too Um, and it's cool to be working on that and it's cool to see that happen And these things are also going to keep happening in the future so Coming from the hardware side, uh, what what i'm seeing is that Uh, we have Nowadays like in in the whole industry. We have like a couple of very well established algorithms, right? Like we have image processing we have AI we have uh compression encryption hashing these kinds of things, um and uh The cpu is not always the only thing that they run on Increasingly there are all kinds of specialized hardware You know, there's basically chips out there that do one thing and one thing well, right? I mean gpu is generic in in the sense that it can do a few things not as many as a cpu But that's just an example right there. There are fpga's out there. There are specific, uh chips just for ai right and and um Especially for for these standard algorithms node has them all right like we have we have open ssl We have zlib, you know these things so you know Integrating integrating. I mean, why wouldn't you want like, you know compression? That's five times as fast as what what zlib can do right now in node j s, right? You know if there is hardware out there that can do it or or if there is a better implementation out there, right? So basically what i'm seeing is that there's this heterogeneous sort of computing environment slowly kind of Making its way through the different cloud service providers and so forth and The runtimes and and all the software that's running on them and node j s being a major one there Could benefit from this right but it takes a lot of integration work and and some of the some of the The ways in which these these uh capabilities can be accessed are fundamentally different from just You know you call the function and it it does its thing really well, you know So some some of the things are asynchronous by default So you no longer need to shove them off on a thread to to make them asynchronous But that's a completely different paradigm now and so so integration is is not always it's not always easy and And and you know figuring out do can I do this? Do I have the hardware for it in this process? You know if you wake up on the on the machine that has it versus a machine that doesn't you know is it architecture specific is it Platforms to say but what is it right and you got to do all this at runtime without making too many if statements Which increase your startup performance right or decrease your startup performance? So so I this is this is a little fuzzier than then then specific features that that need to land and so forth but I think it's uh, it's a trend and uh, and uh, I I'm personally Very interested in in in how this is gonna play out and and how how we're gonna You know always make the best of the hardware that that we run on You know and find the features that are available. It's I think about it It's like feature detection right that it's not just in the browser anymore and you're detecting You know not not browser features. You're actually detecting hardware features. So that's kind of a cool thing on the server side Okay, so we're we're at time But I might try and squeeze in just one more question since we only had one And so we won't feel bad if you have to sneak out for your next talk, but we'll take one more I think we had one here Hi guys, I'm jimmy michael talked yesterday about the new maintenance process that you're putting into place Where the community is putting into place. I'm curious. How does that change the tsc? I mean if I mean maybe with all those new chips This isn't true But if there's some kind of asymptotic drop-off after a while and things stabilize you have You know fewer feature requests more people saying help help. I thought I can't get up That prioritizes the maintenance process presumably and I'm just wondering I mean Will you always will there always be a tsc and will always be different than maintenance people? Or does it change over time or you know, how do you deal with that maturity in terms of this process? I'll start by answering that and that's the I think the maintenance process He's he's talking about is the work in the package maintenance group to try and Oh, yeah, that's right. I don't have the mic. Sorry the the maintenance process He's talking about is the work in the package maintenance group to try and figure out how we work with the the The overall community to make things better for maintainers I personally see that as there's some good synergy with no, but it's not it's Kind of still its own its own thing like so I don't think personally that's going to affect the tsc necessarily It's something that I think it's good to have the input and Sort of the attention of the tsc members to help make move it forward But I don't think there's going to be a direct impact in that front. I other people Yeah, the the tsc is fairly focused on The you know node and the features that are related to that. I mean Obviously we think the the the rest of the ecosystem and those pieces are important Um But I I don't think it needs to be a everything merges and is in one necessary one area It's we have strategic initiatives So it you know could fit into something like that where it's one of the areas We have a champion who pushes it forward But we have lots of those different things in this and as everybody on the panel mentioned there's lots going on and lots happening so You know, I think we'll always have those different things And and I think uh, so so, you know We we have We work very closely right with with with all the working groups that we have in our organization and I'm fairly certain that I don't think there is even one where we don't have at least one tsc member there. So So, you know Between us we we basically try to keep abreast of all the stuff that's going on right and and and it is It is of immediate impact to us, you know So like I personally even even if I don't participate in all the discussions and stuff I I read like most of the threads, right? So so it'll it'll set off alarm bells positive ones or negative ones if I see anything that that that That catches my eye, right? And I think that's true for all of us, right? So so, you know, you know These these working groups they're they're not working in a vacuum, right? So it is all as far as I can tell a fairly cohesive project and and it is in our best interest to to to keep the ecosystem and the core Aligned as much as possible Especially now that we are such a mature project and and and that there is like, you know real money Excuse me writing on us, right? So So, you know, we it's in our best interest to do this Okay, so thank you very much for coming. We're we're and being patient as we went over a few minutes and also for getting up So early and coming to the first talk Thank you very much