Category

Node.js

Node.js 17 is here!

By Blog, Node.js

This blog was written by Bethany Griggs, with additional contributions from the Node.js Technical Steering Committee and project collaborators.

We’re excited to announce that Node.js 17 was released today!

Node.js 17 replaces Node.js 16 as our ‘current’ release line, with Node.js 16 being promoted to long-term support (LTS) next week. You can expect new releases of Node.js 17 approximately every two weeks, keeping you up to date with the latest features and changes. As an odd-numbered release line, Node.js 17 will not be promoted to LTS. You can read more about our release policy at https://github.com/nodejs/release.

To download Node.js v17.0.0, visit: https://nodejs.org/en/download/current/. Similarly, you can find the release post at https://nodejs.org/en/blog/release/v17.0.0, which contains the list of commits included in this release.

Some of the new changes and features delivered in Node.js 17 include:

  • Additional promisified APIs
  • Stack traces with Node.js version
  • OpenSSL 3.0 support
  • V8 JavaScript Engine is updated to 9.5

Following our Release Policy, new features that are contributed to the runtime are shipped approximately every two weeks in our ‘current’ release line. This means that the majority of new commits that are included in the initial major release (v17.0.0) are those that involve breaking changes. We care about minimizing the number and disruption of these breaking changes for the stability of the platform and to make version migrations easier for our users.

Additional Promisified APIs

A continuing strategic initiative within the Node.js project is to provide promise-based Node.js core APIs. In recent years, we have added the Timers Promises API and Streams Promises API (both available since Node.js 15).

In Node.js 17, we introduce promise-based APIs for the Readline module. The readline module provides an interface for reading data from a Readable stream (such as process.stdin) one line at a time.

The following simple example illustrates the basic use of the readline module:

import * as readline from 'node:readline/promises';

import { stdin as input, stdout as output } from 'process';

const rl = readline.createInterface({ input, output });

const answer = await rl.question('What do you think of Node.js? ');

console.log(`Thank you for your valuable feedback: ${answer}`);

rl.close();

You can read more about the Readline module in the API documentation.

OpenSSL 3.0

Node.js now includes the recently released OpenSSL 3.0, specifically quictls/openssl, upgraded from OpenSSL 1.1.1. OpenSSL 1.1.1 will reach the end of support on 2023-09-11 (from OpenSSL Release Strategy), which is before our proposed End-of-Life date for Node.js 18 (LTS). For this reason, we have decided to include OpenSSL 3.0 in Node.js 17 to provide time for user testing and feedback before the next LTS release.

Among the new features in OpenSSL 3.0 is the introduction of Providers, of which one is a FIPS provider which can be enabled in Node.js. For details about how to build Node.js with FIPS support please see BUILDING.md.

While OpenSSL 3.0 APIs should be mostly compatible with those provided by OpenSSL 1.1.1, we do anticipate some ecosystem impact due to tightened restrictions on the allowed algorithms and key sizes. 

If you hit an ERR_OSSL_EVP_UNSUPPORTED error in your application with Node.js 17, it’s likely that your application or a module you’re using is attempting to use an algorithm or key size which is no longer allowed by default with OpenSSL 3.0. A new command-line option, --openssl-legacy-provider, has been added to revert to the legacy provider as a temporary workaround for these tightened restrictions.

Example usage:

$ ./node --openssl-legacy-provider  -p 'crypto.createHash("md4")'

Hash {
  _options: undefined,
  [Symbol(kHandle)]: Hash {},
  [Symbol(kState)]: { [Symbol(kFinalized)]: false }
}

For more details on the OpenSSL 3.0 release please see the OpenSSL 3.0 release post.

Stack traces with Node.js version

Stack traces are an essential part of diagnosing application errors, helping to provide visibility into what has gone wrong. In Node.js 17, the Node.js version will be included at the end of the stack trace when there is a fatal exception that causes the process to exit.

It’s useful to provide this by default as often when diagnosing reported errors one of the first questions asked will be “What Node.js version are you using?”

Node.js 17 also comes with a command-line option, --no-extra-info-on-fatal-exception, to omit this extra information.

V8 9.5

In Node.js 17.0.0, the V8 JavaScript engine has been updated to V8 9.5. (V8 9.4 is the latest available in Node.js 16).

Along with performance tweaks and improvements, this update comes with additional supported types for Intl.DisplayNames API and Extended timeZoneName options in the Intl.DateTimeFormat API.

