Self-custodial
Cavos never holds a key that can move user funds. The on-chain account is the sole authority over signers.
A device-native, self-custodial embedded wallet for Solana. The signing key is created and used on the user's device — Cavos cannot see it, cannot sign with it, and cannot move funds. Available via @cavos/kit for web and @cavos/kit/react-native for mobile (Expo Development Builds, EAS, or bare React Native — Expo Go is not supported).
In the browser, the device key is a non-extractable P-256 key stored via WebCrypto. On React Native, it uses the OS keystore. These platform primitives provide the hardware-backed isolation — the SDK does not enforce non-extractability on Node or other server runtimes.
Cavos provisions a device-account PDA controlled by a P-256 (secp256r1) device key. Every guarded action pairs Solana's native secp256r1 precompile with the Cavos device-account program.
npm install @cavos/kitUse Cavos.connect with chains: ["solana"]. Connect never deploys the account — it's created lazily on first execute. You can call execute when status is "undeployed" or "ready". Only "needs-device-approval" blocks execution.
import { Cavos } from "@cavos/kit";
const session = await Cavos.connect({
chains: ["solana"],
defaultChain: "solana",
network: "mainnet",
identity: { userId: user.id, email: user.email },
appSalt: "my-app",
appId: process.env.NEXT_PUBLIC_CAVOS_APP_ID,
});
const wallet = session.wallet("solana");
// Execute when undeployed OR ready
if (wallet.status !== "needs-device-approval") {
const signature = await wallet.execute(
1_000_000n, // 0.001 SOL in lamports
recipientPublicKey
);
}Cavos never holds a key that can move user funds. The on-chain account is the sole authority over signers.
Uses Solana’s native secp256r1 signature verification — no custom cryptographic code.
The Cavos relayer co-signs as fee payer — users hold no SOL to get started.
Beyond SOL transfers: SPL tokens, swaps, staking via executeInstructions (allowlisted programs).
Passkeys authorize adding new devices on-chain. They never sign transactions — device approval only.
Connect derives the address immediately. The account is initialized on first execute, atomically.
Follow the quickstart to reach a sponsored transaction.
We use anonymous analytics to understand how developers use Cavos. No personal data is collected. Privacy Policy