Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


Failed to load latest commit information.
Latest commit message
Commit time


A Rust crate to generate documentation for JavaScript and TypeScript modules.

This crate powers deno doc, but is not Deno specific and can be used to write documentation generators for other targets like Node or the browser as well.

Usage from Deno CLI or Deploy

This repository includes a compiled version of the Rust crate as Web Assembly and exposes an interface which is available via the mod.ts and can be imported like this:

import { doc } from "{VERSION}/mod.ts";

Where {VERSION} should be substituted with the specific version you want to use.


The doc() function takes a string URL module specifier and potentially some options, and asynchronously resolves with an array of documentation nodes, which represent the surface API of the module.

A minimal example of using doc() and printing out some information about a function:

import { doc } from "{VERSION}/mod.ts";

const colorsDoc = await doc("");

for (const node of colorsDoc) {
  console.log(`name: ${} kind: ${node.kind}`);

The doc() function needs a way to retrieve modules, and by default uses a load() function provided by deno_graph which uses fetch() for remote modules and Deno.readFile() for local modules. This means that doc() will require that appropriate read/net permissions to function properly. It will prompt for them if not provided at startup.


The foundational type for the documentation is the DocNode and is exported from the mod.ts.

Rust Example

examples/ddoc/ provides a minimal standalone binary demonstrating how deno_doc can be used as a crate.

$ cargo run --example ddoc ../deno_std/http/mod.ts


# build all targets
$ cargo build --all-targets

# test it
$ cargo test


Submitting a Pull Request

Before submitting, please make sure the following is done:

  1. That there is a related issue and it is referenced in the PR text.
  2. There are tests that cover the changes.
  3. Ensure cargo test passes.
  4. Format your code with rustfmt --check src/
  5. Make sure cargo clippy --all-targets --release --locked -- -D clippy::all passes.