Built-in `fetch`, top-level `await`, Web Streams API, native testing it’s all here. So let’s walk through what’s new, why it matters, and how to get the most out of it.
- Built-in Fetch & UndiciBefore Node 24 fetching data meant installing something like `node-fetch` or `axios`. It worked, but it was yet another dependency to manage.
In Node 24, Now you get `fetch()` right out of the box:
No extra installs. Faster performance. Fewer headaches. - Top-Level AwaitTop-level `await` wasn’t supported, so you had to wrap everything inside an async function just to use it:
Now just write your code. No workarounds needed:
- Web Streams API Handling streams used to mean juggling `fs.createReadStream`, `pipe`, and maybe some transformation libraries. It worked, but it wasn’t exactly ergonomic.Now? You can use browser-style Web Streams in Node. Here’s a practical example that reads a big file, uppercases the contents, and writes it back out:

- Built-in Test RunnerBefore Node 24 testing meant setting up something like Jest, Mocha, or Chai. That’s fine, but sometimes it felt like overkill just to write a simple test. Now Node.js 24 ships with a built-in test runner that just works:
No setup, no configs, just native testing. - Permission Model (Experimental) This is a big deal for security: you can now restrict what your Node.js script can access at runtime like the file system, environment variables, or even network requests.
Sounds amazing, right? But here’s the catch:It doesn’t work on the standard Node.js binary install (like the one you download from nodejs.org).To use it, you’ll need to either:1. Use WSL (Windows Subsystem for Linux),2. Run it in Docker, or3. Build Node.js from source with permissions enabled.
Comparison Table
Here's how Node.js 24+ stacks up against earlier versions:
| HTTP requests | node-fetch, axios | Native fetch (Undici) |
| Async in root scope | IIFE workaround | Top-level await |
| File/data streaming | fs streams, stream/transform | Top-level await |
| Unit testing | Jest, Mocha, Chai | Top-level await |
| Runtime permissions | Not available | --experimental-permission flag |
Final Thoughts
Node.js 24 is a breath of fresh air. It cuts down on boilerplate, removes common friction points, and gets us closer to writing full-stack JavaScript the way it was meant to be clean, fast, and standards-aligned.
If you haven’t tried it yet, set it up and explore. You’ll likely uninstall a few libraries by the end of the day.
The future of Node is here. And it’s native.