Skip to Content
Introduction
Introduction

The embedded wallet SDK.

Give every user a non-custodial wallet from just an email — no extensions, no seed phrases. EVM + Solana, split-key security, and fiat on-ramp, in one npm install.

What you get

Web2 sign-in

Email OTP or Google. Users get an address in seconds — no extension, no seed phrase, no popups.

Non-custodial by design

2-of-3 Shamir split key across device, server, and recovery. You never hold the full key, and neither do we.

EVM + Solana, one seed

A single BIP-44 seed derives an Ethereum and a Solana account. Users switch chains from the same login.

On-ramp & off-ramp

Card, bank transfer, and mobile-money fiat rails ship with the SDK — no third-party widget to bolt on.

Install

$npm install rabitwallet

Wrap your app in RabitProvider and drop in a <WalletButton />. That’s a production, non-custodial wallet:

app/providers.tsx
'use client' import { RabitProvider, WalletButton, PRESET_EVM_CHAINS, ETHEREUM_SEPOLIA, PRESET_SOLANA_CHAINS, } from 'rabitwallet' export function Providers({ children }: { children: React.ReactNode }) { return ( <RabitProvider config={{ projectId: process.env.NEXT_PUBLIC_RABIT_PROJECT_ID!, apiKey: process.env.NEXT_PUBLIC_RABIT_API_KEY!, apiBaseUrl: process.env.NEXT_PUBLIC_RABIT_API_BASE_URL!, app: { name: 'My dApp' }, evmChains: PRESET_EVM_CHAINS, defaultEvmChainId: ETHEREUM_SEPOLIA.id, solanaChains: PRESET_SOLANA_CHAINS, defaultSolanaCluster: 'devnet', authMethods: ['email', 'google'], }} > <WalletButton /> {children} </RabitProvider> ) }

One package, one import

Everything — the provider, components, hooks, and chain presets — comes from the single rabitwallet package.

Pick your path