You can read more details in the V8 9.5 release post – https://v8.dev/blog/v8-release-95.

Node.js 16 promoted to long-term support

Next week, Node.js 16 will be promoted to long-term support. This is a significant milestone, as many users, particularly those operating production deployments, will opt to only use the long-term supported versions of Node.js. This means for the first time some features will be available in a long-term supported release line.

Node.js 16 and later include Corepack, a script that acts as a bridge between Node.js projects and the package managers they are intended to be used with during development. In practical terms, Corepack will let you use Yarn and pnpm without having to install them. Read more about Corepack in the documentation

In Node.js 16, the V8 JavaScript Engine is V8 9.4. It’s through the V8 JavaScript Engine upgrades that Node.js gains the new JavaScript language features. In Node.js 16, we have gained the following language features:

  • Array.prototype.at (from V8 9.2)
  • ECMAScript RegExp Match Indices (from V8 9.0)
  • Errors with cause (from V8 9.3)
  • Object.hasOwn (from V8 9.3)

Other features new to LTS in Node.js 16 include npm 8 and the Experimental Web Streams API.

Node.js 16 is also the first LTS release where we ship prebuilt binaries for Apple Silicon. We provide separate tarballs for the Intel (darwin-x64) and ARM (darwin-arm64) architectures, with the macOS installer (.pkg) shipped as a fat (multi-architecture) binary.

Other project news

The project is also continuing its Next 10 effort. The goal of this effort is to reflect on what led to success in the first 10 years of Node.js and set the direction for success in the next 10. Initial efforts were focused on defining and documenting the project’s technical values and priorities.

Our next steps on this effort are to host deep-dive sessions on specific topics, with improving documentation and growing our contributions being two of the first topics we plan to discuss.

We welcome you to join our meetings, which can be found on the Node.js Calendar.

Call to Action!

Try out the new Node.js 17 release! We’re always happy to hear your feedback. Testing your applications and modules with Node.js 17 helps to ensure the future compatibility of your project with the latest Node.js changes and features.

Now is also a good time to start planning to upgrade to Node.js 16, which is due to be promoted to long-term support next week. Node.js 16 will continue to be supported until April 30th, 2024.

Also of note is that Node.js 12 will go End of Life in April 2021, so we advise you to start planning to upgrade if you are still using Node.js 12.

For the timeline of Node.js releases, check out the Node.js Release Schedule.

Thank you!We’d like to thank all of the Node.js collaborators and contributors, as this release is a sum of all their efforts.

Specifically, thank you to the Node.js Release Working Group for maintaining and producing Node.js releases and the Node.js Build Working Group for keeping the project infrastructure running.

Retiring the Node.js Community Committee

By Blog, Node.js

This blog was originally authored by Tierney Cyren and posted on the nodejs.org blog on October 7, 2021.

tl;dr: we’re going to be retiring the Node.js Community Committee, moving our existing Initiatives to exist under the Node.js Technical Steering Committee (TSC).

From the Community Committee’s side, we’ve seen a convergence of our initiatives’ goals with the goals of the work that is generally under the TSC. Further, we’ve seen a decline in the number of people who can consistently dedicate the necessary amount of time/energy. As such, separation between the TSC and Community Committee has become more of a barrier to accomplishing our collective goals rather than the helpful and necessary construct it once was.

The Past

I want to start with a bit of history as a form of preservation of the context I’ve collected as the Community Committee’s chair for the majority of its existence.

On January 11th, 2017, Tracy Hinds made the first commit to the nodejs/community-committee repository. This commit was the result of in-person discussion with a number of key Node.js community members at the 2016 North America Collaborator Summit in Austin, Texas, though there’d been a rising discourse to push for something like it for some time in various forums including the (now-archived) Inclusivity WG.

The stated goal of the Community Committee has been to be a top-level commitment of and investment in the Node.js project to support community efforts.

At the time, this was particularly important. Node.js as a project was still figuring out its identity as a project independent from a Corporation while existing in a neutral Foundation. The Node.js community was foundational not only in the project’s success – be it in the v0.x era in the early 2010s, during the io.js fork, or post-reunification – and those starting the Committee wanted to be sure that we were effectively representing and enabling that from the project directly.

The Present

Since the creation of the Node.js Community Committee, members have largely spent project and committee time on outward-facing efforts with the goal of continuing to enable and grow the Node.js community. There’ve been multiple facets to this approach, some of which have been relatively successful and others that have been entirely unsuccessful.

