denoland/deno
Deno
Deno is a JavaScript, TypeScript, and WebAssembly runtime built on V8, Rust, and Tokio. Compared to Node.js, it ships secure-by-default permissions, native TypeScript support, a built-in standard tool belt (formatter, linter, test runner, LSP), and direct support for both npm: and jsr: module specifiers.
This wiki documents the contents of the denoland/deno repository: the deno CLI binary, the deno_runtime crate that assembles the JavaScript runtime, the 30+ extension crates that expose native capabilities to JS, and the surrounding library crates and test infrastructure.
What is in this repo
The repository is a Cargo workspace with roughly 70 member crates plus a large amount of JavaScript/TypeScript that is bundled into the binary as snapshots. The high-level layout is:
| Path | Purpose |
|---|---|
cli/ |
The deno binary: flag parsing, subcommands, LSP, module loading, type checking, npm/jsr integration |
runtime/ |
The deno_runtime crate: assembles the JS runtime, registers extensions, drives main and web workers |
ext/ |
30+ extension crates that expose native functionality to JS (fs, net, web, node, webgpu, etc.) |
libs/ |
Reusable Rust crates published independently (deno_core, deno_resolver, deno_npm, eszip, deno_lockfile, …) |
tests/ |
Integration ("spec") tests, unit tests, Node compatibility tests, WPT, fixtures |
tools/ |
JS-based developer tools: format.js, lint.js, custom lint plugins, release helpers |
A more detailed map of which directory does what lives in Architecture, and the Glossary defines project-specific terms (ops, extensions, workers, etc.).
Where to start
- I just want to run Deno — see the README or the official docs.deno.com.
- I want to build from source — read Getting started. Deno requires Rust,
cmake,protobuf, and a recursive submodule clone. - I want to contribute code — read How to contribute. The
./xdeveloper CLI wraps the common build/test/lint flows. - I want to understand the architecture — read Architecture, then drill into Systems, Extensions, and Packages.
- I want to know how a specific feature works — start with Features, which covers npm support, JSR support, Node compatibility, the permission model, single-file
deno compile, and more.
Project facts
- Language mix. ~504K lines of Rust, ~268K lines of JavaScript (extension code and Node polyfills), ~188K lines of TypeScript (LSP server code, type definitions, and tests). See By the numbers for the full breakdown.
- History. First commit May 2018, v1.0 May 2020, v2.0 October 2024, currently on the v2.7.x line. Roughly 16,000 commits total. See Lore.
- Top-level binary. The CLI entry point is
cli/main.rs, which callsdeno::main()incli/lib.rs:1. Subcommand routing is inrun_subcommandin the same file. - Permission model. All filesystem, network, environment, and FFI access goes through
deno_permissions(runtime/permissions/lib.rs). The default is no permissions; callers must opt in via--allow-*flags or explicit prompts. - Module resolution. Both
cli/module_loader.rs(1,668 lines) andlibs/resolverparticipate.npm:specifiers go throughlibs/npm+libs/npm_installer;jsr:specifiers go throughcli/jsr.rs.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.