What is Deno?
Understand Deno's origin, design choices, and boundaries against Node.js, Bun, and Workers
Deno is an open-source JavaScript, TypeScript, and WebAssembly runtime started by Node.js creator Ryan Dahl. It does not invent another language; it brings modern Web APIs, secure permissions, package management, and engineering tools into one CLI.
Why Deno exists
Node.js predates modern ESM and today's front-end ecosystem. Deno chose ES Modules, URL or registry dependencies, Web-standard APIs, and default isolation, then built formatting, linting, testing, and type checking into the runtime. Deno 2 added stronger Node and npm compatibility, so migration can now be incremental.
Node.js project Deno-first project
├── package.json ├── deno.json
├── package-lock.json ├── deno.lock
├── node_modules ├── global cache by default
├── tsc / eslint / test runner └── deno fmt / lint / check / test
└── ambient system access └── sensitive access denied by default
Which runtime fits?
| Workload | Natural starting point | Verify first |
|---|---|---|
| Established Node packages and workflows | Node.js or incremental Deno | native addons, loaders, lifecycle scripts |
| TypeScript APIs, CLIs, and automation | Deno | permission inventory and npm compatibility |
| Bun-specific tooling and startup profile | Bun | Node API and hosting support |
| Cloudflare bindings and global edge | Workers | Node subset, CPU, and platform limits |
| Fresh, Deno Deploy, or MCP tool services | Deno | current framework and platform versions |
Official references: Deno runtime, Node and npm compatibility, and Cloudflare Node.js compatibility.