Send, receive, lock, refund, issue, replay, prove, or settle.
Kaspa builder guide.
Kaspa builders should start with the user action: a payment, vault rule, asset rule, market, proof, or later app-to-app flow. Then choose the simplest state model that can support it.
Build rule: start with the smallest working path. Mainnet status still comes from activation, releases, and working applications.
Need terminal commands first? Open Kaspa Command Line From Zero.
Payment path, app receipt, covenant rule, based app, proof, or later app program.
Accepted txid, app receipt, state output, replay row, source, or release record.
Mainnet activation, wallet support, liquidity, audit, indexer, oracle, or production custody.
Status-sensitive page. Last checked: May 15, 2026. Use current status before quoting Toccata, vProgs, DAGKnight, KRC, native DeFi, or finality claims.
Build like a verification path.
A repeatable Kaspa example starts with the user action, submits or inspects a transaction, replays the result, and labels the evidence class before making a bigger claim.
A user sends tKAS or attaches app data, then the page links the accepted txid and explains what changed.
A cap, destination, required controller input, refund, or timeout is visible before the artifact details.
Do not lead with internal mechanism names unless the reader already knows what problem they solve.
Start with state and proofs.
| Question | Use this path | Simpler path |
|---|---|---|
| Many users touch the same app state at the same time. | Start with based apps or vProgs-compatible runtime work. | Start with covenants and L1 state outputs. |
| The product splits cleanly into independent states. | Covenants can still work for each separate state. | Shared-state app architecture becomes more natural. |
| Each action needs its own proof, privacy check, or custom validity rule. | Consider inline ZK, but expect more proof and operations work. | Use covenants or based apps first. |
| The proof depends on another chain, an oracle, a price, or a real-world event. | Name the anchor first: source root, finality certificate, accumulated-work view, oracle, reporter set, or challenge process. | The proof can stay inside the app's own state rules. |
| The app needs synchronous composition with other independent apps. | That is the future full-vProgs direction, especially if several app states must succeed or fail as one operation. | Build the narrow app first. Toccata-era apps can coordinate through L1 proofs and sequencing without claiming full atomic composition. |
Match app model to state model.
Covenants are for constrained spend rules: vaults, treasury controls, escrow-like flows, unlock conditions, issuance policy, and small UTXO state machines. One protected state advances one valid step at a time.
Based apps are for richer app state anchored to Kaspa ordering: balances, orders, packs, risk rows, task states, or market state. They can start with deterministic replay over accepted transactions and add ZK only when proof-verified execution, privacy, or trust-minimized bridge logic becomes the product boundary.
Inline ZK is for actions that need their own proof before settlement. Full vProgs are the later app-to-app composition direction, where independent apps can read or call one another in one combined outcome.
Say what the example buys the user.
A builder example should not stop at "the script compiled" or "the txid was accepted." Say the practical job: a budget that cannot be drained at once, an asset that moves only under a controller rule, a game turn that cannot get stuck forever, a payout that can be replayed, or a group payment that refunds if the condition fails.
Use this order before showing artifacts: what landed on TN12, what the reader can click or repeat, what the repo replayed from accepted rows, which rule is script-enforced versus replay-derived or wallet policy, and what remains missing before a real product claim.
Then keep the boundary honest. If the rule is script-enforced, name the script path. If it is wallet policy, planner state, replay-derived state, or testnet-only evidence, say that. The useful implication is strongest when the reader can see both the accepted path and the rejected path.
Use the same template for every covenant example: user job, spend rule, accepted path, rejected path, wallet review field, and remaining blocker. Say "budget that cannot drain at once," "step-by-step workflow," or "asset that needs its controller" before naming the mechanism.
For the public application framing, see what TN12 covenant tests are teaching. For the current testnet examples, open the TN12 experiment map.
Map product ideas to a path.
Pick the smallest path that matches the product. Most first builds should be a wallet/payment path, a covenant-shaped rule, or a narrow based app.
Open product-path table
| Product shape | Likely starting path | Why |
|---|---|---|
| Vault, treasury, inheritance, recovery, escrow | Covenants | The product is mostly about who can move funds and how stateful outputs evolve. |
| Native asset issuance or transfer policy | Covenants | The app logic is asset-native and can often stay close to L1 output rules. |
| Trading venue, game economy, shared balance app | Based app | Many users need to update the same app record without waiting for one UTXO path to move first. |
| Private action, custom validity check, proof-gated workflow | Inline ZK | The proof is part of every action, so verification becomes the product boundary. |
| Composable app network with calls across independent apps | Full vProgs later | The need is app-to-app synchronous composition, which belongs to the longer architecture target. |
Use the new BUIDL path as the practical start.
Kaspa.org now gives builders a cleaner first mile: try the SDK in-browser, pick an app or infrastructure path, then decide when public access is enough and when you need your own node.
Open builder runway table
| Builder question | Start here | When to go deeper |
|---|---|---|
| I want to read chain data from a web app. | Use the Rusty Kaspa WASM browser examples and Public Node Network docs. | Run your own node or resolver path when reliability, privacy, or scale matters. |
| I want a wallet, payment, or transaction flow. | Start with the WASM SDK docs and upstream examples. | Move into native Rust or full-node RPC when signing, UTXO handling, or indexing becomes product-critical. |
| I want quick backend reads. | Use the community REST API or the Kaspa Developer Platform for prototypes and constrained environments. | Treat hosted APIs as dependencies. Production apps should plan node/indexer ownership, provider redundancy, or both. |
| I want infrastructure or analytics. | Use Rusty Kaspa, Docker, DB dumps, indexer projects, and node-hosting tools. | Decide whether you need live consensus access, historical query speed, or both. |
| I want covenants or app programmability. | Follow Toccata, TN12, Silverscript, KIPs, and vProgs references. | Keep TN12/testnet demos separate from mainnet claims until activation evidence changes. |
Kaspa.org Build, the official getting-started docs, the community REST API docs, and the Kaspa Developer Platform docs are normal first references. Keep hosted APIs as prototype infrastructure until reliability, privacy, and scale requirements are clear.
Public tools to track.
Start with official docs and examples. Open the full tool list only when you need a concrete implementation reference.
Open builder tool links
Official Kaspa docs
Builder docs for choosing between programmability routes, connecting over RPC, wallet flows, transaction payloads, accepted-transaction listeners, and running node infrastructure.
Getting started
JavaScript, Rust, and Python examples for installing SDKs, connecting to a node over RPC, and reading live DAG data.
Programmability overview
Decision path for covenants, based apps, inline ZK, and future full vProgs. Useful for builder routing; still verify activation status before making product claims.
Silverscript
Higher-level covenant tooling and examples for state transitions. Useful for learning the covenant direction; tooling and deployment workflows are still early.
vProgs repo
Early Rust framework work around based computation, scheduler/runtime/storage layers, L1 bridge concepts, and ZK proving components.
Python SDK
Standalone Python SDK with v1.1.0 release evidence for GetVirtualChainFromBlockV2 and UtxoProcessor/UtxoContext bindings.
WASM SDK
Browser and Node.js bindings from Rusty Kaspa for wallet flows, transactions, RPC access, and live browser examples.
Rusty Kaspa release
The released node and native Rust crates are the main path for full nodes, RPC, wallet internals, indexing, and node-adjacent services.
TxIndex
Open PR for optional transaction-history indexing and GetTransaction RPC support. Relevant for wallets, explorers, and app infrastructure if merged and released.
KRC ecosystem tooling
KRC20/KRC721-aware wallets, indexers, and APIs can support issued tokens, NFT-style passes, coupons, event credits, and collectibles today. Required deploy/mint gas fees are miner fees, but interfaces may charge separately. Treat KRC as ecosystem-token tooling, separate from Toccata covenants, native assets, and future vProgs.
KasSigner / KasSee
Open-source air-gapped signing and watch-only wallet work by InKasWeRust. Useful for studying wallet signing, PSKB/KSPT handoff, address verification, UTXO selection, and multisig wallet conventions.
Treat it as experimental wallet tooling, not protocol activation evidence or a recommendation to store large funds.
Useful builder surfaces.
Most builders only need one or two of these at a time. Keep the rest as a reference drawer.
Open infrastructure links
Public Node Network
Community-operated node pool fronted by the Kaspa Resolver. Useful for demos and light reads; not a replacement for production infrastructure.
Community REST API
Lightweight hosted API for constrained environments and quick reads. Treat it as best-effort with no SLA.
Kaspa Developer Platform
Hosted API-key path for address history, transaction acceptance, block ranges by blue/DAA score, KRC20 token data, and node RPC proxy access.
Useful for dashboards, exchange/wallet integrations, prototypes, and second-source checks. Amounts arrive as sompi strings, timestamps are Unix milliseconds, hashes are 64-character hex strings, and large lists use pagination.
Production systems still need a node/indexer plan, rate-limit handling, provider-failure behavior, secure API-key storage, and precision-safe amount math.
Transaction payloads
Official guide for attaching application data to standard Kaspa transactions within mempool mass limits. Useful for receipts, tags, and lightweight app data.
Accepted transactions
Official guide for polling or subscribing to accepted transactions, including payload-aware reads and reorg handling near active DAG tips.
Docker node
Rusty Kaspa Docker images are useful for local node setup. Persistent production nodes still need explicit storage, networking, and operations choices.
Explorer data dumps
Explorer/API database dumps can help analytics, indexing, and historical-data work when an app does not need live consensus access.
DAG visualizer
A live way to inspect blockDAG behavior and help users see that parallel blocks are ordered instead of discarded.
DeepWiki
Generated Rusty Kaspa code navigation can help orientation, but code, releases, and docs remain the source of truth.
Ecosystem projects to inspect.
Use these as references after choosing a build path. They should not be the first thing a new reader has to parse.
Open ecosystem project links
Simply Kaspa Indexer
Standalone indexing project for Kaspa block and transaction data.
DNS Seeder
Bootstrapping infrastructure for the Kaspa peer-to-peer network.
kHost
Tooling for running and contributing node capacity to the wider ecosystem.
kaspa-js
Community-maintained JavaScript tooling around the Kaspa stack. Review current maintenance and fit before production use.
What helps before prototyping.
Use TN12 when you need testnet covenant practice. Keep this as setup detail, not the public explanation of Kaspa.
Open TN12 setup table
| Need | Practical path | Status boundary |
|---|---|---|
| Generate a test address | Use SDK or wallet tooling that produces a `kaspatest:` address, then paste that exact address into the TN12 faucet. | Testnet funds only. Do not reuse test keys for mainnet. |
| Get TN12 faucet tokens | Use the browser faucet at `faucet-tn12.kaspanet.io`. Automation may fail behind browser checks, so manual browser use is normal. | Faucet limits and availability can change. |
| Run a local TN12 node | Build or use a TN12-capable `rusty-kaspa` branch and start `kaspad --testnet --netsuffix=12 --utxoindex` with local RPC listeners. | Do not assume a generic stable mainnet binary supports every active TN12 setting. |
| Check balances locally | Query local wRPC JSON, often `127.0.0.1:18210`, after the node is synced and UTXO index is enabled. | Unsynced nodes can return misleading zero balances. |
| Move from mockup to app | Separate UI policy design from real Silverscript compilation, signing, transaction construction, broadcast, and explorer-visible outputs. | A simulator is not an enforced covenant until TN12 transactions prove it. |
| Prove a stateful covenant | Check compile output, local state transitions, signature-script wiring, continuation outputs, and the submit route before broadcasting. | Funding a script output is not the same as proving a valid state transition. |
| Reuse TN12 lab lessons | Start with accepted tx evidence, exact wallet review fields, endpoint details, and rollback-aware indexing. | Use testnet lessons as builder practice; keep mainnet status sourced separately. |
Mainnet builders should use the released mainnet node and normal `kaspa:` addresses. TN12 builders should label every address, token, and transaction as testnet-only.
Prove the state change.
After submit, fetch accepted state and compare the exact result to the thing the app claims happened.
Open verification checklist
| Builder habit | Why it matters | Practical check |
|---|---|---|
| Fetch accepted state after submit | Local construction does not prove accepted app state. | Record `is_accepted`, accepting block data, output script type, address, and amount. |
| Pin the submit surface | REST, JSON wRPC, Borsh wRPC, SDK versions, and testnet branches can expose different transaction shapes. | Log SDK version, node version, network id, endpoint, encoding, tx version, and input budget fields. |
| Compare with a known working spend | Witness order, signature preimage, redeem-script shape, and constructor keys are easier to check against a sibling transaction that already worked. | Diff the failing path against an accepted release, refund, or simple payment path before blaming protocol rules. |
| Label failed attempts narrowly | Tooling failures and consensus failures need different labels. | Keep the artifact, but mark it as bad config, stale tooling, submit mismatch, or confirmed consensus rejection. |
Testnet lesson: teach the verification habit without turning one prototype into a mainnet claim.
Say the stage first.
- Covenants: nearer L1 state-output path for constrained asset and UTXO-state rules.
- Based apps: app-specific state anchored to Kaspa ordering, commitments, proofs, settlement, or exits.
- Inline ZK: specialized proof path for actions whose validity or privacy proof is the product boundary.
- External anchors: ZK can check a statement about chosen inputs; builders must still define how source-chain roots, prices, events, or attestations become trusted inputs.
- Based-zk apps: based apps that add proof-verified execution or bridge logic when deterministic replay is not enough.
- Full vProgs: future app-to-app atomic composition direction, beyond standalone based-app construction.
- KRC standards: ecosystem token and NFT-style tooling available today through indexed data and wallet support, not native smart-contract activation.
Use the positive stage first. Add caveats only where a reader might confuse builder work with live mainnet functionality.
Builder references.
- Izio's Kaspa programmability overview for the builder decision tree: covenants, based apps, inline ZK, and future full vProgs.
- Izio on Covenants for sequential protected-output state, covenant IDs, and the current Silverscript builder reference.
- Izio on Based Apps for shared-state app architecture and Rust app logic in a managed environment.
- Izio on Inline ZK for per-action proofs and proof-driven settlement.
- Izio on Full vProgs for future app-to-app synchronous composition.
- rusty-kaspa TN12 branch, Silverscript, and TN12 faucet for testnet covenant prototyping context. Treat these as testnet builder tools, not mainnet activation evidence.
- Kaspa.org Build for the current developer resource index: Rusty Kaspa, WASM SDK, public node access, REST API, Docker, DB dumps, testnet, KIPs, Silverscript, vProgs, community infra, and R&D links.
- Kaspa Developer Platform docs for hosted address history, transaction acceptance, block-range, KRC20, and node RPC proxy APIs. Treat it as hosted infrastructure, not protocol-status authority.
- Kaspa docs, especially Getting started, Programmability, Transaction payload, Accepted transactions, and Kaspa node, for current builder workflow guidance.
- Aspectron RpcClient docs and Aspectron transaction signing guide for the JavaScript SDK request shape used by current builder examples.
- KasSigner and KasSee for experimental external-signer and watch-only wallet references. Use them for wallet UX and signing-boundary research, not shipped protocol status.
- Kaspa Explained status and source hierarchy for live/targeted/roadmap/research boundaries.