| name | vultisig-sdk |
| description | TypeScript SDK for MPC wallet integration across 36+ blockchains. Create wallets, import from seedphrase, sign transactions, execute swaps, scan for security threats, and more. Supports Bitcoin, Ethereum, Solana, and 33+ other chains with threshold signing security. |
| version | 1.0.0 |
| author | Vultisig |
| repository | https://github.com/vultisig/vultisig-sdk |
| metadata | {"openclaw":{"emoji":"🛡️","homepage":"https://github.com/vultisig/vultisig-sdk","requires":{"bins":["node","npm"]},"install":{"npm":"@vultisig/sdk"}}} |
| tags | ["crypto","wallet","mpc","typescript","sdk","defi","bitcoin","ethereum","solana"] |
Vultisig SDK
TypeScript SDK for Vultisig MPC wallet operations. See the router skill for an overview of MPC benefits and to choose between CLI and SDK.
Installation
npm install @vultisig/sdk
yarn add @vultisig/sdk
Requirements:
- Node.js 20+
- TypeScript (recommended)
- Platforms: Node.js, Browser (with WASM), React Native, Electron
Quick Start
import { Vultisig, Chain } from '@vultisig/sdk'
const sdk = new Vultisig({
onPasswordRequired: async (vaultId, vaultName) => {
return process.env.VAULT_PASSWORD || ''
},
passwordCache: { defaultTTL: 300000 }
})
await sdk.initialize()
const vaultId = await sdk.createFastVault({
name: 'agent-wallet',
email: 'agent@example.com',
password: 'SecurePassword123!'
})
const vault = await sdk.verifyVault(vaultId, 'verification-code')
const address = await vault.address(Chain.Ethereum)
console.log('ETH address:', address)
const balance = await vault.balance(Chain.Ethereum)
console.log(`Balance: ${balance.amount} ${balance.symbol}`)
sdk.dispose()
Vault Types
| Type | Threshold | Signing | Best For |
|---|
| FastVault | 2-of-2 (device + server) | Instant | AI agents, automation |
| SecureVault | N-of-M (configurable) | Multi-device coordination | Teams, high security |
For AI agents, FastVault is recommended - instant signing without coordination.
Core Classes
Vultisig (Main Entry Point)
const sdk = new Vultisig({
storage?: Storage,
defaultChains?: Chain[],
defaultCurrency?: string,
onPasswordRequired?: (id, name) => Promise<string>,
passwordCache?: { defaultTTL: number }
})
await sdk.initialize()
sdk.dispose()
const vaultId = await sdk.createFastVault({ name, email, password })
const vault = await sdk.verifyVault(vaultId, code)
const { vault } = await sdk.createSecureVault({ name, devices, threshold })
const vaults = await sdk.listVaults()
const vault = await sdk.getActiveVault()
await sdk.setActiveVault(vault)
await sdk.deleteVault(vault)
const vault = await sdk.importVault(vultContent, password)
const isEncrypted = sdk.isVaultEncrypted(vultContent)
await sdk.validateSeedphrase(mnemonic)
await sdk.discoverChainsFromSeedphrase(mnemonic, chains?, onProgress?)
await sdk.createFastVaultFromSeedphrase({ mnemonic, name, email, password })
await sdk.notifications.registerDevice({ vaultId, partyName, token, deviceType })
await sdk.notifications.notifyVaultMembers({ vaultId, vaultName, localPartyId, qrCodeData })
const unsub = sdk.notifications.onSigningRequest((notification) => { })
sdk.notifications.handleIncomingPush(rawPushData)
VaultBase (Shared Vault Methods)
vault.id: string
vault.name: string
vault.type: 'fast' | 'secure'
vault.isEncrypted: boolean
const address = await vault.address(Chain.Bitcoin)
const addresses = await vault.addresses([Chain.Bitcoin, Chain.Ethereum])
const balance = await vault.balance(Chain.Ethereum)
const balances = await vault.balances()
await vault.updateBalance(Chain.Ethereum)
const payload = await vault.prepareSendTx({ coin, receiver, amount })
const signature = await vault.sign(payload)
const txHash = await vault.broadcastTx({ chain, keysignPayload: payload, signature })
const quote = await vault.getSwapQuote({ fromCoin, toCoin, amount })
const { keysignPayload } = await vault.prepareSwapTx({ fromCoin, toCoin, amount, swapQuote })
await vault.addChain(Chain.Solana)
await vault.removeChain(Chain.Litecoin)
await vault.rename('New Name')
const { filename, data } = await vault.export(password)
Chain Enum
import { Chain } from '@vultisig/sdk'
Chain.Ethereum, Chain.Polygon, Chain.BSC, Chain.Arbitrum, Chain.Optimism,
Chain.Base, Chain.Avalanche, Chain.Blast, Chain.CronosChain, Chain.ZkSync,
Chain.Hyperliquid, Chain.Mantle, Chain.Sei
Chain.Bitcoin, Chain.Litecoin, Chain.Dogecoin, Chain.BitcoinCash,
Chain.Dash, Chain.Zcash
Chain.Cosmos, Chain.THORChain, Chain.MayaChain, Chain.Osmosis, Chain.Dydx,
Chain.Kujira, Chain.Terra, Chain.TerraClassic, Chain.Noble, Chain.Akash
Chain.Solana, Chain.Sui, Chain.Polkadot, Chain.Ton, Chain.Ripple,
Chain.Tron, Chain.Cardano
All Capabilities
For full details and code examples, see the SDK Users Guide.
| Capability | Description | Guide Section |
|---|
| Vault Creation | FastVault (2-of-2) and SecureVault (N-of-M) | Vault Management |
| Seedphrase Import | Validate mnemonics, discover chains, create vaults from seedphrase | Seedphrase |
| Send Transactions | Prepare, sign, broadcast for all 36+ chains | Essential Operations |
| Token Swaps | Cross-chain (THORChain), same-chain (1inch, LiFi), ERC-20 approval handling | Token Swaps |
| Sign Arbitrary Bytes | Custom tx construction with signBytes and broadcastRawTx | Signing |
| Cosmos Signing | SignAmino and SignDirect for Cosmos dApps | Cosmos Signing |
| Gas Estimation | Get gas info per chain via vault.gas(chain) | Gas Estimation |
| Token Discovery | Look up known tokens, discover at address, resolve metadata | Token Registry |
| Price Feeds | CoinGecko token prices via vault.getPrice() | Price Feeds |
| Security Scanning | Site scanning, transaction validation, transaction simulation | Security |
| Fiat On-Ramp | Buy crypto via Banxa integration | Fiat On-Ramp |
| Push Notifications | Register devices, notify vault members for signing, handle incoming push | Push Notifications |
| Portfolio Value | Fiat valuations across all chains | Portfolio |
| Password Management | Callbacks, caching, manual lock/unlock | Password Management |
| Event System | Reactive updates for balances, signing, chains, tokens | Events |
| Caching | Address, balance, password, portfolio caching with configurable TTLs | Caching |
| Error Handling | Typed VaultError with error codes (PasswordRequired, InsufficientBalance, etc.) | Quick Reference |
| Stateless Mode | MemoryStorage for serverless, testing, one-off operations | Stateless Usage |
| Multi-Platform | Node.js, Browser (WASM), React Native, Electron | Platform Notes |
| Storage Options | FileStorage, BrowserStorage, MemoryStorage, or custom | Configuration |
Supported Chains
36+ blockchains:
- EVM (13): Ethereum, Polygon, BSC, Arbitrum, Optimism, Base, Avalanche, Blast, Cronos, ZkSync, Hyperliquid, Mantle, Sei
- UTXO (6): Bitcoin, Litecoin, Dogecoin, Bitcoin Cash, Dash, Zcash
- Cosmos (10): Cosmos, THORChain, MayaChain, Osmosis, Dydx, Kujira, Terra, Terra Classic, Noble, Akash
- Other (7): Solana, Sui, Polkadot, TON, Ripple, Tron, Cardano
Resources