The broad trend that I’ve personally witnessed is that the Community Committee’s interest and activity have slowed dramatically since its inception. My perception is that this is due to a couple of different factors:

  • Sponsorship and Investment:
    • A majority of work in Node.js is done by people who can dedicate non-trivial amounts of their paid time to progress the project, sponsored by their employer. Initially, there was already a small number of people who were able to focus their employer-sponsored time on “community” work – work that doesn’t ship features they need – in Node.js, and that number has only gone down over time.
      • do not think that this will be a universal experience in open source. Several other massive-scale projects are relatively successful in approaching this. They also have fundamentally different models and investment than Node.js does, which is likely a contributing factor to their sustainability. The Electron Outreach WG and the Kubernetes Contributor Experience SIG are both good examples of “success” here, in my opinion.
    • In general, JavaScript occupies a relatively unique space. It is ubiquitous, yet very few companies are willing to substantially invest time, energy, and resources into it despite their reliance on it. Lack of investment into community sustainability is one facet of this.
  • Necessity:
    • The Node.js Community Committee was created at a time in which the Node.js project was larger, with louder voices sharing relatively differing opinions on how we should approach the future. The reality is that we’re smaller now than we were then, and there’s generally less conflict around how we should approach community, safety, and governance. As such, the necessity for a distinct “community” focus is not only less but – in my opinion – actively detrimental to progress. It splits the project’s collaborators into different, disconnected groups rather than unifying the project towards the same goal.
    • The Node.js Community Committee was also created at a time when Node.js was relatively alone. Under the Node.js Foundation, we had to do a lot of community organization within the project directly. Under the OpenJS Foundation, we have shifted several initiatives that the Community Committee was charged with under the Node.js foundation up to the OpenJS Foundation Cross-project Council. As such, certain tasks that we initially envisioned being core to the Community Committee are now living in a different home.

The Future

I don’t believe that retiring the Node.js Community Committee means we’ll see a lack of investment in the community from the Node.js project.

Rather, I think it’s an enabling function for Node.js to continue to sustainably invest in the community. This means fewer barriers, more connectedness, and allowing for resilience in the ebb and flow of those who can invest to do so.

I look forward to what we’ll collectively work on next.

A Big, Heartfelt Thanks

Over the years, we’ve seen dozens of people contribute to the Node.js Community Committee and its initiatives, and I’d like to be explicit:

Y’all have been lovely over the past five years. You all care deeply about the Node.js ecosystem, community, and people. It’s been truly a privilege to have the opportunity to work on something like this with each and every one of you.

As we retire the CommComm, I hope that you see this as yet another evolution of the Node.js project’s commitment to the community… just as the CommComm itself was.

OpenJS Foundation Opens New Node.js Certification and Training Scholarship

By Announcement, Blog, Certification, Node.js

Today, the OpenJS Foundation is launching a new scholarship fund to increase access to the OpenJS and Linux Foundation Training (LiFT) Node.js training and certification and help expand diversity in technology. 

The scholarships are being sponsored by the OpenJS Foundation Cross Project Council Community Fund, who will award 20 LiFT Scholarships for Node.js training and certification for deserving individuals who would otherwise be unable to afford it. The OpenJS Foundation is committed to bringing more talent into the open source JavaScript community, which involves reaching people who have traditionally been underrepresented in open source.  

The application is open now through October 15, 2021. Interested applicants are encouraged to complete the application.

Qualifications for applying

The OpenJS Foundation Cross Project Council (CPC), the technical governing body for OpenJS, is offering scholarships to provide opportunities for Node.js skills development to deserving individuals who would otherwise be unable to afford training courses or certification exams.

Global applicants’ must demonstrate a passion for Node.js technologies, have intermediate Node.js skills, and a proven interest in becoming an open source professional. 

What’s covered?

The OpenJS CPC Scholarships will cover the expenses for one Node.js eLearning class and one Node.js certification exam offered by the OpenJS and The Linux Foundation at no cost. 

Node.js Certified Developer Spotlight: Juan Picado

By Blog, Certification, Node.js, Project Update

We recently interviewed Juan Picado, a Senior Front-End Engineer at Adevinta about his experience taking the OpenJS Foundation Node.js Application Developer certification (JSNAD). 

Here’s what we learned.

OpenJS: Why get certified through OpenJS?

