Node.js and the Web Platform

Following Node.js Interactive 2017, I came away with a strong conviction that one of the most important things the Node.js Platform can do is to continue to align itself with the Web Platform. In my Node.js Interactive 2017 Take-Aways, I outline 3 major facts about Node.js in 2017:

  • Node.js is a driving force in the JavaScript Platform.
  • Node.js extends the reach of the Web Platform.
  • Node.js is the leading application language in the Cloud Platform.

Feedback from the Web Platform

Over the past month, I have had the opportunity to share my thoughts and reach out to leaders across the Web Platform for feedback and I have been met with resounding enthusiasm. That is enthusiasm anchored in a desire to collaborate with Node.js representatives to achieve better alignment. Now, Node.js has to begin to actively engage.

I learned from Jordan Harband, who represents Airbnb on TC39, the JavaScript language technical steering committee, that when ES Modules were being designed assumptions were made on behalf of Node.js. While that’s heartening to hear that Node.js is considered a first-class citizen in an environment that has historically served the needs of the browser ecosystem, the responsibility for improving representation is squarely on us.

Individuals like Jordan, together with Bradley Farias of GoDaddy, are working hard to ensure that we keep things well aligned. For Node.js, this has to be done with our own commitment to backwards compatibility in our platform. The Node.js package registry, npm, is the largest in the world and the stability of our end user ecosystem is paramount.

This platform development process is lengthy and requires extensive context to be able to protect compatibility. In order for Node.js to ensure a consistent developer experience, we need to align with language implementors, browser vendors and framework authors to provide end users clear indications of the path forward.

Key Areas of Collaboration

I have identified 3 key areas that we can focus on to ensure effective alignment of Node.js and the Web Platform.

  1. ES Modules
  2. Async/Await
  3. WHATWG Streams

ES Modules

The state of ES Modules is the most active and well cared for thanks to the tireless efforts of Bradley Farias and the support he’s getting at GoDaddy. We seem to be revisiting folks concerns around .mjs frequently, which is unfortunate.

At this point, we need the Node.js Technical Steering Committee (TSC) to come to consensus on the official path forward for Node.js. If you have any open questions about why we got here, I highly recommend watching Bradley Farias’s Node.js Interactive 2016 talk: The Path to ES Modules.


Much like ES Modules, Async/Await is a new JavaScript language functionality which may represent an inflection point in how we write JavaScript. @Mikeal shared in his recent post, Modern Modules, that he believes we will need to rebuild most of the software infrastructure in the Node.js Ecosystem.

While that may come to pass, we need to move forward while respecting and protecting the existing infrastructure. I’ve had some early, encouraging conversations with Babel contributors at the recent Chrome Dev Summit to see how we can provide a path for frameworks with large ecosystems to embrace new syntax while continuing to support the needs of framework users.

WHATWG Streams

I am particularly excited about working on WHATWG Streams because the problem surface area is much smaller, especially on the browser side of the ecosystem. It is also a new standards body for us in the Node.js Ecosystem. If we are going to maintain broad compatibility of the Web Platform, we are going to have to come to the table at every one of these standards bodies.

Node.js embraced streams as a core primitive for data transfer. We prioritize low-level performance in Node.js. Matteo Collina, of nearForm, who is one of the lead maintainers of Streams in Node.js, thinks we will need a lower-level abstraction to be able to maintain our performance profile. Matteo, James M Snell and Jeremiah Senkpiel have begun working on new low level streams abstraction.

If we can align Node.js’s low-level abstraction to the high-level WHATWG Streams spec, everybody wins. Node.js will continue to need to collaborate with the high-level abstraction as it evolves and we should look for opportunities in the platform to see where it could integrate as well.

Talking to Jake Archibald about Streams led to some useful context about the spec building process. He shared these resources which are useful in the spec building process:

  1. WHATWG Infra — The Infra Standard aims to define the fundamental concepts upon which standards are built.
  2. Web IDL — An IDL variant used to describe interfaces that are intended to be implemented in web browsers.
  3. Bikeshed — A pre-processor for spec documents.

Call to Standards Action

While there is broad consensus around the need for Node.js to participate in the standards process, there are a couple blockers. The first is one I encountered several times meeting with collaborators at Node.js Interactive: permission to engage. Will the standards bodies care? Yes! They all care. Standards exist because of a critical mass of people care. Node.js is a technology superpower. We matter to JavaScript. We matter to the Web Platform. We matter to the broader technology ecosystem.

The second blocker I see right now is people.

We need more individuals who are passionate about areas where standards work is taking place. We need individuals to share context of around existing standards. Standards work takes fortitude and patience. Standards work takes time. Most of the folks I know who do standards work are employed by companies interested in those standards.

If you’re all of these needs line up, let’s talk! If you’re passionate about standards, but don’t have time and permission, I’d love to help out. We can explore how to pitch standards work to business stakeholders or we can explore where to look for a more supportive employer. Node.js needs you.

Go Deeper into Node.js and the Web Platform

I recorded an episode of NodeUp with Rich Trott of the Node.js Technical Steering Committee, where we discussed this at length. I invite you to join us for a very interesting conversation.

NodeUp 122: State of Node chat.


I’ve have a monthly mailing list which I publish at the beginning of every month. You should join dshaw — A List.