PartyLayerDocs
Try Demo

Introduction

PartyLayer is an open-source SDK for integrating Canton Network wallets into your dApp. It provides a unified interface across every Canton wallet, registry-backed, verified, and type-safe, so you can focus on building your application, not wrestling with wallet APIs.

Coming from Ethereum? wagmi for Canton maps the hooks you already know onto these, and is blunt about the places the analogy breaks.

Transfers follow Canton's Token Standard (CIP-56), the current protocol for Amulet and other token transfers. See the Token Transfers guide for the full flow.

💡 Zero-Config React
With PartyLayerKit and ConnectButton, you can add full wallet connectivity to a React app in under 10 lines of code.

Key Features

Zero-Config React
PartyLayerKit + ConnectButton for instant wallet integration. No boilerplate needed.
CIP-0103 Compliant
Full implementation of the Canton dApp Standard: 10 methods, 4 events, typed errors.
Multi-Wallet
Console, Loop, Cantor8, and Nightly auto-registered. Send is discovered via the CIP-0103 announce path. Bron available for enterprise.
Registry Discovery
Verified wallets fetched from the PartyLayer registry with signature verification.
Type-Safe
Branded types, strict TypeScript, and 14 typed error classes with stable error codes.
Themes & Customization
Light, dark, and auto themes. Full theme customization with PartyLayerTheme.

Why PartyLayer?

Without PartyLayer, integrating wallets on Canton means handling each wallet's proprietary API, managing CIP-0103 compliance, building your own connection UI, and handling errors across different transport layers (PostMessage, deep links, QR codes, injected providers).

With PartyLayer, you get a single, consistent interface that works with every Canton wallet. The SDK handles registry discovery, adapter negotiation, session management, and provides ready-to-use React components, all with TypeScript types and meaningful error messages.

Before PartyLayer

tsx
// Manual wallet integration, per wallet
const consoleWallet = await window.canton.console.request({ method: 'connect' });
const loopWallet = await connectViaQR('loop', { ... });
const nightlyWallet = window.nightly?.canton?.connect();
// Different APIs, different error handling, different UX...

With PartyLayer

tsx
import { PartyLayerKit, ConnectButton } from '@partylayer/react';

function App() {
  return (
    <PartyLayerKit network="mainnet" appName="My dApp">
      <ConnectButton />
    </PartyLayerKit>
  );
}

Packages

  • @partylayer/sdk, Core SDK with createPartyLayer, client, adapters, and events
  • @partylayer/react, React hooks (useSession, useConnect, ...) and components (PartyLayerKit, ConnectButton, WalletModal)
  • @partylayer/core, Shared types, errors, and CIP-0103 type definitions
  • @partylayer/provider, CIP-0103 native Provider implementation and bridge

Getting Started

Ready to integrate? Head to the Installation guide to set up PartyLayer, or jump straight to the Quick Start for a complete working example.

NextInstallation