Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 143 additions & 15 deletions docs/guides/tools/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,150 @@ sidebar:
order: 2
---

TODO: Write content for this page.
Developer tools are used to create, manage, and interact with canisters. ICP provides tooling across several categories: command-line tools, canister development kits (CDKs), browser-based IDEs, Wasm optimization utilities, and Candid tooling.

<!-- Content Brief -->
Overview of the ICP developer toolchain. Cover icp-cli (project management, deployment, identity), CDKs (Rust CDK via ic-cdk, Motoko compiler), icp.ninja playground for browser-based development, VS Code extensions, ic-wasm for Wasm optimization, and didc for Candid tools. Each tool gets a brief description and link to its documentation. Do not duplicate tool docs -- link out.
## Command-line tools

<!-- Source Material -->
- Portal: building-apps/developer-tools/dev-tools-overview.mdx, cdks/index.mdx, icp-ninja.mdx
- icskills: icp-cli
- icp-cli docs: https://cli.internetcomputer.org/
- Rust CDK: https://docs.rs/ic-cdk/latest/ic_cdk/
### icp-cli

<!-- Writing Note -->
Also mention: Quill (cold wallet signing, NNS governance), icp-cli telemetry opt-out, and link to icp-cli's creating-recipes.md and creating-templates.md for advanced users.
`icp-cli` is the primary tool for building and deploying applications on the Internet Computer. It manages the full development lifecycle: creating projects, building canisters, deploying to local or mainnet environments, managing identities, and handling cycles and ICP tokens.

<!-- Cross-Links -->
- getting-started/quickstart -- icp-cli in action
- guides/tools/migrating-from-dfx -- migration guide
- languages/rust/index -- Rust CDK details
- languages/motoko/index -- Motoko tooling
Key features:
- **Recipes** — reusable, versioned build templates for Rust, Motoko, and asset canisters
- **Environments** — named deployment targets that combine a network, canister set, and settings (e.g., local, staging, production)
- **Project scaffolding** — `icp new` bootstraps new projects from official templates

Install via npm (requires Node.js LTS):

```bash
npm install -g @icp-sdk/icp-cli @icp-sdk/ic-wasm
```

Or via Homebrew:

```bash
brew install icp-cli
brew install ic-wasm
```

Verify:

```bash
icp --version
```

