Choose Your Stack

Start from who controls the keys and how close you need to be to the protocol.

text
Browser app using a user's wallet?
  -> @bsv/simple/browser

Backend agent with its own key?
  -> @bsv/simple/server

Coming from another chain and want to build transactions explicitly?
  -> @bsv/wallet-helper

Wallet implementation or wallet infrastructure?
  -> @bsv/wallet-toolbox + BRC-100 spec

Protocol, crypto, scripts, transactions, BEEF, or conformance?
  -> @bsv/sdk

Browser App

Use this when the user already has a local BRC-100 wallet such as BSV Desktop or BSV Browser.

bash
npm install @bsv/simple
typescript
import { createWallet } from '@bsv/simple/browser'

const wallet = await createWallet()
const recipientIdentityKey = '025706528f0f6894b2ba505007267ccff1133e004452a1f6b72ac716f246216366'
const result = await wallet.pay({
  to: recipientIdentityKey,
  satoshis: 1000
})

console.log(result.txid)

The web app does not hold private keys. The wallet client finds an available substrate and forwards BRC-100 calls to the user's wallet application.

Transaction Builder

Use @bsv/wallet-helper when you want to construct transactions directly, but you do not want to drop all the way into raw WalletClient.createAction and signAction calls.

This is often the clearest starting point for developers coming from other blockchain stacks: you can think in terms of explicit transaction outputs, scripts, ordinals, metadata, inputs, and change, while the user's BRC-100 wallet still controls keys and signing.

bash
npm install @bsv/wallet-helper

Read this with the BRC-100 method reference when you need to understand what the builder sends to the wallet:

Server Agent

Use this for automated services, bots, funding agents, or test harnesses where the service owns a key.

bash
npm install @bsv/simple
typescript
import { ServerWallet } from '@bsv/simple/server'

const wallet = await ServerWallet.create({
  privateKey: process.env.SERVER_PRIVATE_KEY!,
  network: 'main',
  storageUrl: 'https://store-us-1.bsvb.tech'
})

Use a secret manager for SERVER_PRIVATE_KEY. Use a region-specific Wallet Infra endpoint when you operate your own deployment.

Wallet Builder

Use @bsv/wallet-toolbox when you are building a BRC-100 wallet, extending wallet storage, implementing permission UX, or porting the model to another language.

bash
npm install @bsv/wallet-toolbox

The toolbox contains the reference pieces: Wallet, WalletStorageManager, storage providers, WalletSigner, Services, Monitor, key managers, permissions, and test utilities such as MockChain.

Read these together:

Protocol Engineer

Use @bsv/sdk for direct access to the core primitives.

bash
npm install @bsv/sdk

The SDK provides secp256k1/r1 cryptography, hashing, scripts, transactions, BEEF (BRC-62), BUMP/Merkle paths (BRC-74), BRC-42 key derivation, ARC broadcasting, Chaintracks clients, BRC-100 interfaces, and wallet substrates.

Service Operator

Use the infrastructure docs when you need shared services rather than npm packages.

ServiceFirst page
Wallet state and UTXO storageWallet Infra
Store-and-forward encrypted messagesMessage Box Server
Shared on-chain topic lookupOverlay Server
Content-addressed filesUHRP servers
Wallet authentication backendWAB
Block headers and Merkle rootsChaintracks Server

Decision Matrix

What you're buildingStart withUsually adds
Browser app@bsv/simple/browser@bsv/message-box-client, overlays
Transaction-building app@bsv/wallet-helper@bsv/templates, BRC-100 method reference
Server agent@bsv/simple/server@bsv/402-pay, Message Box
BRC-100 wallet@bsv/wallet-toolboxWallet Infra, WAB, Chaintracks
Protocol library@bsv/sdkConformance vectors
Overlay node@bsv/overlay, @bsv/overlay-express@bsv/overlay-topics, GASP
Token system@bsv/btms, @bsv/btms-permission-moduleOverlay topics, wallet permissions
Authenticated API@bsv/auth-express-middlewareBRC-100 wallet
Payment-gated API@bsv/402-pay@bsv/payment-express-middleware
File storage@bsv/overlay-topicsUHRP server

See Packages for the complete package list.