@sigilry/dapp
Core provider, RPC client and server, message schemas, and transports. Usage
Sigilry is a CIP-103 compliant dApp connectivity library for Canton Network. It implements the CIP-103 dApp API as a typed JSON-RPC client/server pair, ships generated Zod schemas for runtime validation, and exposes React Query hooks for fast integration.
Install the stable SDK with yarn add @sigilry/dapp@^3 @sigilry/react@^3. Building with Send Connect? Start with testnet connection, message verification, and holdings queries.
Sigilry is built and maintained by Send and used in production by Send’s Canton Network dApps.
@sigilry/dapp
Core provider, RPC client and server, message schemas, and transports. Usage
@sigilry/react
React Query powered hooks and CantonReactProvider. Usage
@sigilry/cli
CLI and programmatic API for generating TypeScript types from DAML DARs. Usage
@sigilry/canton-json-api
Generated Canton JSON API v2 types and Zod schemas for typed ledger endpoint contracts. Usage
Start with the Demo App before package internals. It shows the full flow in one place:
TodoList factory + TodoItem contracts)window.canton providertxChanged updates after approvalsFastest way to run it from the repo root:
nix developyarn installyarn --cwd examples/demo-app devChoose your starting path:
The wallet extension injects a CIP-103 provider at window.canton. The provider object follows the
EIP-1193 shape that CIP-103 itself specifies (request / on / removeListener), routes calls through
typed JSON-RPC method names from the CIP-103 OpenRPC schema, and emits the full CIP-103 §4.2.2 push-event
surface (accountsChanged, txChanged, statusChanged, connected) to signal wallet, ledger, and
session/network state changes. Methods with void params omit the params field. See
CIP-103 Conformance for the per-method conformance table, and the
@sigilry/dapp and @sigilry/react pages for the full contract.
Use sigilry init to create sigilry.config.ts, then run sigilry codegen to generate TypeScript types.
The CLI requires the DAML SDK so dpm is available, and it wraps dpm codegen-alpha-typescript under the
hood. See the @sigilry/cli page for the full configuration reference.
import "@sigilry/dapp/browser-globals";
export async function connectAndListAccounts() { if (!window.canton) { throw new Error("Canton provider not available"); }
const status = await window.canton.request({ method: "status" }); if (!status.connection.isConnected) { await window.canton.request({ method: "connect" }); }
const accounts = await window.canton.request({ method: "listAccounts" }); console.log("Accounts:", accounts); return accounts;}ledgerApi requests map directly to Daml JSON Ledger API v2 endpoints. Hooks like useLedgerApi and
useActiveContracts call /v2/state/ledger-end and /v2/state/active-contracts to resolve the current
offset and fetch active contracts.
import "@sigilry/dapp/browser-globals";
if (!window.canton) throw new Error("Canton provider not available");
const ledgerEnd = await window.canton.request({ method: "ledgerApi", params: { requestMethod: "get", resource: "/v2/state/ledger-end", },});console.log(ledgerEnd);dApp UI -> window.canton (CIP-103 provider; EIP-1193 object shape) -> JSON-RPC (CIP-103 OpenRPC schema + Zod validation) -> WindowTransport (postMessage) -> Wallet extension (RPC server) -> Canton Ledger API / DAMLllms.txt is a concise index; llms-full.txt contains every page..md to its URL, request it with Accept: text/markdown, or follow its <link rel="alternate" type="text/markdown">.