deno.com
On this page

Contributing and support

We welcome and appreciate all contributions to Deno.

This page serves as a helper to get you started on contributing.

Projects Jump to heading

There are numerous repositories in the denoland organization that are part of the Deno ecosystem.

Repositories have different scopes, use different programming languages and have varying difficulty level when it comes to contributions.

To help you decide which repository might be the best to start contributing (and/or falls into your interest), here's a short comparison (codebases primarily comprise the languages in bold):

deno Jump to heading

This is the main repository that provides the deno CLI.

Languages: Rust, JavaScript, TypeScript

deno_std Jump to heading

The standard library for Deno.

Languages: TypeScript, WebAssembly

fresh Jump to heading

The next-gen web framework.

Languages: TypeScript, TSX

deno_lint Jump to heading

Linter that powers deno lint subcommand.

Languages: Rust

deno_doc Jump to heading

Documentation generator that powers deno doc subcommand, and reference documentation on https://docs.deno.com/api, and https://jsr.io.

Languages: Rust

rusty_v8 Jump to heading

Rust bindings for the V8 JavaScript engine. Very technical and low-level.

Languages: Rust

serde_v8 Jump to heading

Library that provides bijection layer between V8 and Rust objects. Based on serde library. Very technical and low-level.

Languages: Rust

deno_docker Jump to heading

Official Docker images for Deno.

General remarks Jump to heading

  • Read the style guide.

  • Please don't make the benchmarks worse.

  • Ask for help in the community chat room.

  • If you are going to work on an issue, mention so in the issue's comments before you start working on the issue.

  • If you are going to work on a new feature, create an issue and discuss with other contributors before you start working on the feature; we appreciate all contributions but not all proposed features will be accepted. We don't want you to spend hours working on code that might not be accepted.

  • Please be professional in the forums. We follow Rust's code of conduct (CoC). Have a problem? Email [email protected].

Submitting a pull request Jump to heading

Before submitting a PR to any of the repos, please make sure the following is done:

  1. Give the PR a descriptive title.

Examples of good PR title:

  • fix(std/http): Fix race condition in server
  • docs(console): Update docstrings
  • feat(doc): Handle nested re-exports

Examples of bad PR title:

  • fix #7123
  • update docs
  • fix bugs
  1. Ensure there is a related issue and that it is referenced in the PR text.
  2. Ensure there are tests that cover the changes.

Documenting APIs Jump to heading

It is important to document all public APIs and we want to do that inline with the code. This helps ensure that code and documentation are tightly coupled together.

JavaScript and TypeScript Jump to heading

All publicly exposed APIs and types, both via the deno module as well as the global/window namespace should have JSDoc documentation. This documentation is parsed and available to the TypeScript compiler, and therefore easy to provide further downstream. JSDoc blocks come just prior to the statement they apply to and are denoted by a leading /** before terminating with a */. For example:

/** A simple JSDoc comment */
export const FOO = "foo";

Find more at: https://jsdoc.app/

Rust Jump to heading

Use this guide for writing documentation comments in Rust code.

Profiling Jump to heading

When contributing to performance-sensitive parts of the codebase, it's helpful to profile your changes to ensure they don't negatively impact performance or to verify your optimizations are effective.

Using Samply Jump to heading

Samply is a sampling profiler for macOS and Linux that works well with Deno. It produces flamegraphs that help you visualize where CPU time is being spent.

# Basic usage
samply record -r 20000 deno run -A main.js

You can analyze the generated flamegraph to identify:

  • Hot spots where most CPU time is spent
  • Unexpected function calls
  • Potential areas for optimization

When submitting performance-related contributions, including profiling data can help the team to understand and validate your improvements.

Did you find what you needed?

Privacy policy