“10 things I regret about Node.js”
In June 2018 Ryan Dahl — creator of Node.js (2009) — presents at JSConf EU a talk that became famous: “10 Things I Regret About Node.js”. Criticisms:
- No native TypeScript
- Promises arrived late
- Confusing module system (CommonJS vs ESM)
- Huge and branching node_modules
- Overly descriptive package.json
- Complicated V8 binding
- No permissions (a module has full filesystem access)
- GYP and historical build system
- Non-standard libraries
- Initial design mistakes
Dahl announces Deno, a new runtime solving these critiques. Two years of development; Deno 1.0 is released on 13 May 2020. MIT licence.
Key differences from Node.js
- Native TypeScript — no Babel, no ts-node:
deno run script.tsjust works - Secure by default — requires explicit flags for permissions:
--allow-net,--allow-read,--allow-write,--allow-env,--allow-run - Rust runtime + V8 — safer and more performant architecture
- URL imports —
import { serve } from "https://deno.land/std/http/server.ts"; no package.json nor node_modules - Web Platform API —
fetch,WebSocket,Blob,crypto.subtleavailable in runtime like browser - Standard library unified in
deno.land/std - Testing and formatter and linter built-in
Yet Node.js dominates
Despite technical quality, Deno struggles to conquer the Node.js market due to the vast existing npm ecosystem. From Deno 1.29 (2022) the runtime supports npm: specifier (import { z } from "npm:zod") bridging the compatibility gap.
Deno Deploy
Deno Deploy (2022) — edge run-at-the-edge platform executing Deno scripts in global regions with minimal latency. Competitor to Cloudflare Workers, Vercel Edge Functions.
Adoption
Still niche but growing adoption:
- Cloud-native startups
- Academia — simple TypeScript without config
- Edge computing via Deno Deploy
In the Italian context
Limited but growing presence in early-adopter teams.
References: Deno 1.0 (13 May 2020). Ryan Dahl (ex Node.js), Deno Company. MIT licence. Rust + V8 runtime. Native TypeScript. URL imports. Deno Deploy (2022). npm: compatibility (1.29+, 2022).