Juan Picado: The OpenJS foundation is a reference that protects, provides, and facilitates a platform to the JavaScript community, supporting open source projects, and is a well-known organization. Hand to hand with the Linux Foundation is the best support for a Node.js Certification that gives high credibility and confidence.

OpenJS: How was the test-taking experience? Compared to vendor-specific certifications, how is a vendor-neutral test different?

JP: I like the approach that the test was not based on multiple-choice questions rather on real-life problems. This provides an extra boost of confidence even if you have already years coding JavaScript and Node.js. The vendor-neutral focus is more on the language and fundamentals and that is essential knowledge worth having as a baseline because it does not expire. JavaScript and Node.js always evolve.

OpenJS: How has the certification helped, added value for you?

JP: I always felt insecure in a few areas of Node.js. Streams and Process always were scary to me and those are part of the core of this certification. Even having years of experience, I have acquired valuable insights and a new vision on how to make things right. For me, it has been really valuable and has helped me dive more into the specifics of Node.js.  A certification always has professional benefits.  

OpenJS: What are your career goals and how do you think certification can help in reaching them?

JP: Definitely, it is one important step on my career roadmap.  I’m a believer that the fundamentals matter and this certification helps you to achieve that with Node.js and JavaScript.

OpenJS: Anything else to add?

JP: It is worth mentioning that the e-learning platform in combination with the one-year period gives you enough time to prepare yourself. That is really valuable.

Through August 24, Linux Foundation certification exams – including Node.js certifications – come with a FREE training course to help you both learn new skills and prepare for your exam. Learn more about this great offer at https://bit.ly/2WQxlo9

Node.js Update: Renaming N-API to Node-API

By Blog, Node.js

This post was contributed by the Node-API team and was initially published on the Node.js Medium Blog. Node.js is a hosted project of the OpenJS Foundation.

The reason for this blog post is to explain what motivated us to rename N-API to Node-API. The issue that is tracking the transition was: https://github.com/nodejs/abi-stable-node/issues/420

Background
You may have noticed N-API changed to Node-API in the documentation within the Node.js project. N-API has always stood for Node-API but was often pronounced NAPI. A concern was raised, that when pronounced that way, it could be mistaken for a derogatory term. We therefore made it our goal to clarify that N-API is Node-API whenever possible without introducing breaking changes.

What’s changing (only in more recent versions):

  • References: Documentation, blog posts, and similar will now refer to “Node-API”.
  • Folders: Internally referenced folders (eg. test folders) have been renamed from n-api to node-api.
  • Badges hosted on Node repositories: Existing badges’ image contents have been updated to “Node-API” without changing their URLs.
  • New symbols: Additions to Node-API and related projects will now have a different prefix, eg. node_api_get_module_file_name.
  • Types, macros, and defines: Externally-facing API names, such as features guards, will now start with NODE_API_ instead of NAPI_
  • New node arguments: Node-API configuration via node command line arguments, eg.- -force-node-api-uncaught-exceptions-policy, will refer to the new name.

What’s not changing:

  • Old symbols: Existing symbols (eg. napi_create_reference) will remain the same. This ensures ABI stability, such that a previously compiled add-on will continue to load in newer Node versions.
  • Types, macros and defines: Names like napi_status, NAPI_MODULE, the Napi namespace (in node-addon-api) will remain the same. This ensures existing code can be recompiled with no changes.

We believe that we’ve made this change in a way that addresses the issue while limiting the impact to users of Node-API and hope this post helps you understand the approach and what to look out for. As always if you have any questions/concerns please open an issue in https://github.com/nodejs/abi-stable-node or https://github.com/nodejs/node-addon-api.

Node.js Mentorship New Mentee Opening

By Blog, Node.js, Uncategorized

This post was written by the Node.js Mentorship Initiative and was first published on Node.js Medium Account.

The Node.js Mentorship Initiative is excited to announce a new opening. We are looking to add a new mentee to our initiative. We, therefore, invite developers who are passionate about the Node.js ecosystem and are willing to learn and contribute towards its growth and development to apply to this opportunity.

The Mentorship initiative prides itself in identifying specific needs of Working Groups and Initiatives within Node.js and posts applications for available opportunities.

Over the past year, we have helped the Examples Initiative and the N-API working group to recruit new mentees, which is in line with our objective of helping to bring more and more contributors into the Node.js ecosystem, and eventually the broader OpenJS ecosystem.

