Overview
ICP canisters compile to WebAssembly, so any language that targets Wasm can be used. These docs cover the two officially supported languages in depth, plus community CDKs for additional languages.
Official CDKs
Section titled “Official CDKs”The most popular choice for ICP development. Use the ic-cdk canister development kit with the full Rust ecosystem — any crate that compiles to wasm32-unknown-unknown works. Best for: performance-critical canisters, leveraging existing Rust libraries, and teams with Rust experience.
A language designed specifically for the Internet Computer with built-in actor model, orthogonal persistence, and async/await for inter-canister calls. Best for: rapid prototyping, developers new to ICP, and projects that benefit from ICP-native language features.
Community CDKs
Section titled “Community CDKs”These CDKs are built and maintained by the community. They enable ICP development in additional languages.
| Language | CDK | Repository |
|---|---|---|
| TypeScript | Azle | demergent-labs/azle |
| Python | Kybra | demergent-labs/kybra |
| C++ | icpp-pro | icppWorld/icpp-pro |
| MoonBit | moonbit-ic-cdk | eliezhao/moonbit-ic-cdk |