10 Things I Regret About Node.js - Ryan Dahl - JSConf EU
JSConfRecommended by 6 HN commenters across 4 months, 2018–2025
talk · intermediate · evergreen · 2018–2025 on HN
Node.js creator Ryan Dahl discusses ten design mistakes he made in Node, including package.json, npm, and module resolution. The talk sets out the motivations behind his later project, Deno.
HN treats it as the classic talk on why Deno exists and on lessons from design mistakes in a widely used platform.
Up next
4 mo on HNThe Ranks of Global Billionaires: Not All Billionaires Are Made Equal
Economics Explained
Recommended 4× on HN · 2020–2022
6 mo on HNIn Search of Tomorrow
Berkeley Institute for Data Science (BIDS)
Recommended 9× on HN · 2015–2018
2 mo on HNMachine with Concrete - Arthur Ganson
Arthur Ganson
Recommended 2× on HN · 2015–2025
13 mo on HNRich Harris - Rethinking reactivity
You Gotta Love Frontend
Recommended 15× on HN · 2019–2026
14 mo on HNWhat the heck is the event loop anyway? | Philip Roberts | JSConf EU
JSConf
Recommended 16× on HN · 2015–2025
3 mo on HNBOOKSTORES: How to Read More Books in the Golden Age of Content
Max Joseph
Recommended 3× on HN · 2023–2026
4 mo on HNBrendan Eich: JavaScript, Firefox, Mozilla, and Brave | Lex Fridman Podcast #160
Lex Fridman
Recommended 5× on HN · 2021–2023
10 mo on HNCrockford on JavaScript - Volume 1: The Early Years
YUI Library
Recommended 10× on HN · 2013–2022
10 mo on HNRailsConf 2016 - Turbolinks 5: I Can’t Believe It’s Not Native! by Sam Stephenson
Confreaks
Recommended 6× on HN · 2017–2020
10 mo on HNJavaScript: The Good Parts
Google TechTalks
Recommended 11× on HN · 2009–2020
9 mo on HNPete Hunt: React: Rethinking best practices -- JSConf EU
JSConf
Recommended 9× on HN · 2014–2025
8 mo on HNDan Abramov - Live React: Hot Reloading with Time Travel at react-europe 2015
ReactEurope
Recommended 12× on HN · 2015–2022
12 comments from Hacker News
Ryan Dahl's great talk on design mistakes he made with node.js is something I think about all the time: ▶ this video Even though he considers things like `require('./something')` defaulting to either `./something.js` or `./something/index.js` a mistake, he also admits these are not possible to change at this point. I think Python made a mistake trying to correct design problems in 2. The cost of change simply wasn't worth the price of migration. Is `print("text")` really that much of an improvement over `print "text"`?
Recommended "literature": 1. 10 Things I Regret About Node.js - Ryan Dahl - JSConf EU ( ▶ this video ) 2. Brendan Eich: JavaScript, Firefox, Mozilla, and Brave | Lex Fridman Podcast #160 ( link )
Deno is a JavaScript runtime much like Node. For the reasons on why creating Deno I recommend "10 Things I Regret About Node" by Deno's author [1] Deno is different than Node in several aspects; most notably: - Deno supports only ES modules, there's no built-in support for CommonJS modules - Deno's APIs are all promised based - Deno does not use NPM, instead it can pull code from any URL, much like browsers do - Deno has built-in permission system that by default runs your code in full sandbox allowing to opt-in into breaking out of sandbox (eg. to read a file from disk) - As you've mention Deno can run .ts files without explicit build step - Deno comes with a full toolchain in a single binary (formatter, linter, test runner, bundler, doc generator) [1] ▶ this video
Deno [1] is a new JS runtime by one of the creators of NodeJS, Ryan Dahl. He had a great talk [2] about the lessons he learned when creating/maintaining NodeJS. Many of these lessons are being applied to Deno. [1] link [2] ▶ this video
I just hope in 5 years we're not seeing a talk saying that in retrospective, dropping static types was a huge error... and DoNe is a new project to fix issues like that! (I'm just referring to this nice talk about the regretful mistakes done in Node: ▶ this video )
Well, in all the initial presentations Ryan Dahl gave about Deno, he phrased it as solving the things he'd come to realise he hated about Node. So that's what I take as the raison d'être of Deno - taking the lessons he'd learned from some years mainly coding Go and thinking about what he'd learnt from Node, and fixing what he could. Here's the classic video on the topic: ▶ this video
Their original announcement post covers it pretty well: link IMO their logic still holds up. Dahl had a whole talk about the mistakes made with Node: ▶ this video
I believe the Deno permission system[0] does what you're asking, and more. (Deno is a JavaScript runtime co-created by Ryan Dahl, who created Node.js - see his talk "10 Things I Regret About Node.js"[1] for more of his motivations in designing it.) [0] link [1] ▶ this video
Are we talking about the same talk? 10 Things I Regret about Node.js [0]? Goal #2 (after security) was to simplify the module system, and the very first thing he said about that was no node compatibility. [0] ▶ this video
> …I already have taken care of a lot of those Node issues in my own projects, there is not a ton that I see compelling in Deno. I felt this way too before using Deno for a while. So far I enjoy: - Breaking from npm/node modules support on purpose turns out to be a real plus for me. It's refreshing to have dependencies referenced by URL, and it's good to have them cached centrally by default (in $HOME/Library/Caches/deno on macOS and $XDG_CACHE_HOME/deno or $HOME/.cache/deno on Linux, for example). - Use of web platform APIs ( link ) and the work to standardise those across platforms ( link ) is encouraging. - `deno lint` and `deno fmt` make adopting and using JS/TS feel more like Rust/Go/other languages with good built-in ceremony-free tooling. - Fresh is turning into a very nice Next.js/Astro alternative ( link ) that I found very easy to learn and deploy, with great performance and developer experience out of the box. Bun is interesting, but I wish it didn't embrace node modules: perpetuating its use instead of attempting to move the community on by recognising it for the mistake it was feels sad to me. (See Ryan Dahl's “Design Mistakes in Node” PDF or talk for more: link and ▶ this video )
i also asked this on twitter so just putting some replies here: - Doug Engelbart link - Twilio link - Stripe - "7 lines of code" - Netlify - link - Heroku - link and git push heroku master - Cloudflare - link - Node ( link ) and Deno ( ▶ this video ) - Firebase (reportedly) - link smaller companies/less impactful pitches that i still like - Redux link - Stackblitz link - Comm link - Mongodb link - Let's Encrypt link - Figwheel-Clojurescript link - Svelte link
This explanation resonates with me. I first saw Ryan Dahl's talk about his Node.js regrets[0] during the early days of the pandemic. I thought I'd be eager to try Deno when it became more mature, but I still haven't tried it. I guess I'm not convinced that it's 10x better than Node.js. [0] ▶ this video