Deno is still an easy pick for me because of its built-in test-runner (deno test), linter (deno lint), and type checker (deno check). I've used many different npm packages for these things in previous projects and I have no idea what the new hotness and proper configuration is for all of these things in a new node project, so I really value the simplicity of Deno for it all. Also JSR and Deno for publishing Typescript libraries is still so much easier than setting up a Typescript node project and configuring it to publish compiled code, and it gets you documentation pages generated from your tsdoc comments too, which I never knew how to do outside of JSR.

The new hot lint (for me) is Oxlint. Literally a 300x speed improvement on our monorepo compared to eslint for the same ruleset. It’s amazing, especially in combination with Oxfmt instead of prettier.

Well, TBH being better than eslint (especially with the OCD-afflicted prettier) is a really, really low bar...

TBH there were lots of npm clones that were „better/faster” and still npm is pretty much everywhere.

Oxc ecosystem is still impressive.

While I'm at it, I forgot to mention the built-in formatter (deno fmt) is great too. I use Prettier in other projects and it's also great in those projects, but it's tiring that it's yet another dependency to remember to add and configure in a new node project.

FWIW Node now has node:test, but yeah you still need dependencies for linting and type checking.

They made some really terrible, non-standard decisions with node:test though. It's a real letdown for me.

You'd think unit testing would be the most already-solved problem in the world: just copy what Jest, Mocha, Vitest, etc. do ... and you're done.

Instead they left out major features and implemented other features in really strange "why are you reinventing the wheel" ways :(

I haven't used it, so I don't agree or disagree, but I'm curious: what do you think was left out or poorly implemented?

Honestly I forget now, as I first played around with it months? years? ago when it was pretty new.

But one thing that stood out was .only(). In every major testing framework IT'S ASSUMED the dev is going to want to run one test at a time (sometimes). They make it super simple: you throw a ".only()" on the test, and the test runner only runs it.

In Node, you instead need to pass some special command line flag or add .only to every describe above the test ... which just makes a basic operation (run one test) much harder than it needs to be ... for zero benefit whatsoever (again, just do it the way every other test runner does it).

those features a great, but aren't what most of the people doing JS/TS care.

Node.js has a built in test runner and it is excellent. https://nodejs.org/api/test.html

Not sure if the runtime should be responsible for linting of type checking.

The hot shit is still typescript, eslint. I have been using those for more than a decade in node. For me, (deno lint) sounds like the new hot shit.