We’re looking for someone with a decent knowledge of GitHub, good technical and communication skills, as the responsibilities of a mentee will include routine repo maintenance, communication with other initiatives to gather feedback, and the design of technical challenges to be completed by applicants.

This is a great opportunity to make a meaningful impact on Node.js while learning from industry leaders and world-class software engineers. Please apply here by May 13th, 2021. We look forward to receiving your application.

Project News: Node.js v 16 Available

By Announcement, Blog, Node.js, Project Update

The Node.js Project, a hosted project of the OpenJS Foundation, has announced the release of Node.js v 16. Highlights include the update of the V8 JavaScript engine to 9.0, prebuilt Apple Silicon binaries, and additional stable APIs.

You can download the latest release from https://nodejs.org/en/download/current/, or use Node Version Manager on UNIX to install with nvm install 16. The Node.js blog post containing the changelog is available at https://nodejs.org/en/blog/release/v16.0.0.

Initially, Node.js v 16 will replace Node.js 15 as our ‘Current’ release line. As per the release schedule, Node.js 16 will be the ‘Current’ release for the next 6 months and then promoted to Long-term Support (LTS) in October 2021. Once promoted to long-term support the release will be designated the codename ‘Gallium’.

As a reminder — Node.js 12 will remain in long-term support until April 2022, and Node.js 14 will remain in long-term support until April 2023. Node.js 10 will go End-of-Life at the end of this month (April 2021). More details on our release plan/schedule can be found in the Node.js Release Working Group repository.

A new major release is a sum of the efforts of all of the project contributors and Node.js collaborators! Congrats to all who made it possible!

Read the full blog with all the details on the Node.js blog.

Node.js Certifications and Training Sale

By Announcement, Blog, Node.js

Node.js Certifications and Training Sale + New Preview of Testing Environment

Training and certifications are some of the most valuable investments we can make in ourselves, to both sharpen our skills, but also to show prospective employers, and the world, that you have what it takes as a developer. Now is a great time to invest in yourself, or in your engineering team. Starting March 29 through April 9, the OpenJS Foundation, in partnership with the Linux Foundation, will be discounting all Node.js Certification and Training. 

Node.js logo

Limited offer: check out the new preview testing environment
Today, in partnership with the LF,  we are rolling out a free Node.js Environment Preview beta exam, which focuses on our Node.js certifications, the OpenJS Node.js Application Developer (JSNAD) and OpenJS Node.js Services Developer (JSNSD). 

One of the most frequent requests we receive is to preview what the certification exam experience is like before actually sitting for an exam. Whether you get tripped up from text anxiety or low bandwidth, running through this Node.js Environment Preview will make you more familiar with the look and feel of the certification exam experience. This way you will know what to expect so you can focus on your Node.js knowledge.

This Node.js Environment Preview beta is available for a limited time — we have 4,000 free coupons to give away. Try it out and see how you performed on this self-graded environment preview. And don’t pass up this big sale.

Full sale details

Discounts include 

What’s included with certifications?

  • 12 month exam eligibility    
  • Free exam retake
  • Digital badge and PDF certificate upon passing

What’s included in online trainings?

  • Hands-on labs & assignments
  • Video content
  • 12 months of access to online courses
  • Discussion forums
  • Digital badge and PDF certificate upon completion

Node.js Certifications

Certifications are excellent ways to validate your own development skills to yourself, employers, and the world. 

The OpenJS Node.js Application Developer certification is ideal for the Node.js developer with at least two years of experience working with Node.js. For more information and how to enroll: https://training.linuxfoundation.org/certification/jsnad/

The OpenJS Node.js Services Developer certification is for the Node.js developer with at least two years of experience creating RESTful servers and services with Node.js. For more information and how to enroll: https://training.linuxfoundation.org/certification/jsnsd/

Node.js Trainings

Feel confident in taking your exams with the Node.js Training courses. These courses help prepare developers for the Node.js certification exams. 

This course provides core skills for effectively harnessing a broad range of Node.js capabilities at depth, equipping you with rigorous skills and knowledge to build any kind of Node.js application or library. While by design the training content covers everything but HTTP and web frameworks, the crucial fundamentals presented prepares the student to work with web applications along with all types of Node.js applications.

This course provides a deep dive into Node core HTTP clients and servers, web servers, RESTful services and web security essentials. With a major focus on Node.js services and security, this content is an essential counterpart to the Node.js Application Development (LFW211) course, and will prepare you for the OpenJS Node.js Services Developer (JSNSD) exam.

