edit: There's also nub which is built on top of Node.js and removes some rough/legacy edges: https://github.com/nubjs/nub
- esbuild - this is normally for TS compilation, which Node can run natively now by stripping types: https://nodejs.org/docs/latest/api/typescript.html#type-stri...
- jest/vitest: Node has a test runner: https://nodejs.org/docs/latest/api/test.html
- dotenv: Node can read .env files: https://nodejs.org/docs/latest/api/cli.html#--env-filefile
Performance, maybe you're right - but if you're doing any IO, I doubt the runtime is really the bottleneck.
They do seem to have just merged in support for Web Workers though, which I've been following for a while: https://github.com/nodejs/node/issues/43583
So I don't think they're opposed to standardising, but it's trickier when you have some past cruft built up. Lets not forget that the fetch() standard was built for browsers, and is a bit of a stretch to make it work on servers at all. You have to diverge from the fetch spec to even make it make sense in a server environment (with things like Cookies handling off the top of my head).
Which leads to confusing things like the fact that there are two streams APIs in Node now:
Streams: https://nodejs.org/docs/latest/api/stream.html
Web Streams: https://nodejs.org/docs/latest/api/webstreams.html
And they have to support going back and forth between the two: https://nodejs.org/docs/latest/api/webstreams.html#nodejs-st...
It's exactly the same story for crypto as well. Node created it's own standard, Web standards emerged, Node has to support both:
https://nodejs.org/docs/latest/api/crypto.html
https://nodejs.org/docs/latest/api/webcrypto.html
Fwiw I think it's good they're not removing the legacy code, but they should probably do a big cleanup major release and lean into the modern standards and remove the old stuff. But there's obviously push back in doing so... and probably stuff you can do in the old modules that you can't do in the new and vice versa.
When we used to code by hand, Bun used to have an amazing list of articles on how to convert from almost any kind of streamable to almost any other type. I used it a lot, and that was when I started liking Bun so much.
You need a "separate" tool called npm to install packages. It's dead slow so they added corepack. Another extra tool. Then you use it to install yarn or pnpm. Another extra tool. It might still be slower than bun...
In the past you need to transpile typescript with other tools. It can only run js out of the box. The later fix was a wasm build, which means slower than it could be. Another 1/2 job.
Many more examples in many areas but anything Node tries to do itself feels 1/2 baked.
Bun and Deno are faster than Node because it is a 1/2 job at its core. It has v8. It has the tools. It could be done but no. It did nothing for years until Deno and Bun came on the scene to nudge it.