Что это
Deno — это runtime для JavaScript и TypeScript, написанный на Rust. Появился в 2018 году как ответ на накопившиеся проблемы Node.js. С тех пор прошёл большой путь и сейчас — это серьёзная альтернатива для многих сценариев.
Что не так с Node.js
Райан Дал в 2018 году в своём знаменитом докладе «10 Things I Regret About Node.js» назвал главные ошибки:
- Не остановил npm registry, когда была возможность — это привело к тысячам некачественных пакетов
- Не использовал promises с самого начала — пришлось обвешивать всё колбэками
- Не продумал безопасность — код в Node.js по умолчанию имеет доступ ко всему
- Не сделал встроенную поддержку TypeScript
- Слишком полагался на CommonJS вместо ESM
Deno исправляет все эти пять пунктов.
Ключевые отличия
Безопасность по умолчанию
# Этот код НЕ получит доступ к файловой системе или сети
deno run script.ts
# Доступ нужно явно разрешить флагами
deno run --allow-net --allow-read script.ts
Это огромная разница. Если ваш скрипт скомпрометирован через зависимость, он не сможет ни читать файлы, ни стучаться в сеть, пока вы явно не разрешите.
TypeScript без сборки
Никакого tsconfig, никакого webpack, никакого babel. Пишете .ts, запускаете — работает.
// hello.ts
interface User { name: string; age: number }
const greet = (u: User) => `Привет, ${u.name}!`;
console.log(greet({ name: "Ник", age: 30 }));
deno run hello.ts
Без npm
Импорты идут напрямую по URL:
import { serve } from "https://deno.land/std@0.210.0/http/server.ts";
import { z } from "https://esm.sh/zod@3.22.0";
Это радикально проще, чем npm install + package.json + node_modules. Зависимости кэшируются на диске и никогда не скачиваются дважды.
Встроенные инструменты
Deno включает в себя всё, что нужно для разработки:
deno fmt— форматтер (на основе Prettier)deno lint— линтерdeno test— тест-раннерdeno bench— бенчмаркиdeno doc— генератор документацииdeno compile— компиляция в standalone бинарник
WebAssembly из коробки
const wasmCode = await Deno.readFile("./module.wasm");
const wasmModule = new WebAssembly.Module(wasmCode);
const instance = new WebAssembly.Instance(wasmModule);
console.log(instance.exports.add(2, 3)); // 5
Совместимость с Node.js и npm
С версии 1.31 Deno умеет запускать npm-пакеты через npm: спецификатор:
import express from "npm:express@4";
const app = express();
А с версии 1.40 — полная совместимость с Node.js API.
Архитектура
deno/
├── core/ # V8 bindings + Rust runtime
├── runtime/ # JS-обёртки над core
├── cli/ # CLI-команды
├── ext/ # Расширения (fs, net, http, ffi, ...)
├── ext/web/ # Web Platform APIs
├── ext/fetch/ # fetch() implementation
└── ext/node/ # Node.js compatibility layer
Внутренне Deno состоит из:
- V8 — JavaScript-движок (тот же, что в Chrome и Node.js)
- Rust — runtime, FFI, файловая система, сеть
- Tokio — асинхронный рантайм для Rust
Когда использовать Deno
✅ CLI-инструменты — компилируется в standalone бинарник, не нужен runtime на машине пользователя ✅ Edge-функции — работает на Deno Deploy, Cloudflare Workers, Vercel Edge ✅ Скрипты автоматизации — TypeScript без боли, песочница безопасности ✅ Прототипы и API — встроенный HTTP-сервер, fetch, WebSockets ✅ Лёгкие production-сервисы — где не нужны тонны зависимостей
❌ Не идеален для: огромных npm-проектов (хотя совместимость хорошая), legacy-кода на CommonJS
Производительность
Deno в среднем на 30–40% быстрее Node.js на HTTP-нагрузке и веб-серверах, примерно одинаков на CPU-bound задачах. Cold start значительно быстрее благодаря одному бинарнику.
Кто использует
- Deno Deploy — managed-платформа для edge-функций
- Slack — внутренние инструменты
- Netlify — edge functions
- GitHub — некоторые скрипты CI/CD
Итог
Deno — это ответ на вопрос «а как должен был выглядеть Node.js, если бы его писали в 2025 году, а не в 2009». Если вы начинаете новый проект и не привязаны к npm-экосистеме — попробуйте Deno. Установка: curl -fsSL https://deno.land/install.sh | sh.