Deno, the next-generation JavaScript runtime

3 min read Original article ↗

Uncomplicate JavaScript

Deno is the open-source JavaScript runtime for the modern web.

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

All your favorite tools, built-in and ready to go

Deno natively supports TypeScript, JSX, and modern ECMAScript features with zero configuration.

account.ts

type User = { name: string; balance: number };

function getBalance(user: User): string {
  return `Balance: $${user.balance.toFixed(2)}`;
}

console.log(getBalance({ name: "Alice", balance: 42 }));

$ deno run account.ts

Balance: $42.00

$ deno check

Check account.ts

✅ Type check successful

Just run TypeScript

Run .ts files directly with built-in type checking and compilation—no additional tooling or configuration required!

Seamless npm

With first-class support for npm and Node, Deno can read your package.json automatically, or you can import packages from npm directly.

Using package.json or import maps

import { Hono } from "hono";

const app = new Hono();

app.get("/", (c) => {
  return c.text("Hello Hono!");
});

Deno.serve(app.fetch);

Using inline imports

import { Hono } from "npm:hono@4";

const app = new Hono();

app.get("/", (c) => {
  return c.text("Hello Hono!");
});

Deno.serve(app.fetch);

Built on web standards

Whenever possible, Deno implements web standard APIs on the server. Deno actively participates in TC39 and WinterCG to help move the web forward.

Consistent code from browser to backend

Deno prioritizes web standard APIs, maximizing code reuse between browser and server and future-proofing your code.

Batteries included

The essential tools you need to build, test, and deploy your applications are all included out of the box.

Code linter

Deno ships with a built-in code linter to help you avoid bugs and code rot.

Learn more

Test runner

Deno provides a test runner and assertion libraries as a part of the runtime and standard library.

Learn more

// server_test.ts
Deno.test("1 + 2 = 3", () => {
  const x = 1 + 2;
  console.assert(x == 3);
});
$ deno test server_test.ts

Standalone executables

Instantly create standalone executables from your Deno program. It even supports cross-compiling for other platforms!

Learn more

Deno.serve(req => new Response("Hello!"));
$ deno compile --allow-net server.ts

Compile file:///tmp/server.ts to server
$ ./server
Listening on http://localhost:8000/

Code formatter

Deno's built-in code formatter (based on dprint) beautifies JavaScript, TypeScript, JSON, and Markdown.

Learn more

$ deno fmt --line-width=120

Secure by default

A program run with Deno has no file, network, or environment access unless explicitly enabled.

Prevent supply chain attacks

Stop worrying about npm modules introducing unexpected vulnerabilities. Deno restricts access to the file system, network, and system environment by default, so code can access only what you allow.

Other runtimes

$ node random.js

Executing random.js...

🚨 File system compromised!

Deno

$ deno random.js

⚠️ Deno requests write access

Allow? [y/n/A]

$ n

❌ Denied write access

Exited

High-performance networking

Out of the box support for:

  • HTTPS (encryption)
  • WebSocket
  • HTTP2
  • Automatic response body compression

* Ubuntu 22 on ec2 m5.metal; Deno 2.5.2 vs. Node 18.12.1

— The cloud built for modern JavaScript —

Deno Deploy logo

Project hosting made for Deno

Unlock the full potential of your JavaScript and TypeScript projects with the all-new, completely reimagined Deno Deploy

Unlock the full power of Deno

Deno users can enjoy first-class support for features like OpenTelemetry, Deno KV, and the Deno Deploy CLI—plus exclusives like Playgrounds, Databases, and more.

Get the most out of Deno with Fresh 2.0

Fresh is the Deno web framework, built with Preact and fully compatible with Vite for blazing speed and instant productivity.

Build fast sites fast

Author routes as the JSX (or TSX) components you already know and love, and Fresh handles dynamic server-side rendering by default.

/routes/index.tsx

export default function HomePage() {
  return (
    <div>
      <h1>HTML fresh from the server!</h1>
      <p>
        Delivered at
        {new Date().toLocaleTimeString()}
      </p>
    </div>
  );
}

/islands/Counter.tsx

import { useSignal } from "@preact/signals";

export default function Counter() {
  const count = useSignal<number>(0);

  return (
    <button onClick={() => count.value += 1}>
      The count is {count.value}
    </button>
  );
}

Ship less JavaScript

Island-based architecture lets you opt in to only the JavaScript you need, for absolutely minimal runtime overhead.

Ready to get started with Deno?