Integrate once. Ship to fifty chains.
Five steps from empty project to a cross-chain read and write. Use the TypeScript SDK or the
signed HTTPS API — both feed the same Core Engine. Prefer to run it yourself? The whole stack
comes up with npm run docker:up.
- 1
Install the SDK
Add the TypeScript SDK to your project. It talks to the same Core Engine as the REST API, so anything you can do over HTTPS you can do from code.
npm install @switchboard/sdk # or self-host the whole stack: git clone https://github.com/cryptuon/switchboard cd switchboard && npm run docker:up # Customer API on :3000, Core Engine on :3001 - 2
Authenticate
Create a client with your API key. The Customer API gateway handles auth, rate limiting, and request proxying; you never talk to chains directly.
import { Switchboard } from '@switchboard/sdk'; const sb = new Switchboard({ apiKey: process.env.SWITCHBOARD_API_KEY, // point at the managed gateway, or your own :3000 when self-hosting endpoint: 'https://switchboard.cryptuon.com', }); - 3
Read cross-chain state
Issue one read against the coordinator’s finality clock. The same call covers every supported chain — adding a chain does not add integration code.
// Read canonical state from any supported chain through one call. const state = await sb.read({ chain: 'ethereum', contract: '0xA0b8…9F21', key: 'totalLiquidity', }); console.log(state.value, state.finalizedAt); - 4
Write across chains
Commit once to the Solana coordinator and fan out to every destination. A competing relayer pool races each destination transaction inside the 400ms budget.
// Commit once, ship to many — p99 under 400ms. const receipt = await sb.write({ from: 'ethereum', to: ['solana', 'arbitrum', 'base', 'sui'], payload: order, // arbitrary opaque bytes verifier: 'auto', // light-client / BLS / zk per chain finalityPolicy: 'fail-closed', // fail-open | fail-closed | fallback }); console.log(receipt.routeId, receipt.p99Ms); - 5
Deploy and observe
Ship it. On the managed service you get relayer ops, signing infrastructure, and observability out of the box; self-hosted, you run relayers and configure signers yourself.
# managed: nothing more to run — the gateway is live. # self-hosted: bring up both services and point at your DB DATABASE_TYPE=postgresql npm run docker:up # then watch route p50/p99 per chain in the observability stack
Want the full picture first?
Read the architecture deep dive for the message lifecycle and verifier model, browse use cases, or skim the FAQ.