{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "site": {
    "url": "https://skills.internetcomputer.org",
    "name": "Internet Computer Skills",
    "description": "A curated database of agent-readable skills for building on the Internet Computer (ICP). Each skill captures correct dependency versions, configuration formats, and common pitfalls that prevent build failures. Maintained by DFINITY."
  },
  "publisher": {
    "name": "DFINITY Foundation",
    "url": "https://dfinity.org"
  },
  "repository": {
    "name": "dfinity/icskills",
    "url": "https://github.com/dfinity/icskills"
  },
  "license": {
    "spdx": "Apache-2.0",
    "url": "https://www.apache.org/licenses/LICENSE-2.0"
  },
  "generated": "2026-04-16T20:13:22.758Z",
  "count": 19,
  "skills": [
    {
      "name": "asset-canister",
      "title": "Asset Canister",
      "category": "Frontend",
      "description": "Deploy frontend assets to the IC. Covers certified assets, SPA routing with .ic-assets.json5, content encoding, and programmatic uploads. Use when hosting a frontend, deploying static files, or setting up SPA routing on IC. Do NOT use for canister-level code patterns or custom domain setup — use custom-domains instead.",
      "license": "Apache-2.0",
      "compatibility": "icp-cli >= 0.2.2, Node.js >= 22",
      "updated": "2026-04-15T22:34:09.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/asset-canister/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/asset-canister/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/asset-canister.json",
        "source": "https://github.com/dfinity/icskills/blob/f805b1a4ac3cdf26832e34fe77564272cafe5d7d/skills/asset-canister/SKILL.md"
      }
    },
    {
      "name": "canhelp",
      "title": "Canister Help",
      "category": "Infrastructure",
      "description": "Display a human-readable summary of a canister's interface given its mainnet canister ID or a human-readable name. Like --help but for canisters. Only for mainnet canisters — for local canisters, read the generated .did file in your project directly.",
      "license": "Apache-2.0",
      "compatibility": "icp-cli >= 0.1.0",
      "updated": "2026-03-30T08:44:49.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/canhelp/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/canhelp/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/canhelp.json",
        "source": "https://github.com/dfinity/icskills/blob/6712dbdbe811292d4bc8c472a922d11fde008145/skills/canhelp/SKILL.md"
      }
    },
    {
      "name": "canister-security",
      "title": "Canister Security",
      "category": "Security",
      "description": "IC-specific security patterns for canister development in Motoko and Rust. Covers access control, anonymous principal rejection, reentrancy prevention (CallerGuard pattern), async safety (saga pattern), callback trap handling, cycle drain protection, and safe upgrade patterns. Use when writing or modifying any canister that modifies state, handles tokens, makes inter-canister calls, or implements access control.",
      "license": "Apache-2.0",
      "compatibility": null,
      "updated": "2026-03-09T13:33:07.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/canister-security/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/canister-security/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/canister-security.json",
        "source": "https://github.com/dfinity/icskills/blob/5fb250fd0022ad033cbfc03fd6da8449424ae526/skills/canister-security/SKILL.md"
      }
    },
    {
      "name": "certified-variables",
      "title": "Certified Variables",
      "category": "Security",
      "description": "Serve cryptographically verified responses from query calls using Merkle trees and subnet BLS signatures. Covers certified data API, RbTree/CertTree construction, witness generation, and frontend certificate validation. Use when query responses need verification, certified data, or response authenticity proofs.",
      "license": "Apache-2.0",
      "compatibility": "icp-cli >= 0.2.2",
      "updated": "2026-03-27T22:12:57.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/certified-variables/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/certified-variables/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/certified-variables.json",
        "source": "https://github.com/dfinity/icskills/blob/3d8cf50f5784d9c5313c32339c806b54ad940448/skills/certified-variables/SKILL.md"
      }
    },
    {
      "name": "ckbtc",
      "title": "ckBTC (chain-key Bitcoin)",
      "category": "DeFi",
      "description": "Accept, send, and manage ckBTC (chain-key Bitcoin). Covers BTC deposit flow via minter, ckBTC transfers, withdrawal to BTC, subaccount derivation, and UTXO management. Use when integrating Bitcoin, ckBTC, BTC deposits, or BTC withdrawals in a canister. Do NOT use for plain token transfers without BTC minting/withdrawal — use icrc-ledger instead.",
      "license": "Apache-2.0",
      "compatibility": "icp-cli >= 0.2.2",
      "updated": "2026-04-15T22:34:09.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/ckbtc/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/ckbtc/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/ckbtc.json",
        "source": "https://github.com/dfinity/icskills/blob/f805b1a4ac3cdf26832e34fe77564272cafe5d7d/skills/ckbtc/SKILL.md"
      }
    },
    {
      "name": "custom-domains",
      "title": "Custom Domains",
      "category": "Frontend",
      "description": "Register and manage custom domains for IC canisters via the HTTP gateway custom domain service. Covers DNS record configuration (CNAME, TXT, ACME challenge), the .well-known/ic-domains file, domain registration/validation/update/deletion via the REST API, TLS certificate provisioning, and HttpAgent host configuration. Use when the user wants to serve a canister under a custom domain, configure DNS for IC, register a domain with boundary nodes, troubleshoot custom domain issues, or update/remove a custom domain. Do NOT use for general frontend hosting or asset canister configuration without custom domains — use asset-canister instead.",
      "license": "Apache-2.0",
      "compatibility": "curl, DNS registrar access, deployed canister",
      "updated": "2026-03-31T08:59:31.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/custom-domains/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/custom-domains/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/custom-domains.json",
        "source": "https://github.com/dfinity/icskills/blob/4782c6f49e30a7b248819c75d058cdbef1f4fa42/skills/custom-domains/SKILL.md"
      }
    },
    {
      "name": "cycles-management",
      "title": "Cycles Management",
      "category": "Infrastructure",
      "description": "Manage cycles and canister lifecycle. Covers cycle balance checks, top-ups, freezing thresholds, canister creation, and ICP-to-cycles conversion via the CMC. Use when working with cycles, canister funding, freezing threshold, frozen canister, out of cycles, top-up, canister creation, or cycle balance. Do NOT use for wallet-to-dApp integration or ICRC signer flows — use wallet-integration instead.",
      "license": "Apache-2.0",
      "compatibility": "icp-cli >= 0.2.2",
      "updated": "2026-03-27T22:12:57.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/cycles-management/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/cycles-management/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/cycles-management.json",
        "source": "https://github.com/dfinity/icskills/blob/3d8cf50f5784d9c5313c32339c806b54ad940448/skills/cycles-management/SKILL.md"
      }
    },
    {
      "name": "evm-rpc",
      "title": "EVM RPC",
      "category": "Integration",
      "description": "Call Ethereum and EVM chains from IC canisters (Rust) via the EVM RPC canister using the evm_rpc_client crate. Covers typed API calls, raw JSON-RPC, multi-provider consensus, ERC-20 reads, and sending pre-signed transactions. Use when calling Ethereum, Arbitrum, Base, Optimism, or any EVM chain from a Rust canister. Do NOT use for generic HTTPS calls to non-EVM APIs — use https-outcalls instead.",
      "license": "Apache-2.0",
      "compatibility": "icp-cli >= 0.2.2",
      "updated": "2026-04-15T22:34:09.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/evm-rpc/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/evm-rpc/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/evm-rpc.json",
        "source": "https://github.com/dfinity/icskills/blob/f805b1a4ac3cdf26832e34fe77564272cafe5d7d/skills/evm-rpc/SKILL.md"
      }
    },
    {
      "name": "https-outcalls",
      "title": "HTTPS Outcalls",
      "category": "Integration",
      "description": "Make HTTPS requests from canisters to external web APIs. Covers transform functions for consensus, cycle cost management, response size limits, and idempotency patterns. Use when a canister needs to call an external API, fetch data from the web, or make HTTP requests. Do NOT use for EVM/Ethereum calls — use evm-rpc instead.",
      "license": "Apache-2.0",
      "compatibility": "icp-cli >= 0.2.2",
      "updated": "2026-03-27T22:12:57.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/https-outcalls/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/https-outcalls/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/https-outcalls.json",
        "source": "https://github.com/dfinity/icskills/blob/3d8cf50f5784d9c5313c32339c806b54ad940448/skills/https-outcalls/SKILL.md"
      }
    },
    {
      "name": "ic-dashboard",
      "title": "IC Dashboard APIs",
      "category": "Integration",
      "description": "Query the public REST APIs that power dashboard.internetcomputer.org. Covers canister metadata, ICRC ledger data, SNS data, ICP ledger, and network metrics with cursor-based pagination. Use when fetching canister info, token data, SNS proposals, or network stats via HTTP from off-chain code. No canister deployment or cycles needed.",
      "license": "Apache-2.0",
      "compatibility": null,
      "updated": "2026-03-10T16:37:23.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/ic-dashboard/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/ic-dashboard/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/ic-dashboard.json",
        "source": "https://github.com/dfinity/icskills/blob/43ad111629c156d8b2960c36a1d83a93a3f4c790/skills/ic-dashboard/SKILL.md"
      }
    },
    {
      "name": "icp-cli",
      "title": "ICP CLI",
      "category": "Infrastructure",
      "description": "Guides use of the icp command-line tool for building and deploying Internet Computer applications. Covers project configuration (icp.yaml), recipes, environments, canister lifecycle, and identity management. Use when building, deploying, or managing any IC project. Use when the user mentions icp, dfx, canister deployment, local network, or project setup. Do NOT use for canister-level programming patterns like access control, inter-canister calls, or stable memory — use domain-specific skills instead.",
      "license": "Apache-2.0",
      "compatibility": null,
      "updated": "2026-04-14T16:30:00.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/icp-cli/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/icp-cli/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/icp-cli.json",
        "source": "https://github.com/dfinity/icskills/blob/5ae79b9e6681fd2902151a29296a59ccf8abd61f/skills/icp-cli/SKILL.md"
      }
    },
    {
      "name": "icrc-ledger",
      "title": "ICRC Token Ledgers",
      "category": "DeFi",
      "description": "Deploy and interact with ICRC-1/ICRC-2 token ledgers (ICP, ckBTC, ckETH). Covers transfers, balances, approve/transferFrom allowances, fee handling, and ledger deployment. Use when working with ICP transfers, token transfers, balances, ICRC-1, ICRC-2, approve, allowance, or any fungible token on IC. Do NOT use for ckBTC minting or BTC deposit/withdrawal flows — use ckbtc instead.",
      "license": "Apache-2.0",
      "compatibility": "icp-cli >= 0.2.2",
      "updated": "2026-04-15T22:34:09.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/icrc-ledger/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/icrc-ledger/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/icrc-ledger.json",
        "source": "https://github.com/dfinity/icskills/blob/f805b1a4ac3cdf26832e34fe77564272cafe5d7d/skills/icrc-ledger/SKILL.md"
      }
    },
    {
      "name": "internet-identity",
      "title": "Internet Identity",
      "category": "Auth",
      "description": "Integrate Internet Identity authentication. Covers passkey and OpenID login flows, delegation handling, and principal-per-app isolation. Use when adding login, sign-in, auth, passkeys, or Internet Identity to a frontend or canister. Do NOT use for wallet integration or ICRC signer flows — use wallet-integration instead.",
      "license": "Apache-2.0",
      "compatibility": "icp-cli >= 0.2.2, Node.js >= 22",
      "updated": "2026-04-15T22:34:09.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/internet-identity/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/internet-identity/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/internet-identity.json",
        "source": "https://github.com/dfinity/icskills/blob/f805b1a4ac3cdf26832e34fe77564272cafe5d7d/skills/internet-identity/SKILL.md"
      }
    },
    {
      "name": "motoko",
      "title": "Motoko Language",
      "category": "Core",
      "description": "Motoko language pitfalls and modern syntax for the Internet Computer. Covers persistent actor requirements, stable types, mo:core standard library, type system rules, and common compilation errors. Use when writing Motoko canister code, fixing Motoko compiler errors, or generating Motoko actors. Do NOT use for deployment, icp.yaml config, or CLI commands — use icp-cli instead. Do NOT use for upgrade persistence patterns — use stable-memory instead.",
      "license": "Apache-2.0",
      "compatibility": "moc >= 1.0.0, mops with core >= 2.0.0",
      "updated": "2026-04-15T22:34:09.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/motoko/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/motoko/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/motoko.json",
        "source": "https://github.com/dfinity/icskills/blob/f805b1a4ac3cdf26832e34fe77564272cafe5d7d/skills/motoko/SKILL.md"
      }
    },
    {
      "name": "multi-canister",
      "title": "Multi-Canister Architecture",
      "category": "Core",
      "description": "Design and deploy multi-canister dapps. Covers inter-canister calls, canister factory pattern, async messaging pitfalls, bounded vs unbounded wait, and 2MB payload limits. Use when splitting an app across canisters, making inter-canister or cross-canister calls, or designing canister-to-canister communication. Do NOT use for single-canister apps.",
      "license": "Apache-2.0",
      "compatibility": "icp-cli >= 0.2.2",
      "updated": "2026-04-15T22:34:09.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/multi-canister/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/multi-canister/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/multi-canister.json",
        "source": "https://github.com/dfinity/icskills/blob/f805b1a4ac3cdf26832e34fe77564272cafe5d7d/skills/multi-canister/SKILL.md"
      }
    },
    {
      "name": "sns-launch",
      "title": "SNS DAO Launch",
      "category": "Governance",
      "description": "Configure and launch an SNS DAO to decentralize a dapp. Covers token economics, governance parameters, testflight validation, NNS proposal submission, and decentralization swap. Use when launching an SNS, configuring tokenomics, or setting up DAO governance for a dapp. Do NOT use for NNS governance or general canister management.",
      "license": "Apache-2.0",
      "compatibility": "icp-cli >= 0.2.2, dfx with sns extension",
      "updated": "2026-03-27T22:12:57.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/sns-launch/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/sns-launch/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/sns-launch.json",
        "source": "https://github.com/dfinity/icskills/blob/3d8cf50f5784d9c5313c32339c806b54ad940448/skills/sns-launch/SKILL.md"
      }
    },
    {
      "name": "stable-memory",
      "title": "Stable Memory & Upgrades",
      "category": "Core",
      "description": "Persist canister state across upgrades. Covers StableBTreeMap and MemoryManager in Rust, persistent actor in Motoko, and upgrade hook patterns. Use when dealing with canister upgrades, data persistence, data lost after upgrade, stable storage, StableBTreeMap, pre_upgrade traps, or heap vs stable memory. Do NOT use for inter-canister calls or access control — use multi-canister or canister-security instead.",
      "license": "Apache-2.0",
      "compatibility": "icp-cli >= 0.2.2",
      "updated": "2026-04-15T22:34:09.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/stable-memory/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/stable-memory/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/stable-memory.json",
        "source": "https://github.com/dfinity/icskills/blob/f805b1a4ac3cdf26832e34fe77564272cafe5d7d/skills/stable-memory/SKILL.md"
      }
    },
    {
      "name": "vetkd",
      "title": "vetKeys",
      "category": "Security",
      "description": "Implement on-chain encryption using vetKeys (verifiable encrypted threshold key derivation). Covers key derivation, IBE encryption/decryption, transport keys, and access control. Use when adding encryption, decryption, on-chain privacy, vetKeys, or identity-based encryption to a canister. Do NOT use for authentication — use internet-identity instead.",
      "license": "Apache-2.0",
      "compatibility": "icp-cli >= 0.2.2",
      "updated": "2026-03-27T22:12:57.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/vetkd/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/vetkd/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/vetkd.json",
        "source": "https://github.com/dfinity/icskills/blob/3d8cf50f5784d9c5313c32339c806b54ad940448/skills/vetkd/SKILL.md"
      }
    },
    {
      "name": "wallet-integration",
      "title": "Wallet Integration",
      "category": "DeFi",
      "description": "Integrate wallets with IC dApps using ICRC signer standards (ICRC-21/25/27/29/49). Covers the popup-based signer model, consent messages, permission lifecycle, and transaction approval flows. Implementation uses @dfinity/oisy-wallet-signer. Do NOT use for Internet Identity login, delegation-based auth (ICRC-34/46), or threshold signing (chain-key). Use when the developer mentions wallet integration, OISY, oisy-wallet-signer, wallet signer, relying party, consent messages, wallet popup, or transaction approval.",
      "license": "Apache-2.0",
      "compatibility": "Node.js >= 22",
      "updated": "2026-04-15T22:34:09.000Z",
      "urls": {
        "html": "https://skills.internetcomputer.org/skills/wallet-integration/",
        "markdown": "https://skills.internetcomputer.org/.well-known/skills/wallet-integration/SKILL.md",
        "json": "https://skills.internetcomputer.org/api/skills/wallet-integration.json",
        "source": "https://github.com/dfinity/icskills/blob/f805b1a4ac3cdf26832e34fe77564272cafe5d7d/skills/wallet-integration/SKILL.md"
      }
    }
  ]
}