Full documentation: [cli.internetcomputer.org](https://cli.internetcomputer.org/)

For advanced users, icp-cli supports authoring custom recipes and project templates:
- [Creating recipes](https://cli.internetcomputer.org/guides/creating-recipes) — encode build conventions as reusable Handlebars templates
- [Creating templates](https://cli.internetcomputer.org/guides/creating-templates) — scaffold new projects with `icp new`

#### Telemetry opt-out

`icp` collects anonymous usage data (command names, platform, version, success/failure) to help prioritize features. No personally identifiable information, project names, file paths, or canister IDs are collected.

To opt out:

```bash
icp settings telemetry false
```

Or set `DO_NOT_TRACK=1` in your environment. Telemetry is automatically disabled in CI when the `CI` environment variable is set.

### ic-wasm

`ic-wasm` is a utility for optimizing and annotating WebAssembly modules for the Internet Computer. It shrinks Wasm binary size, embeds Candid metadata, and strips unused sections. The official Rust and Motoko recipes use `ic-wasm` automatically — you only need to call it directly when using custom build steps.

Install:

```bash
npm install -g @icp-sdk/ic-wasm
# or
brew install ic-wasm
```

### Quill

Quill is a minimalistic, offline-first CLI for signing and sending governance messages — NNS and SNS proposals, neuron management — from air-gapped machines. Unlike `icp-cli`, Quill is designed for cold wallet workflows: you generate signed messages on an offline device, then submit them from a networked machine.

Quill is suited for:
- Submitting NNS governance proposals
- Managing SNS neurons from a hardware wallet or cold key

Resources:
- [Quill GitHub repo](https://github.com/dfinity/quill)

## Canister development kits (CDKs)

A canister development kit (CDK) provides a programming language with the libraries and toolchain support needed to compile code to WebAssembly and interact with the ICP system API.

### Motoko

Motoko is ICP's native programming language, designed around the actor model, orthogonal persistence, and asynchronous message passing. It compiles directly to WebAssembly and includes a standard library (`mo:core`) with modules for common data structures, cryptography, and system interaction.

For language documentation, see [languages/motoko](../../languages/motoko/index.md).

### Rust CDK (`ic-cdk`)

The Rust CDK (`ic-cdk`) is the official DFINITY-maintained library for building canisters in Rust. It exposes the ICP system API as safe Rust abstractions, including:
- `ic_cdk::api` — system calls (time, caller, stable memory, management canister)
- `ic_cdk_timers` — periodic timers and one-shot timers
- `ic_cdk_macros` — `#[update]`, `#[query]`, `#[init]`, and other attribute macros

API reference: [docs.rs/ic-cdk](https://docs.rs/ic-cdk/latest/ic_cdk/)

For Rust-specific guides, see [languages/rust](../../languages/rust/index.md).

### Community CDKs

Several community-maintained CDKs extend ICP to other languages:

| Language | CDK | Resources |
|----------|-----|-----------|
| TypeScript / JavaScript | [Azle](https://github.com/demergent-labs/azle) | [Documentation](https://demergent-labs.github.io/azle/azle.html) |
| Python | [Kybra](https://github.com/demergent-labs/kybra) | [Documentation](https://demergent-labs.github.io/kybra) |
| C++ | [icpp-pro](https://github.com/icppWorld/icpp-pro) | [Documentation](https://docs.icpp.world) |
| MoonBit | [moonbit-ic-cdk](https://github.com/eliezhao/moonbit-ic-cdk) | GitHub repo |

Community CDKs are maintained independently of DFINITY. Check each project's documentation for current support status.

## Browser-based IDE

### ICP Ninja

[ICP Ninja](https://icp.ninja) is a web-based IDE for writing and deploying ICP canisters directly from a browser — no local toolchain required. It provides a gallery of example projects (Motoko and Rust backends, React frontends) that you can browse, edit, and deploy to the mainnet in one click.

Deployed canisters remain live for 20 minutes. You can redeploy to reset the timer, or download the project files to continue development locally with icp-cli.

Limitations:
- Projects are limited to 5 MB and 2 canisters
- ICP Ninja is not a replacement for icp-cli for production workflows

## Editor tooling

### Motoko VS Code extension

The [Motoko extension for VS Code](https://github.com/dfinity/vscode-motoko) (`dfinity/vscode-motoko`) adds Motoko language support to VS Code: syntax highlighting, type checking, auto-completion, and inline diagnostics.

Install by searching for "Motoko" in the VS Code extensions panel, or visit the [vscode-motoko repository](https://github.com/dfinity/vscode-motoko) for details.

## Candid tools

### didc

`didc` is the Candid command-line tool for working with Candid interfaces: encoding and decoding values, checking `.did` files, generating bindings, and testing Candid compatibility.

Install: download a prebuilt binary from the [releases page](https://github.com/dfinity/candid/releases).

Resources:
- [Candid GitHub repo](https://github.com/dfinity/candid)
- Candid specification: [reference/candid-spec.md](../../reference/candid-spec.md)

## Next steps

- **Start building:** [Quickstart](../../getting-started/quickstart.md) — deploy your first canister with icp-cli
- **Migrating from the legacy CLI?** [Migration guide](migrating-from-dfx.md) — command mapping and configuration changes
- **Rust development:** [Rust language guide](../../languages/rust/index.md)
- **Motoko development:** [Motoko language guide](../../languages/motoko/index.md)

<!-- Upstream: informed by dfinity/portal — docs/building-apps/developer-tools/dev-tools-overview.mdx, docs/building-apps/developer-tools/icp-ninja.mdx, docs/building-apps/developer-tools/cdks/index.mdx, docs/tutorials/developer-liftoff/level-1/1.2-dev-env.mdx; dfinity/icp-cli — docs/telemetry.md, docs/guides/installation.md, docs/guides/creating-recipes.md, docs/guides/creating-templates.md; dfinity/candid — README.md -->
Loading