Deno

v2.9

What’s new in Deno

Better, faster JavaScript

Deno is a fast, open-source, fully Node-compatible JS runtime with TypeScript and everything else you need baked right in.

Faster than Node; more stable than Bun.

Built-in tools: package manager, test runner, formatter, linter, task runner, type checker, coverage tool, workspace manager, benchmarker, doc generator, jupyter kernel, compiler, desktop app builder.

$curl -fsSL https://deno.land/install.sh | sh

Or let your agent do it

Paste this into any coding agent.

Claude Code · Codex · Gemini CLI · OpenCode · Cursor · Pi · <your agent>

Read deno.com/agents.md and set up Deno in this project

Everything just works

TypeScript, JSX, and npm, straight from source. No tsc, no ts-node, no bundler, no config to get in the way.

server.ts

import { Hono } from "hono";
interface Book {
  title: string;
  year: number;
}
const books: Book[] = [{ title: "Deno", year: 2018 }];
const app = new Hono();
app.get("/books", (c) => c.json(books));
export default app;

package.json

{
  "name": "project-with-npm-deps",
  "dependencies": {
    "chalk": "^5.6.2",
    "hono": "^4.12.27"
  }
}

TypeScriptnpm

Zero-setup TypeScript and npm

Import npm packages just like you would anywhere else. Full type-checking is one deno check away.

Your Node project, without the Node problems

Deno runs Node code and understands lockfiles (even pnpm and yarn), to make any project simple to run with Deno.

Drops right in

  • npm
  • node_modules
  • package.json
  • tsconfig.json
  • ESM
  • JSX / TSX
  • node:* imports
  • CommonJS

Built-in everything

From formatting and linting to testing and package management, Deno is designed with seamless developer experience in mind. Stop configuring; start building.

$

A faster package manager

Deno supports npm workspaces, and can read npm, yarn, and pnpm lockfiles.

Pull from npm and JSR with one command, lock to a single integrity file, and resolve from a global cache instead of a per-project node_modules.

package.json

{
  "workspaces": ["./api", "./web", "./core"],
  "scripts": {
    "dev": "deno run -A --watch main.ts",
    "test": "deno test -A"
  },
  "dependencies": {
    "hono": "hono^4"
  }
}

Package install: Time to install

Lower is better · warm = populated cache · cold = empty cache

Deno

598mswarm

5.3scold

Bun

766mswarm

4.9scold

npm

3.8swarm

15.8scold

18-package dependency tree · isolated caches, scripts disabled · Apple M5 · Deno 2.9 canary, npm (Node v26.5), Bun 1.4 canary

main.ts

import { BinarySearchTree } from "@std/data-structures";
import { assertEquals } from "@std/assert";
const values = [3, 10, 13, 4, 6, 7, 1, 14];
const tree = new BinarySearchTree<number>();
values.forEach((value) => tree.insert(value));
assertEquals([...tree], [1, 3, 4, 6, 7, 10, 13, 14]);

Standard library included

The utilities you’d otherwise assemble from a handful of npm packages, audited, and dependency-free.

Includes modules for parsing, collections, formatting, dates, and more, maintained by the Deno team and versioned on JSR.

Granular security controls

Deno blocks file system, network, and environment access by default. Customize, layer, and audit security settings for any use case.

Filesystem access requires explicit permission(docs)

$

Three layers of defense

Access is denied by default and opened on purpose. Security from end to end, at every layer.

  1. 1Default deny

    Supply-chain safety

    Shut down the most common ways a dependency turns hostile.

    Postinstall scripts
    Off by default

    Opt a package in
    --allow-scripts

    Trusted dynamic imports
    --allow-import

    Audit the dependency tree
    deno audit

    Apply the fixes
    deno audit fix

    Minimum dependency age
    minimumDependencyAge: "P3D"

  2. 2Scoped grants

    Runtime sandbox

    Scope what a single program can do, and deny-list the rest.

    Granular allow flags
    --allow-net

    Deny-list on top
    --deny-net

    Subprocess isolation
    Apply permissions to Deno child processes

    Permission stack traces
    DENO_TRACE_PERMISSIONS=1

    Symlink-aware checks
    Evaluated at the link

  3. 3Audits

    Centralized policy & audit

    Govern permissions, and keep a record of every call.

    Permission broker
    DENO_PERMISSION_BROKER_PATH

    Audit logs
    DENO_AUDIT_PERMISSIONS

  • grant
  • denied / off
  • opt-in

Faster than you think

Deno doesn't stop improving. If you haven't looked in a while, you might be surprised just how fast we've gotten.

Built for the real world

Deno's been carefully built on Rust since day one to optimize for performance in real-world scenarios (not just cherry-picked benchmarks).

Realworld: Requests / sec

Higher is better

Deno72,400

Bun68,200

Node44,000

Realworld: p99 latency

Lower is better

Deno1.87 ms

Bun2.80 ms

Node3.76 ms

Realworld: Peak memory

Lower is better

Bun45 MB

Deno64 MB

Node116 MB

Hello world: Requests / sec

Higher is better

Deno85,600

Bun81,900

Node56,300

Hello world: p99 latency

Lower is better

Deno1.60 ms

Bun2.29 ms

Node3.10 ms

Hello world: Peak memory

Lower is better

Bun41 MB

Deno62 MB

Node108 MB

TypeScript startup: Time to run

Lower is better

Bun14.7 ms

Deno19.6 ms

Node50.0 ms

Package install: Time (warm cache)

Lower is better

Deno598 ms

Bun766 ms

npm3,852 ms

Gzip DecompressionStream: MiB / sec

Higher is better

Deno1,329

Node1,102

Bun1,015

HTTP: 100 concurrent connections · AMD EPYC x86_64, pinned cores · oha, median of 3 runs, uncompressed · Deno.serve (Deno 2.9), Bun.serve (Bun 1.4), node:http (Node v26). Startup, install & streaming: Apple M5 · hyperfine means / in-process medians · Deno 2.9 canary, Node v26.5, Bun 1.4 canary. Results vary by workload and hardware.

See anything, understand everything

Don't just ship code; inspect it deeply at every level with native OpenTelemetry, profiling, and debugging all built-in from the start

Or run it on the platform we built for it.

Preview

And now, the desktop

Deno Desktop builds native, cross-platform desktop apps from the web stack you already know — your frontend, your TypeScript backend, one binary on the desktop. No Electron-sized bundle, no Chromium to ship, no second runtime to manage.

Better JavaScript

Install Deno in a few seconds. Bring an existing project over and see it run.

An illustration in the style of lo-fi anime showing a cute dinosaur coding on a laptop in a cozy room. The laptop has a Deno sticker on the lid, and there's a steamy mug of coffee beside it. In the background is a plant, on the sill of a window overlooking hills and trees. It's dusk outside, with some stars visible in the upper skies, and it is raining gently as clouds slowly float past. The interior is warmly lit by a single desk lamp. On the desk is a takeout box, with chopsticks and a lemon beside it. Peeking over the edge of the box, barely visible, is DeeDee, the Deno Deploy mascot. Ferris, the Rust mascot, can also just barely be seen peeking out from inside the plant pot.

Read the original on deno.com ↗