 In 2019, Node.js turned 10 years old, and every year the Node.js community has gained momentum and 2020 shows no signs of slowing down. There are lots of interesting features coming to the next major release of Node.js. In this video, I want to share some of the more significant updates you can expect. As of version 13.2, Node.js supports the latest ECMAScript or ES module format. This means you can finally use the import and export syntax you may already be familiar with when writing client-side JavaScript for the browser. However, you still need to do a little work to let Node.js know that you are using ES modules. One way to do this is to update your package.json file or add a package.json file to your source folder and specify the module type. Now, in the message module, I can export objects and functions and use the export keyword. And in the index file, I can use the import keyword to import the message module. You may have noticed I've specified the .js extension. With common.js, it's not necessary to specify the file extension. Unfortunately, ES modules require the file extension when using the import keyword. It's also important to note you cannot import a folder name and expect Node.js to look for an index.js file. Imagine you have a utils folder and you want to import an index file in there. You do have to specify index.js as the module to import. Now, if I run this example using Node.js 13.3, you'll see there's a warning. In some future version, there will be no warning message. The other way to let Node.js know that you are using ES modules is to change the file extension from JS to MJS. Again, you have to specify the .MJS extension when importing other modules. There's also a .CJS extension to specify a common JS module. Personally, I find the .MJS and CJS extensions a little gross, but I'm glad to see that there are ways of specifying ES modules using the module type in the package.json file. Along with ES module support comes the ability to import web assemblies. A web assembly module is a portable compiled binary format that can be parsed faster than JavaScript and executed at native speeds. Web assembly modules can be created using languages such as C++, Go, C-sharp, Java, Python, Elixir or Rust. My hope is in the future we'll be able to write efficient native code in the language of our choice, compile it to WebAssembly, and be able to consume that directly in Node.js. To give you an idea of what this looks like, imagine you have an ADD module implemented as a WebAssembly module. The syntax for using this WebAssembly module might look like the following. Looks a lot like using a regular Node.js module. As of this recording, WebAssembly module support is still in the experimental stage. To enable the feature, you need to pass command line flag when executing a Node.js application. Diagnostic reports are human readable JSON formatted summaries of process information including call stacks, operating system information, loaded modules and other useful data designed to assist in supporting applications. These reports can be triggered on unhandled exceptions, fatal errors, a process signal, or using the new process report API. As of this recording, diagnostic reports are also in the experimental stage. To enable this feature, you must pass a command line flag. Node.js can be configured to save diagnostic reports to a specified folder and file name. In the generated diagnostic report, you're going to find things like the command line parameters that were used to call Node, the version of Node, the platform, the components that were loaded, the version of Node that's being executed, information about the CPU, the operating system, the JavaScript stack, the native stack, resource usage, libUV, all the environmental variables that were present during runtime, and a lot more information that can help you diagnose issues. As of version 13, Node.js comes compiled with the full ICU library. ICU is a mature and popular globalization library. Among many features, ICU includes support for formatting numbers, dates, times and currencies, performing time calculations, string comparisons, and converting text between Unicode and other character sets. In this example, I'm using the internationalization library to format dates and currencies into various local formats. When I run this example, you'll see the dates and currencies printed to the console with localized formats, labels, and symbols. Here are some other things to be looking for in 2020 for Node.js. Quick protocol support. This is a modern network transport for connected applications with increased performance and reliability. Better Python 3 build support. In 2020, it should be possible to build Node.js and native modules using Python 3. Updates to the V8 JavaScript engine. As of this recording, V8 7.8 and 7.9 increase performance and web assembly support. Stable worker threads. Worker threads in Node.js enable parallel CPU intensive JavaScript operations. Well, I hope you found this useful and interesting. I'm going to leave you some additional links in the description below. Please like and subscribe and leave me a comment. I'd love to hear your feedback. Until next time, get out there and be awesome.