This week after upgrading Deno version for one of my projects, I realized that it was giving a Node.js error. I first assumed this was a bug and Deno was failing to exclude Node.js types leaking from a package.
So I tried to isolate the issue in order to open a bug report, and realized that the issue was happening at version +2.8.0. Soon I realized this was intentional, De-no which is reverse of No-de even in the name, was doing a 180 and including full Node.js support. Not just compatibility with Node.js packages, it was making Node.js first class citizen within Deno.
Then I realized landing page for Deno was redesigned to appeal to Node.js users, and was all about Node.js compatibility.
I opened an issue anyway, talking about why we can't opt-out of this: github.com/denoland/deno/issues/35821
And I have learned this change was here to stay. I have learned that Deno has broken the contract/promise to its userbase.
Deno has betrayed its own purpose, its own reason to exist.
I feel like a fool for trusting Deno, and for writing about and supporting it online.
Because I used to keep talking about how it's cleaner, how it doesn't sacrifice everything else for Node.js compatibility. I used to praise how Deno no longer gives CommonJS any attention. I would talk about how Bun just inherits the mess of Node.js, and I'd call it "just a fast Node.js."
I used to say, "I don't want a faster Node.js, I want Deno"
I have even written an article for supporting Deno: naddr1qvzqqqr4gupzq3vrtsm0g8vhn0yp9xps7t6ajftz756r6mldm4hnp2nefqrnpunwqq2nwkzl23ckvmzrdpprgemdvepryknh2ym9w5mvxuz
This whole shift feels like it should have been a different project, instead of using Deno's name to just create another Node.js runtime.
Seeing Node.js stuff now repulses me. It feels like a legacy relic that should have died years ago.
I mean, I would have accepted it if it were just "We'll inject Node.js stuff for now for compat, so you can use existing Node.js packages in your Deno applications, but DON'T WORRY we're actively working on a better solution, to GET RID OF it". But now the landing doubles down on node_modules, package.json, CommonJS🤢, tsconfig.json, npm, node.
I really do use Deno everywhere:
- Quick scripting? Just create TypeScript files with a Deno shebang. Or just quickly open the terminal, write
deno, import anything you want, and try out whatever you feel like directly. - GUI apps? Deno +
jsr:@webview/webview, then just compile and package it. I even used the libadwaita package for Deno once. I think there's nowdeno desktop, which is even better (I guess — haven't tried it). - Web? Just use raw Deno to serve endpoints, bundle the JS, raw-import the JS and HTML, and serve them.
- The
@stdpackages cover almost everything. When I need something, I look at the existing@stdpackages and it's there. For most projects, just@nobleand@stdare enough. - Want to implement plugin support for your app? Just use Worker(s) with Deno permissions. Great. (It's kind of unstable right now and leaks data. It allows reads via imports, but it's great.) The plugin dev can even use WASM internally, and you don't even have to know about it.
- I even thought about making my own DE with Deno. The UI processes only, I mean.
All clean, modern...
But now Node.js is creeping in as a first-class citizen, and that doesn't make me happy. Still, there's no alternative runtime. Deno is still the best. So I'll just stick around.
I wish Deno stayed stubborn, and gatekept its vision better. Project is not even 10 years old.
Now I'm just hoping for an alternative to exist. Same reason I switched to Deno will be the same reason why I'm switching away from it.