If this sounds like something you’d like to know more about, check out more information at this link

Project Update: Next 10 years of Node.js

By Announcement, Blog, Node.js

Understanding the needs of the Node.js constituencies

This post originally appeared on the Node.js Medium blog.

node.js logo

TLDR; We need your help to make sure the Next 10 years of Node.js are as successful as the first. We are launching a survey, you can take it here to help us do that. To get a bit more context on why this survey is important, read on….

Node.js had a very successful first 10 years of Node.js and the project is working to make the next 10 years even better. As part of that we’ve kicked off the Next-10 effort to document what we think is important for that to happen. You can follow the ongoing work of that team in this repo: https://github.com/nodejs/next-10.

Without a handy crystal ball, it turns out that it’s a lot harder than just diving in and discussing our favorite technologies to see what the keys to success are going to be. Are things like WebAssembly, Typescript, etc. important to the people who use Node.js? I guess we need to better understand/document who uses Node.js first…..

So far the team has spent most of its time laying the foundation on which we hope to base discussions around specific technologies.

We started by documenting our understanding of the project’s technical values as these will help us balance different aspects when necessary: https://github.com/nodejs/node/blob/master/doc/guides/technical-values.md. It’s not as simple as X overrides Y but instead highlight what key values need to be factored into decisions. For example, there was consensus that good developer experience has been a key part of the success of Node.js and that it’s important for future success that we maintain that.

Next the team documented the Node.js “Constituencies”. The people/groups who have a stake in the Node.js ecosystem. We captured these in CONSTITUENCIES.md are include:

  • Direct end users
  • Application operators
  • Application Developers
  • Back-end server authors
  • Library/package authors
  • Node.js core maintainers
  • Organizations with investments in Node.js

We also documented what we thought was important to those “constituencies” in CONSTITUENCY-NEEDS.md.

We think we’ve got a good start, but at this point it only reflects the understanding of the small number of Next-10 team members contributing. At this point, we need your help to make sure we’ve got it right and/or update until we do. You can do that by:

Thanks for reading and we hope to get your feedback through the survey or see you get involved in the ongoing work of the Next-10 team. Thanks in advance for your help.

Free Introduction to Node.js Online Training Now Available

By Blog, Certification and Training, Node.js, Training

This post also appeared on the Linux Foundation Training blog.

Node.js is the extremely popular open source JavaScript runtime, used by some of the biggest names in technology, including Bloomberg, LinkedIn, Netflix, NASA, and more. Node.js is prized for its speed, lightweight footprint, and ability to easily scale, making it a top choice for microservices architectures. With no sign of Node.js use and uptake slowing, there is a continual need for more individuals with knowledge and skills in using this technology.

For those wanting to start learning Node.js, the path has not always been clear. While there are many free resources and forums available to help, they require individual planning, research and organization which can make it difficult for some to learn these skills. That’s why The Linux Foundation and OpenJS Foundation have released a new, free, online training course, Introduction to Node.js. This course is designed for frontend or backend developers who would like to become more familiar with the fundamentals of Node.js and its most common use cases. Topics covered include how to rapidly build command line tools, mock RESTful JSON APIs and prototype real-time services. You will also discover and use various ecosystem and Node core libraries, and come away understanding common use cases for Node.js.

By immersing yourself in a full-stack development experience, this course helps bring context to Node.js as it relates to the web platform, while providing a pragmatic foundation in building various types of real-world Node.js applications. At the same time, the general principles and key understandings introduced by this course can prepare you for further study towards the OpenJS Node.js Application Developer (JSNAD) and OpenJS Node.js Services Developer (JSNSD) certifications.

Introduction to Node.js was developed by David Mark Clements, Principal Architect, technical author, public speaker and OSS creator specializing in Node.js and browser JavaScript. David has been writing JavaScript since 1996 and has been working with, speaking and writing about Node.js since Node 0.4 (2011), including authoring the first three editions of “Node Cookbook”. He is the author of various open source projects including Pino, the fastest Node.js JSON logger available and 0x, a powerful profiling tool for Node.js. David also is the technical lead and primary author of the JSNAD and JSNSD certification exams, as well as the Node.js Application Development (LFW211) and Node.js Services Development (LFW212) courses. 
Enrollment is now open for Introduction to Node.js. Auditing the course through edX is free for seven weeks, or you can opt for a paid verified certificate of completion, which provides ongoing access.