For AI agents: Documentation index at /llms.txt

Skip to content

Developer Tools

Developer tools are used to create, manage, and interact with canisters. ICP provides tooling across several categories: command-line tools, canister development kits (CDKs), client libraries, testing tools, browser-based IDEs, and Candid tooling.

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.

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

For installation, see the Quickstart or the full CLI documentation.

Advanced: creating recipes and creating templates are documented on the CLI docs site.

icp-cli collects anonymous usage telemetry. Opt out with icp settings telemetry false or DO_NOT_TRACK=1.

Coming from dfx? See the migration guide.

ic-wasm is a Wasm post-processing tool required by the official Rust and Motoko recipes. It shrinks binary size, embeds Candid metadata, and strips unused sections. Install it alongside icp-cli. See the Quickstart for setup. You only need to invoke it directly when writing custom build steps.

Resources:

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:

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 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.

Third-party Motoko libraries are distributed through Mops, the Motoko package manager. Use mops add <package> to add a dependency to your project.

For language documentation, see languages/motoko.

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

For Rust-specific guides, see languages/rust.

Several community-maintained CDKs extend ICP to other languages:

LanguageCDKResources
TypeScript / JavaScriptAzleDocumentation
PythonKybraDocumentation
C++icpp-proDocumentation
MoonBitmoonbit-ic-cdkGitHub repo

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

Client libraries handle the protocol details of calling canisters from outside the network: constructing and signing ingress messages, encoding Candid, and verifying responses. For setup and usage patterns, see Calling from clients.

The @icp-sdk package provides the agent and companion libraries for browser and Node.js applications. Full documentation at js.icp.build.

PackagePurpose
@icp-sdk/core/agentSend update and query calls to canisters; manage actors
@icp-sdk/core/candidEncode and decode Candid values
@icp-sdk/core/principalWork with canister and user principal identifiers
@icp-sdk/core/identityManage signing identities
@icp-sdk/authAuthentication client for Internet Identity
@icp-sdk/bindgenGenerate TypeScript bindings from a Candid interface file

@icp-sdk/bindgen is also available as a Vite plugin and a standalone CLI tool. The official project templates wire it up automatically: generated bindings appear in src/declarations/ after each build.

ic-agent is the official Rust library for building applications and scripts that interact with ICP.

Community-maintained client libraries are available for additional languages:

LanguagePackage
Goagent-go by Aviate Labs
Java / Androidic4j-agent by IC4J
Dart / Flutteragent_dart by AstroX
.NETICP.NET by Gekctek
Elixiricp_agent
Cagent-c by Zondax

Community libraries are maintained independently of DFINITY. Check each repository for current status and security review history before using in production.

PocketIC is a lightweight, deterministic testing library for canister integration tests. It runs an in-process IC replica: no daemon, no ports, no Docker required. Tests execute synchronously, making them fast and fully reproducible. The icp-cli local development network uses PocketIC under the hood.

LanguagePackageInstall
Rustpocket-icAdd to [dev-dependencies] in Cargo.toml
JavaScript / TypeScript@dfinity/picnpm install --save-dev @dfinity/pic
Pythonpocket-icpip install pocket-ic

For usage patterns and examples, see the PocketIC guide.

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

The Motoko extension for VS Code (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 for details.

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.

Resources: