Skip to main content
We appreciate your help! Deno is an open source project and we welcome contributions of all kinds.

Ways to Contribute

There are many ways to contribute to Deno:
  • Fix bugs or add features - This is the main repository that provides the deno CLI
  • Improve Node.js compatibility - Many systems, including a large part of the Node.js compatibility layer, are implemented in JavaScript and TypeScript modules. These are a good place to start if you are looking to make your first contribution
  • Write documentation - Help improve the docs at docs.deno.com
  • Report issues - Found a bug? Let us know on GitHub Issues
Here is a list of Node.js test cases, including both successful and failing ones. Reviewing these can provide valuable insight into how the compatibility layer works in practice, and where improvements might be needed.

Getting Started

Before you start contributing, you’ll need to set up your development environment:
1

Fork and clone the repository

Fork the Deno repository on GitHub and clone it locally. See Building from Source for detailed instructions.
2

Build Deno

Follow the building from source guide to compile Deno on your machine.
3

Make your changes

Create a new branch and make your changes. See the Development Guide for workflows and best practices.
4

Test your changes

Run the test suite to ensure your changes don’t break existing functionality:
cargo test
5

Format and lint

Ensure your code follows the project’s style guidelines:
./tools/format.js
./tools/lint.js
6

Submit a pull request

Push your changes and open a pull request on GitHub.

Git Workflow

Deno uses a GitHub-based standard git workflow. The main branch is main. All development happens in feature branches, which are then merged into main via pull requests.

Creating a Pull Request

When your feature is finished and ready for review:
  1. Create a descriptive branch - Use names like feature/new-cli-command or fix/bug-in-worker-threads
  2. Commit with clear messages - Write descriptive commit messages that explain the why, not just the what
  3. Push to your fork - Push your branch to your forked repository
  4. Open a PR - Create a pull request against the main branch
  5. Describe your changes - Provide a clear summary of what you changed, why it was necessary, and link to any related issues

PR Best Practices

Never force push to your PR branch. Create as many commits as you need - they all get squashed when the PR is merged. This allows reviewers to see incremental changes you made in response to feedback.
  • Keep changes minimal - Don’t do drive-by changes in a PR. If you need to make an unrelated change, create a separate PR
  • Format before committing - Run ./tools/format.js to format your code
  • Lint your changes - Run ./tools/lint.js (for Rust) or ./tools/lint.js --js (for JavaScript/TypeScript only)
  • Run tests - Ensure cargo test passes before submitting
  • Respond to feedback - Address reviewer comments and questions promptly

Submitting Your PR

Before submitting, make sure:

Tests Pass

Run cargo test to ensure the full test suite passes, including unit tests, integration tests, and Web Platform Tests.

Code is Formatted

Run ./tools/format.js to format all code to match the repository’s consistent style.

No Lint Errors

Run ./tools/lint.js to check for common mistakes using clippy (Rust) and dlint (JavaScript).

Builds Successfully

Ensure your changes compile without errors using cargo build.

Development with HMR

When working on JavaScript/TypeScript modules (including Node.js compatibility), use the --features hmr flag. This is a special development mode where JS/TS sources are read at runtime instead of being included in the binary:
cargo build --features hmr

VSCode Configuration

For VSCode users, add this to your workspace settings:
.vscode/settings.json
{
  "settings": {
    "rust-analyzer.cargo.features": ["hmr"],
    "deno.importMap": "tools/core_import_map.json"
  }
}

Using Development LSP

To use a development version of the Language Server Protocol in VSCode:
1

Install the Deno extension

Install the Deno VSCode extension if you haven’t already.
2

Point to your development binary

Update your VSCode settings to use your development build:
.vscode/settings.json
{
  "deno.path": "/path/to/your/deno/target/debug/deno"
}

Getting Help

If you need assistance:
  • GitHub Issues - Check existing issues or create a new one
  • Discord - Join the Deno Discord server for community discussions
  • Recent PRs - Look at recent pull requests for similar changes
  • Ask maintainers - The Deno team is helpful and responsive

Code of Conduct

We expect all contributors to follow our Code of Conduct. Please be respectful and constructive in all interactions.

Build docs developers (and LLMs) love