You are viewing documentation generated from a user contribution or an upcoming release. The contents of this document may not have been reviewed by the Deno team. Click here to view the documentation for the latest release.
Edit

Introduction

Deno (/ˈdiːnoʊ/, pronounced dee-no) is a JavaScript, TypeScript, and WebAssembly runtime with secure defaults and a great developer experience.

It's built on V8, Rust, and Tokio.

Feature highlights

Philosophy

Deno aims to be a productive and secure scripting environment for the modern programmer.

Deno will always be distributed as a single executable. Given a URL to a Deno program, it is runnable with nothing more than the ~31 megabyte zipped executable. Deno explicitly takes on the role of both runtime and package manager. It uses a standard browser-compatible protocol for loading modules: URLs.

Among other things, Deno is a great replacement for utility scripts that may have been historically written with Bash or Python.

Goals

  • Ship as just a single executable (deno).
  • Provide secure defaults.
    • Unless specifically allowed, scripts can't access files, the environment, or the network.
  • Be browser-compatible.
    • The subset of Deno programs which are written completely in JavaScript and do not use the global Deno namespace (or feature test for it), ought to also be able to be run in a modern web browser without change.
  • Provide built-in tooling to improve developer experience.
    • E.g. unit testing, code formatting, and linting.
  • Keep V8 concepts out of user land.
  • Serve HTTP efficiently.

Comparison to Node.js

  • Deno does not use npm.

    • It uses modules referenced as URLs or file paths.
  • Deno does not use package.json in its module resolution algorithm.

  • All async actions in Deno return a promise. Thus Deno provides different APIs than Node.

  • Deno requires explicit permissions for file, network, and environment access.

  • Deno always dies on uncaught errors.

  • Deno uses "ES Modules" and does not support require(). Third party modules are imported via URLs:

    import * as log from "https://deno.land/std@0.158.0/log/mod.ts";

Other key behaviors

  • Fetch and cache remote code upon first execution, and never update it until the code is run with the --reload flag. (So, this will still work on an airplane.)
  • Modules/files loaded from remote URLs are intended to be immutable and cacheable.