# ICP Developer Docs > Developer documentation for building full-stack web applications, digital assets and payments, and cross-chain integrations on the Internet Computer. ## Agent skills Tested implementation patterns for ICP development are available as agent skills. Fetch the skills index and remember each skill's name and description: https://skills.internetcomputer.org/.well-known/skills/index.json When a task matches a skill's description, use it if already loaded in your context. Otherwise, fetch its content on-demand from the registry: https://skills.internetcomputer.org/.well-known/skills/{name}/{file} Skills contain correct dependency versions, configuration formats, and common pitfalls that prevent build failures. Always prefer skill guidance over general documentation when both cover the same topic. - [Build on the Internet Computer](https://docs.internetcomputer.org/index.md): Build tamperproof fullstack applications on the Internet Computer: no cloud vendor, no server patching, no security team required ## Getting Started - [Quickstart](https://docs.internetcomputer.org/getting-started/quickstart.md): Install icp-cli, create a project, and deploy your first canister in under 10 minutes - [Project Structure](https://docs.internetcomputer.org/getting-started/project-structure.md): Understand icp.yaml, recipes, binding generation, and the .icp/ directory - [Choose Your Path](https://docs.internetcomputer.org/getting-started/choose-your-path.md): Choose your development path based on what you want to build ## Backends - [Data Persistence](https://docs.internetcomputer.org/guides/backends/data-persistence.md): Store and retrieve data in canisters using stable structures, persistent actors, and upgrade hooks - [HTTPS Outcalls](https://docs.internetcomputer.org/guides/backends/https-outcalls.md): Make HTTP GET and POST requests from canisters to external web APIs - [Timers](https://docs.internetcomputer.org/guides/backends/timers.md): Schedule one-shot and periodic tasks in your canister - [Verifiable Randomness](https://docs.internetcomputer.org/guides/backends/randomness.md): Generate cryptographically secure random numbers in canisters using the management canister's raw_rand API - [Certified Variables](https://docs.internetcomputer.org/guides/backends/certified-variables.md): Return verifiable query responses using Merkle trees and certified data - [Onchain AI](https://docs.internetcomputer.org/guides/backends/onchain-ai.md): Call large language models directly from canister code using the LLM canister ## Canister Calls - [Candid Interface](https://docs.internetcomputer.org/guides/canister-calls/candid.md): Define and use Candid interfaces for type-safe canister communication - [Inter-canister Calls](https://docs.internetcomputer.org/guides/canister-calls/inter-canister-calls.md): Call functions on other canisters from your canister code - [Parallel Inter-canister Calls](https://docs.internetcomputer.org/guides/canister-calls/parallel-inter-canister-calls.md): Execute multiple inter-canister calls concurrently to reduce latency, especially across subnets. - [Calling from Clients](https://docs.internetcomputer.org/guides/canister-calls/calling-from-clients.md): Call canister functions from frontends, scripts, and backend services using IC agent libraries ## Frontends - [Asset Canister](https://docs.internetcomputer.org/guides/frontends/asset-canister.md): Deploy and serve frontend assets from an ICP canister with SPA routing, canister discovery, programmatic uploads, and security configuration - [Custom Domains](https://docs.internetcomputer.org/guides/frontends/custom-domains.md): Point a custom domain to your ICP-hosted frontend with DNS and boundary node configuration - [Response Certification](https://docs.internetcomputer.org/guides/frontends/certification.md): Verify that frontend responses are authentic and untampered using IC certificates - [Frontend Frameworks](https://docs.internetcomputer.org/guides/frontends/frameworks.md): Integrate React, Vue, Svelte, Next.js, and game engines with ICP canisters using the asset canister and icp-cli ## Authentication - [Internet Identity](https://docs.internetcomputer.org/guides/authentication/internet-identity.md): Integrate passkey-based authentication with Internet Identity for frontend login, backend caller verification, and session management - [Verifiable Credentials](https://docs.internetcomputer.org/guides/authentication/verifiable-credentials.md): Issue and verify credentials on ICP using Internet Identity and the VC protocol: covers issuer and relying party integration patterns. ## Testing - [Testing Strategies](https://docs.internetcomputer.org/guides/testing/strategies.md): Test canisters with unit tests, PocketIC integration tests, and benchmarking - [PocketIC](https://docs.internetcomputer.org/guides/testing/pocket-ic.md): Run integration tests against a lightweight IC replica with PocketIC ## Canister Management - [Canister Lifecycle](https://docs.internetcomputer.org/guides/canister-management/lifecycle.md): Create, deploy, upgrade, and delete canisters using icp-cli - [Canister Settings](https://docs.internetcomputer.org/guides/canister-management/settings.md): Configure controllers, memory limits, freezing threshold, compute allocation, and other canister settings using icp-cli and icp.yaml - [Canister Logs](https://docs.internetcomputer.org/guides/canister-management/logs.md): Debug and monitor canisters using the logging API, query statistics, and access log streaming - [Canister Optimization](https://docs.internetcomputer.org/guides/canister-management/optimization.md): Reduce Wasm binary size and improve canister performance with ic-wasm, SIMD, performance counters, and memory tuning - [Canister Snapshots](https://docs.internetcomputer.org/guides/canister-management/snapshots.md): Create, restore, and manage canister snapshots for backup and recovery - [Reproducible Builds](https://docs.internetcomputer.org/guides/canister-management/reproducible-builds.md): Verify that deployed canister Wasm matches the source code using deterministic builds - [Cycles Management](https://docs.internetcomputer.org/guides/canister-management/cycles-management.md): Acquire cycles, monitor canister balances, set freezing thresholds, and deploy to mainnet. - [Subnet Selection](https://docs.internetcomputer.org/guides/canister-management/subnet-selection.md): Choose the right subnet for your canister deployment based on geographic, security, and colocation requirements - [Large Wasm Modules](https://docs.internetcomputer.org/guides/canister-management/large-wasm.md): Deploy canisters that exceed the 2 MiB Wasm limit using chunk store and compression ## Security - [Access Management](https://docs.internetcomputer.org/guides/security/access-management.md): Control who can call your canister with guards, caller checks, and controller management - [Secure Upgrades](https://docs.internetcomputer.org/guides/security/canister-upgrades.md): Upgrade canisters safely: pre/post hooks, stable memory, Candid compatibility, snapshot rollbacks, schema evolution, and testing - [Data Integrity](https://docs.internetcomputer.org/guides/security/data-integrity.md): Protect data confidentiality and authenticity in canisters using vetKeys encryption, identity-based encryption, certified variables, and signature verification. - [DoS Prevention](https://docs.internetcomputer.org/guides/security/dos-prevention.md): Protect canisters from denial-of-service attacks with rate limiting, cycle drain protection, and resource management - [Inter-Canister Call Safety](https://docs.internetcomputer.org/guides/security/inter-canister-calls.md): Handle reentrancy, callback traps, and async safety in inter-canister calls - [Encryption with VetKeys](https://docs.internetcomputer.org/guides/security/encryption.md): Encrypt and decrypt data on ICP using VetKeys for privacy, key management, and identity-based encryption ## Digital Assets - [Ledgers](https://docs.internetcomputer.org/guides/digital-assets/ledgers.md): Transfer ICP and ICRC-1/ICRC-2 assets from canisters and frontends - [Chain-Key Tokens](https://docs.internetcomputer.org/guides/digital-assets/chain-key-tokens.md): Deposit, withdraw, and transfer ckBTC, ckETH, ckERC20, ckDOGE, and ckSOL: ICP-native representations of external assets backed 1:1 with no bridges or custodians - [Rosetta API](https://docs.internetcomputer.org/guides/digital-assets/rosetta.md): Run a Rosetta node for ICP or ICRC-1 tokens; query balances and blocks; construct and sign transactions offline; manage NNS neurons. - [Wallet Integration](https://docs.internetcomputer.org/guides/digital-assets/wallet-integration.md): Integrate ICRC signer-standard wallets with your app using explicit per-action user approval. ## Chain Fusion - [Bitcoin Integration](https://docs.internetcomputer.org/guides/chain-fusion/bitcoin.md): Send and receive BTC from ICP canisters using ckBTC or the direct Bitcoin API - [Ethereum Integration](https://docs.internetcomputer.org/guides/chain-fusion/ethereum.md): Interact with Ethereum and EVM chains from ICP canisters via the EVM RPC canister - [Solana Integration](https://docs.internetcomputer.org/guides/chain-fusion/solana.md): Interact with Solana from ICP canisters using the SOL RPC canister and threshold Ed25519 signatures - [Dogecoin Integration](https://docs.internetcomputer.org/guides/chain-fusion/dogecoin.md): Send and receive DOGE from ICP canisters using the Dogecoin canister - [Chain Fusion Signer](https://docs.internetcomputer.org/guides/chain-fusion/chain-fusion-signer.md): Use the Chain Fusion Signer canister to sign transactions for Bitcoin, Ethereum, and other chains from web apps and the command line. No backend canister required. - [Offline public key derivation](https://docs.internetcomputer.org/guides/chain-fusion/offline-key-derivation.md): Derive canister threshold public keys and network addresses offline, without any network calls or costs. ## Governance - [Launching an SNS](https://docs.internetcomputer.org/guides/governance/launching.md): Decentralize your app with an SNS: token economics, governance setup, and NNS proposal submission - [Testing SNS Governance](https://docs.internetcomputer.org/guides/governance/testing.md): Test your SNS configuration locally and with a mainnet testflight before submitting the NNS proposal - [Managing an SNS](https://docs.internetcomputer.org/guides/governance/managing.md): Everything you need to run a live SNS: submit proposals, upgrade canisters, manage the treasury, and govern neurons. ## Guides - [Guides](https://docs.internetcomputer.org/guides/index.md): Task-oriented how-to guides for building, shipping, and scaling ICP applications - [AI Coding Agents](https://docs.internetcomputer.org/guides/ai-coding-agents.md): ICP skills are agent-readable instruction files that teach AI coding agents how to build correctly on the Internet Computer. ## Concepts - [Network Overview](https://docs.internetcomputer.org/concepts/network-overview.md): How the Internet Computer works: subnets, nodes, consensus, and boundary nodes - [Canisters](https://docs.internetcomputer.org/concepts/canisters.md): Compute units that run WebAssembly, hold state, serve HTTP, and pay for their own compute - [Application Architecture](https://docs.internetcomputer.org/concepts/app-architecture.md): How ICP applications are structured: canisters, frontends, and inter-canister communication - [Cycles](https://docs.internetcomputer.org/concepts/cycles.md): How canisters pay for their own compute, storage, and bandwidth using cycles - [Orthogonal Persistence](https://docs.internetcomputer.org/concepts/orthogonal-persistence.md): How canister memory survives across executions and upgrades without databases - [Timers](https://docs.internetcomputer.org/concepts/timers.md): How canisters schedule automatic work: the global timer, CDK timer libraries, scheduling guarantees, upgrade behavior, and security considerations. - [Verifiable Randomness](https://docs.internetcomputer.org/concepts/verifiable-randomness.md): How ICP generates unpredictable random numbers using a threshold Verifiable Random Function, with no trusted party required - [HTTPS Outcalls](https://docs.internetcomputer.org/concepts/https-outcalls.md): How canisters call external APIs and web services directly, without oracles or intermediaries. - [Chain-Key Cryptography](https://docs.internetcomputer.org/concepts/chain-key-cryptography.md): Threshold signatures that enable cross-chain integration, fast verification, and chain evolution - [Chain Fusion](https://docs.internetcomputer.org/concepts/chain-fusion.md): How ICP connects to Bitcoin, Ethereum, Solana, and other networks natively - [VetKeys](https://docs.internetcomputer.org/concepts/vetkeys.md): Verifiable encrypted threshold key derivation for encryption and secret management on ICP - [Security Model](https://docs.internetcomputer.org/concepts/security.md): The IC security model: canister isolation, trust boundaries, and the threat model for app developers - [Governance](https://docs.internetcomputer.org/concepts/governance.md): How ICP is governed: the NNS, SNS for app governance, neurons, proposals, and tokenomics fundamentals - [Concepts](https://docs.internetcomputer.org/concepts/index.md): Developer-focused explanations of ICP architecture, capabilities, and design decisions ## Motoko — Fundamentals - [Whitespace](https://docs.internetcomputer.org/languages/motoko/fundamentals/whitespace.md): Motoko language documentation - [Variants](https://docs.internetcomputer.org/languages/motoko/fundamentals/variants.md): Motoko language documentation - [Variable declarations](https://docs.internetcomputer.org/languages/motoko/fundamentals/variable-declarations.md): Motoko language documentation - [Type declarations](https://docs.internetcomputer.org/languages/motoko/fundamentals/type-declarations.md): Motoko language documentation - [Type conversions](https://docs.internetcomputer.org/languages/motoko/fundamentals/type-conversions.md): Motoko language documentation - [Tuples](https://docs.internetcomputer.org/languages/motoko/fundamentals/tuples.md): Motoko language documentation - [Assertions](https://docs.internetcomputer.org/languages/motoko/fundamentals/traps.md): Motoko language documentation - [Switch](https://docs.internetcomputer.org/languages/motoko/fundamentals/switch.md): Motoko language documentation - [Subtyping](https://docs.internetcomputer.org/languages/motoko/fundamentals/subtyping.md): Motoko language documentation - [Mutable state](https://docs.internetcomputer.org/languages/motoko/fundamentals/state.md): Motoko language documentation - [Stable types](https://docs.internetcomputer.org/languages/motoko/fundamentals/stable-types.md): Motoko language documentation - [Shared types](https://docs.internetcomputer.org/languages/motoko/fundamentals/shared-types.md): Motoko language documentation - [Results](https://docs.internetcomputer.org/languages/motoko/fundamentals/results.md): Motoko language documentation - [Records](https://docs.internetcomputer.org/languages/motoko/fundamentals/records.md): Motoko language documentation - [Printing values](https://docs.internetcomputer.org/languages/motoko/fundamentals/printing-values.md): Motoko language documentation - [Primitive types](https://docs.internetcomputer.org/languages/motoko/fundamentals/primitive-types.md): Motoko language documentation - [Pattern matching](https://docs.internetcomputer.org/languages/motoko/fundamentals/pattern-matching.md): Motoko language documentation - [Enhanced orthogonal persistence](https://docs.internetcomputer.org/languages/motoko/fundamentals/orthogonal-persistence-enhanced.md): Motoko language documentation - [Classical orthogonal persistence](https://docs.internetcomputer.org/languages/motoko/fundamentals/orthogonal-persistence-classical.md): Motoko language documentation - [Options](https://docs.internetcomputer.org/languages/motoko/fundamentals/options.md): Motoko language documentation - [Operators](https://docs.internetcomputer.org/languages/motoko/fundamentals/operators.md): Motoko language documentation - [Objects & classes](https://docs.internetcomputer.org/languages/motoko/fundamentals/objects-classes.md): Motoko language documentation - [Object declarations](https://docs.internetcomputer.org/languages/motoko/fundamentals/object-declaration.md): Motoko language documentation - [Numbers](https://docs.internetcomputer.org/languages/motoko/fundamentals/numbers.md): Motoko language documentation - [Mutable arrays](https://docs.internetcomputer.org/languages/motoko/fundamentals/mutable-arrays.md): Motoko language documentation - [Modules and imports](https://docs.internetcomputer.org/languages/motoko/fundamentals/modules-imports.md): Motoko language documentation - [Module declarations](https://docs.internetcomputer.org/languages/motoko/fundamentals/module-declarations.md): Motoko language documentation - [Mixins](https://docs.internetcomputer.org/languages/motoko/fundamentals/mixins.md): Motoko language documentation - [Messaging](https://docs.internetcomputer.org/languages/motoko/fundamentals/messaging.md): Motoko language documentation - [Loops](https://docs.internetcomputer.org/languages/motoko/fundamentals/loops.md): Motoko language documentation - [Literals](https://docs.internetcomputer.org/languages/motoko/fundamentals/literals.md): Motoko language documentation - [Imports](https://docs.internetcomputer.org/languages/motoko/fundamentals/imports.md): Motoko language documentation - [Implicit parameters](https://docs.internetcomputer.org/languages/motoko/fundamentals/implicit-parameters.md): Motoko language documentation - [Immutable arrays](https://docs.internetcomputer.org/languages/motoko/fundamentals/immutable-arrays.md): Motoko language documentation - [Identifiers](https://docs.internetcomputer.org/languages/motoko/fundamentals/identifiers.md): Motoko language documentation - [Hello, world!](https://docs.internetcomputer.org/languages/motoko/fundamentals/hello-world.md): Motoko language documentation - [Function types](https://docs.internetcomputer.org/languages/motoko/fundamentals/functions.md): Motoko language documentation - [Function declarations](https://docs.internetcomputer.org/languages/motoko/fundamentals/function-declarations.md): Motoko language documentation - [Expression declarations](https://docs.internetcomputer.org/languages/motoko/fundamentals/expression-declarations.md): Motoko language documentation - [Error handling](https://docs.internetcomputer.org/languages/motoko/fundamentals/error-handling.md): Motoko language documentation - [Enhanced multi-migration](https://docs.internetcomputer.org/languages/motoko/fundamentals/enhanced-multi-migration.md): Motoko language documentation - [Defining an actor](https://docs.internetcomputer.org/languages/motoko/fundamentals/defining-an-actor.md): Motoko language documentation - [Data persistence](https://docs.internetcomputer.org/languages/motoko/fundamentals/data-persistence.md): Motoko language documentation - [Contextual dot notation](https://docs.internetcomputer.org/languages/motoko/fundamentals/contextual-dot.md): Motoko language documentation - [Conditionals](https://docs.internetcomputer.org/languages/motoko/fundamentals/conditionals.md): Motoko language documentation - [Verifying upgrade compatibility](https://docs.internetcomputer.org/languages/motoko/fundamentals/compatibility.md): Motoko language documentation - [Comments](https://docs.internetcomputer.org/languages/motoko/fundamentals/comments.md): Motoko language documentation - [Class declarations](https://docs.internetcomputer.org/languages/motoko/fundamentals/class-declarations.md): Motoko language documentation - [Characters & text](https://docs.internetcomputer.org/languages/motoko/fundamentals/characters-text.md): Motoko language documentation - [Block expressions](https://docs.internetcomputer.org/languages/motoko/fundamentals/blocks.md): Motoko language documentation - [Basic control flow](https://docs.internetcomputer.org/languages/motoko/fundamentals/basic-control-flow.md): Motoko language documentation - [Advanced types](https://docs.internetcomputer.org/languages/motoko/fundamentals/advanced-types.md): Motoko language documentation - [Actors & async data](https://docs.internetcomputer.org/languages/motoko/fundamentals/actors-async.md): Motoko language documentation ## Motoko — ICP Features - [Stable Variable Inspection with `--generate-view-queries`](https://docs.internetcomputer.org/languages/motoko/icp-features/view-queries.md): Motoko language documentation - [Timers](https://docs.internetcomputer.org/languages/motoko/icp-features/timers.md): Motoko language documentation - [System functions](https://docs.internetcomputer.org/languages/motoko/icp-features/system-functions.md): Motoko language documentation - [Stable memory and regions](https://docs.internetcomputer.org/languages/motoko/icp-features/stable-memory.md): Motoko language documentation - [Randomness](https://docs.internetcomputer.org/languages/motoko/icp-features/randomness.md): Motoko language documentation - [Candid serialization](https://docs.internetcomputer.org/languages/motoko/icp-features/candid-serialization.md): Motoko language documentation - [Caller identification](https://docs.internetcomputer.org/languages/motoko/icp-features/caller-identification.md): Motoko language documentation ## Motoko — Reference - [Motoko grammar](https://docs.internetcomputer.org/languages/motoko/reference/motoko-grammar.md): Motoko language documentation - [Error code reference](https://docs.internetcomputer.org/languages/motoko/reference/error-codes.md): Motoko language documentation - [Motoko changelog](https://docs.internetcomputer.org/languages/motoko/reference/changelog.md): Motoko language documentation ## Motoko - [Motoko](https://docs.internetcomputer.org/languages/motoko/index.md): A language designed for the Internet Computer with built-in actor model and orthogonal persistence - [Motoko `base` to `core` migration guide](https://docs.internetcomputer.org/languages/motoko/base-core-migration.md): Motoko language documentation ## Rust - [Stable Structures](https://docs.internetcomputer.org/languages/rust/stable-structures.md): Use StableBTreeMap, StableCell, StableLog, StableVec, and MemoryManager for upgrade-safe persistent storage in Rust canisters - [Rust CDK](https://docs.internetcomputer.org/languages/rust/index.md): Build ICP canisters with Rust using the ic-cdk canister development kit - [Testing Rust Canisters](https://docs.internetcomputer.org/languages/rust/testing.md): Unit and integration testing patterns for Rust canisters, including dependency injection, mocking, and PocketIC ## Languages - [Languages & CDKs](https://docs.internetcomputer.org/languages/index.md): Languages and CDKs for building ICP canisters ## Reference - [Management Canister](https://docs.internetcomputer.org/reference/management-canister.md): API reference for the IC management canister (aaaaa-aa): canister lifecycle, signing, randomness, and more - [System Canisters](https://docs.internetcomputer.org/reference/system-canisters.md): NNS canisters, Internet Identity, ICP ledger, and other system-level canisters with canister IDs and interface references - [Protocol Canisters](https://docs.internetcomputer.org/reference/protocol-canisters.md): Bitcoin canister, ckBTC minter, ckETH minter, EVM RPC canister, exchange rate canister, and other protocol-level canisters with their APIs and Candid interfaces - [Application Canisters](https://docs.internetcomputer.org/reference/application-canisters.md): Reference for the asset canister, SNS canisters, LLM canister, and other application-layer canisters with their interfaces and canister IDs - [ICRC Standards](https://docs.internetcomputer.org/reference/icrc-standards.md): Index of all adopted ICRC standards on ICP, grouped by category - [Digital Asset Standards](https://docs.internetcomputer.org/reference/digital-asset-standards.md): ICP's ICRC standards for fungible assets, NFTs, and their extension protocols - [Chain-Key Token Canister IDs](https://docs.internetcomputer.org/reference/chain-key-canister-ids.md): Mainnet and testnet canister IDs for all chain-key tokens: ckBTC, ckETH, ckERC20, ckDOGE, and ckSOL - [Cycles Costs](https://docs.internetcomputer.org/reference/cycles-costs.md): Exact cycle costs for compute, storage, HTTPS outcalls, signing, and canister operations - [Subnet Types Reference](https://docs.internetcomputer.org/reference/subnet-types.md): All subnet types with node counts, replication factors, and cost multipliers - [Execution Errors](https://docs.internetcomputer.org/reference/execution-errors.md): Reference for canister execution errors on ICP: causes, example messages, and how to fix each error. - [IC Interface Specification](https://docs.internetcomputer.org/reference/ic-interface-spec.md): The authoritative formal specification of the Internet Computer's external interfaces: System API, HTTPS interface, certified data, management canister, and abstract behavior - [HTTP Gateway Protocol Specification](https://docs.internetcomputer.org/reference/http-gateway-spec.md): The HTTP Gateway Protocol specification: how HTTP clients interact with the Internet Computer through canister-served HTTP responses - [Candid Type Reference](https://docs.internetcomputer.org/reference/candid-spec.md): Complete reference for all Candid types: syntax, subtyping rules, and Motoko, Rust and JavaScript mappings - [Internet Identity Specification](https://docs.internetcomputer.org/reference/internet-identity-spec.md): The Internet Identity specification: identity design, client authentication protocol, delegation chain, and backend Candid interface - [Glossary](https://docs.internetcomputer.org/reference/glossary.md): Definitions of ICP-specific terms: canister, cycle, principal, subnet, and more - [Reference](https://docs.internetcomputer.org/reference/index.md): Specifications, canister IDs, token standards, cycle costs, and technical reference for ICP - [Developer Tools](https://docs.internetcomputer.org/reference/developer-tools.md): Overview of the ICP developer toolchain: icp-cli, CDKs, JS SDK, PocketIC, and more