Introduction
butr is a set of multi-chain wallet-management primitives for React. EVM, Solana, Sui, Bitcoin, and Polkadot, discovered and managed through one composable hook surface.
butr discovers EVM (EIP-6963 / EIP-1193), Solana / Sui / Bitcoin (Wallet
Standard), and Polkadot (injectedWeb3) wallets,
manages their connection state across reloads, and exposes everything through
small composable React hooks. It does not wrap viem, wagmi, gill, or
framework-kit; it sits underneath them and hands you a raw signer so you keep
using whatever chain library you already know.
What butr is
- Multi-chain by default. One provider, one pool. A user can connect MetaMask (EVM) and Phantom (SVM) at the same time; butr tracks each platform independently.
- Connector-shaped. Every wallet (injected, WalletConnect, Ledger, or one
you write yourself) is a
WalletAdapterannounced through a single seam:WalletManagerConfig.sources. - No lock-in.
getSigner()returns the wallet's own provider, tagged by transport ({ kind: "eip1193", provider },{ kind: "wallet-standard", wallet }, …). You bridge it into viem / wagmi / gill / framework-kit /@solana/kit(or legacy@solana/web3.js) with a few lines. - Modular. Install only the packages you need. The core has no React and no protocol code; protocols live in separate packages.
The package model
butr is layered. Each package depends only on the ones below it.
| Package | What it does | Depends on |
|---|---|---|
@usebutr/core | Types, the wallet manager, persistence, chain registries, the discovery seam. No React. | — |
@usebutr/react | Provider + hooks over the manager. | @usebutr/core |
@usebutr/evm | EIP-1193 / EIP-6963 / injected discovery and adapters. | @usebutr/core |
@usebutr/wallet-standard-shared | The Wallet Standard adapter core, getFeature, and the wallet-standard signer. | @usebutr/core |
@usebutr/svm | Wallet Standard discovery and adapters for Solana. | @usebutr/core, @usebutr/wallet-standard-shared |
@usebutr/sui | Wallet Standard discovery and adapters for Sui. | @usebutr/core, @usebutr/wallet-standard-shared |
@usebutr/bitcoin | Wallet Standard + injected discovery and adapters for Bitcoin. | @usebutr/core, @usebutr/wallet-standard-shared |
@usebutr/polkadot | injectedWeb3 discovery and adapters for Polkadot, with a Wallet Standard fallback. | @usebutr/core, @usebutr/wallet-standard-shared |
@usebutr/wallets | Batteries-included five-platform discovery source: autoDiscovery(). | @usebutr/core, @usebutr/evm, @usebutr/svm, @usebutr/sui, @usebutr/bitcoin, @usebutr/polkadot |
@usebutr/walletconnect | WalletConnect v2 adapters for EVM, Solana, Sui, and Bitcoin mobile wallets. | @usebutr/core, @usebutr/evm, @usebutr/svm, @usebutr/sui, @usebutr/bitcoin |
@usebutr/ledger | Ledger hardware-wallet adapters (WebUSB, signing-only). | @usebutr/core, @usebutr/svm, @usebutr/sui |
@usebutr/testing | Fake adapter, fake persistence and the adapter contract suite (/contract). | @usebutr/core |
Most apps want @usebutr/react plus @usebutr/wallets, which pulls in
@usebutr/core and every per-platform adapter package. Put autoDiscovery()
in the provider's config.sources for discovery across all five platforms.
Reach for a single platform package when you want a single-platform bundle:
its discover*Adapters export goes into sources as-is.
Where to go next
- Installation: pick your packages.
- Quickstart: a working app in five
minutes with
WalletManagerProvider. - Core concepts: the mental model of adapters, the manager, the pool, platforms, hydration.
- Standards compliance: how butr follows the Wallet Standard, EIP-6963, and EIP-1193, and the deliberate edges.
- Guides: connect, sign, send, switch chains.
- API reference: every export, per package.
Code in these docs follows the runnable demo apps and package tests in the butr repository. Each guide cites its source.
Demos
Try the live demo, or run one of the 15 examples: