<!--
Sitemap:
- [MBGA · Reactive Primitives for Spark](/index)
- [Acknowledgments](/acknowledgments)
- [API Reference](/api/)
- [Connectors](/connectors/)
- [Examples](/examples/)
- [Flashnet](/flashnet/)
- [Getting Started](/getting-started)
- [Installation](/installation)
- [Kit](/kit/)
- [Configuration](/api/configuration)
- [Core Actions](/api/core-actions)
- [React Hooks](/api/hooks)
- [Types & Errors](/api/types)
- [Custom Connectors](/connectors/custom)
- [Sats Connect (Xverse)](/connectors/sats-connect)
- [Spark SDK](/connectors/spark-sdk)
- [Wallet Standard](/connectors/wallet-standard)
- [Flashnet Authentication](/flashnet/authentication)
- [Next.js](/frameworks/nextjs)
- [Vite](/frameworks/vite)
- [AccountModal](/kit/account-modal)
- [ConnectButton](/kit/connect-button)
- [ConnectModal](/kit/connect-modal)
-->

# Getting Started

MBGA is a collection of React hooks for building Bitcoin apps on [Spark](https://www.spark.info/). It handles wallet connections, balance queries, payments, and more.

## Quick Start

### 1. Install

:::code-group

```bash [pnpm]
pnpm add mbga @mbga/connectors @tanstack/react-query
```

```bash [npm]
npm install mbga @mbga/connectors @tanstack/react-query
```

```bash [yarn]
yarn add mbga @mbga/connectors @tanstack/react-query
```

:::

### 2. Create a Config

```ts
// src/mbga.ts
import { walletStandardDiscovery, xverse } from '@mbga/connectors'
import { createConfig, sparkMainnet } from 'mbga'

export const config = createConfig({
  network: sparkMainnet,
  connectors: [xverse()],
  plugins: [walletStandardDiscovery()],
})
```

### 3. Wrap Your App

```tsx
// src/App.tsx
import { MbgaProvider } from 'mbga'
import { config } from './mbga'

function App() {
  return (
    <MbgaProvider config={config}>
      <YourApp />
    </MbgaProvider>
  )
}
```

### 4. Use Hooks

```tsx
// src/ConnectWallet.tsx
import { useConnect, useConnection, useDisconnect } from 'mbga'

function ConnectWallet() {
  const { connect, connectors, isPending } = useConnect()
  const { status, accounts } = useConnection()
  const { disconnect } = useDisconnect()

  if (status === 'connected') {
    return (
      <div>
        <p>Connected: {accounts[0]}</p>
        <button onClick={() => disconnect()}>Disconnect</button>
      </div>
    )
  }

  return (
    <div>
      {connectors.map((connector) => (
        <button
          key={connector.uid}
          disabled={isPending}
          onClick={() => connect({ connector })}
        >
          {connector.name}
        </button>
      ))}
    </div>
  )
}
```

## What is Spark?

Spark is a Bitcoin Layer 2 that gives you fast, cheap transactions while keeping Bitcoin's security. It supports:

* **Lightning payments** — pay any Lightning invoice
* **On-chain Bitcoin** — send to regular `bc1...` addresses
* **Spark-native transfers** — instant transfers between Spark wallets

MBGA abstracts all three behind a single `sendPayment` call.

## Packages

| Package | Description |
|---------|-------------|
| `mbga` | React hooks wrapping TanStack Query |
| `@mbga/connectors` | Wallet connectors (Sats Connect, Spark SDK, Wallet Standard) |
| `@mbga/core` | Framework-agnostic config, actions, and state |
| `@mbga/kit` | Pre-built UI components |
| `@mbga/flashnet` | Flashnet authentication and orchestration |

## Next Steps

* [Installation](/installation) — detailed setup for different connectors
* [Connectors](/connectors/) — choose the right connector for your use case
* [Frameworks](/frameworks/vite) — framework-specific setup guides
* [API Reference](/api/) — full hook and action documentation
