# Getting a Wallet

Canonical: https://docs.projectbabbage.com/docs/quickstarts/getting-a-wallet

Start with Metanet Client on desktop or Explorer on mobile, fund from an exchange through Mountaintops, and connect through portable BRC-100 examples.

A BRC-100 wallet is the developer entry point for modern BSV apps. It holds the user's keys, mediates permissions, manages baskets and certificates, and gives applications a standard API instead of forcing every app to handle private keys.

For Babbage users and builders, start with **[Metanet Client](https://docs.projectbabbage.com/docs/metanet-client)** on desktop or **[Metanet Explorer](https://docs.projectbabbage.com/docs/metanet-explorer)** on iOS/Android. The shared examples use `WalletClient` and BRC-100 so they remain portable to other compatible wallets.

## Wallet Choices

| Wallet or toolkit | Best for | Notes |
|-------------------|----------|-------|
| [Metanet Client](https://docs.projectbabbage.com/docs/metanet-client) | Desktop use and web-app development on macOS, Windows and Linux | Keep the wallet running alongside your desktop browser. |
| [Metanet Explorer](https://docs.projectbabbage.com/docs/metanet-explorer) | Mobile browsing and wallet-enabled websites | Open the website inside Explorer on iOS or Android. |
| [BSV Desktop](https://desktop.bsvb.tech/) | Local desktop development and reference BRC-100 behavior | Install the latest release and keep it running while testing apps. |
| [BSV Browser](https://mobile.bsvb.tech/) | Browser and mobile-oriented BRC-100 flows | Useful when you need extension/browser style app interaction. |
| [Wallet Toolbox](https://github.com/bsv-blockchain/ts-stack/tree/main/packages/wallet/wallet-toolbox) | Building or operating a wallet backend | Validate your actual implementation and version. |
| Legacy send/receive wallets | Holding or transferring coins | Usually not enough for BRC-100 apps because they do not expose the app permission interface. |

## Install and Fund Metanet

1. Follow [Client getting started](https://docs.projectbabbage.com/docs/metanet-client/getting-started) or [Explorer getting started](https://docs.projectbabbage.com/docs/metanet-explorer/getting-started).
2. Complete onboarding or recover your existing account. Save recovery material and protect your wallet data.
3. To receive from an exchange that requires a traditional BSV address, follow [the Mountaintops funding guide](https://docs.projectbabbage.com/docs/metanet-client/funding). Do not enter a Metanet identity key into an exchange address field.
4. Check the profile and network before connecting apps or moving funds.

Other compatible wallets remain useful for portability testing. Follow their own installation instructions and run only one desktop wallet bridge at a time.

Treat wallet recovery data like production secrets. Apps should never ask users to paste a seed, recovery phrase, or private key.

## Understand the App Connection

BRC-100 applications request capabilities from the wallet. The user approves or rejects those capabilities, and the app receives only the permissioned result.

Common capabilities include:

- reading the user's identity key,
- creating or signing actions,
- listing or internalizing outputs in baskets,
- encrypting, decrypting, signing, and verifying data,
- creating HMACs,
- presenting certificates or selected certificate fields,
- discovering network state such as height, headers, and wallet version.

## Connect From an App

Install the SDK (4.0.0 was the published version checked October 26, 2026; current packages require Node.js 22+):

```bash
npm install @bsv/sdk@4.0.0
```

Create a wallet client:

```ts
import { WalletClient } from '@bsv/sdk'

const wallet = new WalletClient('auto')
await wallet.waitForAuthentication()

const { publicKey } = await wallet.getPublicKey({ identityKey: true })
console.log('Connected identity key:', publicKey)
```

Use `auto` for normal browser and local development flows. Pass a specific substrate only when a guide or wallet implementation requires it. Pass an `originator` only when you are deliberately identifying a different requesting origin than the current app.

## Verify Portability

Before shipping, test the same app flow against more than one BRC-100 wallet path where possible:

1. Connect and authenticate.
2. Request only the permissions the feature needs.
3. Confirm the wallet prompt is understandable.
4. Revoke permissions and reconnect.
5. Run the flow with a low-value funded wallet.

## Next Steps

- Build [your first BSV app](https://docs.projectbabbage.com/docs/quickstarts/your-first-bsv-app).
- Learn the [wallet model](https://docs.projectbabbage.com/docs/concepts/wallets).
- Add [wallet-native authentication](https://docs.projectbabbage.com/docs/guides/wallet/auth).
- Store local app state with [baskets](https://docs.projectbabbage.com/docs/concepts/baskets).
