> For the complete documentation index, see [llms.txt](https://docs.fast.poker/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fast.poker/building-on-the-protocol/choose-your-path.md).

# Choose your integration path

> Verified against the public fastpoker IDL (PokerXYdXL2SKNnfGbv1WE7vJHipTpNsfZbZeVvoJLn) released 2026-07-17.

**Wallet + RPC only**

> Beta software on mainnet. Examples can fail. Test with small amounts.

## Purpose

This page routes you to the right reading order. Fast Poker is a protocol on Solana. Custody and settlement live in program accounts and instructions. You do not need a special SDK, a hosted backend, or operator credentials to build against it. You need a wallet to sign and an RPC connection to read and send.

Pick the path that matches what you are building. Each path maps to the exact pages to read, in order. Read those pages and skip the rest.

For the wider model behind these paths, read the [Integrations Overview](/integrations/11-integrations.md). For deeper builder guides, read [frontend-integration.md](/integrations/frontend-integration.md) and [indexer-integration.md](/integrations/indexer-integration.md).

## When to use / who signs

Use this page first, before any other integration page. It is a map, not a build step.

In every path the player wallet signs anything that moves custody or settlement. An indexer signs nothing. A frontend prepares transactions but never signs as the player. Only an operator running a Dealer Service signs crank work, and that work is permissionless protocol advancement, not custody.

## Inputs and constants

These program IDs are shared by every path. Verify them against official release artifacts before mainnet use.

| Program                         | Pubkey                                         |
| ------------------------------- | ---------------------------------------------- |
| FastPoker (main)                | `PokerXYdXL2SKNnfGbv1WE7vJHipTpNsfZbZeVvoJLn`  |
| fastpoker\_registry             | `pokerQBdo685uLSkpVSyZ1vWooPYYTUhGkeKAHyCmax`  |
| Permission program (MagicBlock) | `ACLseoPoyC3cBqoUtkbjZ4aDrkurZW86v19pXz2XQnp1` |
| Steel tokenomics program        | `FASTPjXb68fPW9JRYSBS3EDoaT6inz84GoqkPK52dsA9` |
| MagicBlock Delegation program   | `DELeGGvXpWV2fqJUhqcF5ZSYMS4JTLjteaAMARRSaeSh` |

For account layouts, seeds, and sizes that every path reads from, use [../04-architecture/state-accounts.md](/architecture/state-accounts.md). Do not hardcode offsets from memory. Derive PDAs from the seeds listed there.

## Steps

Find your row. Read its pages in order. Each path is additive: a later path usually includes the reading of an earlier one.

### 1. Read-only app

You display tables, pools, profiles, or jackpots. You never build a write transaction. A wallet is optional. An RPC connection is required.

| Read in order                                                           | Why                                                                   |
| ----------------------------------------------------------------------- | --------------------------------------------------------------------- |
| [README.md](/integrations/11-integrations.md)                           | Core integration model and the source-of-truth rule.                  |
| [../04-architecture/state-accounts.md](/architecture/state-accounts.md) | Account seeds and layouts you decode.                                 |
| [indexer-integration.md](/integrations/indexer-integration.md)          | API shapes for fast reads of tables, history, profiles, and jackpots. |

Use an indexer for speed. Reconcile any fund-relevant claim against Solana accounts.

### 2. Custom frontend

You build a wallet-facing client: a room, a white-label app, a league client, or a player experience. The player wallet signs every player action.

| Read in order                                                           | Why                                                                             |
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| [README.md](/integrations/11-integrations.md)                           | Wallet and auth model, safety rules.                                            |
| [frontend-integration.md](/integrations/frontend-integration.md)        | What a frontend must do, read sources, write flows, RPC modes, TEE card access. |
| [../04-architecture/state-accounts.md](/architecture/state-accounts.md) | Accounts you read and pass into transactions.                                   |
| [setup.md](/building-on-the-protocol/setup.md)                          | Shared helper, program IDs, and PDA derivations.                                |
| [signer-matrix.md](/building-on-the-protocol/signer-matrix.md)          | Which key signs which instruction.                                              |

### 3. SNG-only client

You only handle Sit-and-Go pools: join a pool, watch the queue, read match and prize state. You do not run cash tables.

| Read in order                                                           | Why                                                                                      |
| ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| [frontend-integration.md](/integrations/frontend-integration.md)        | Join-pool write flow and SNG read sources.                                               |
| [setup.md](/building-on-the-protocol/setup.md)                          | `getSngPoolPda`, `getSngPoolVaultPda`, `getSngQueueMarkerPda`, `getSngMatchPda` helpers. |
| [../04-architecture/state-accounts.md](/architecture/state-accounts.md) | `SngPool`, queue, and settlement accounts.                                               |
| [signer-matrix.md](/building-on-the-protocol/signer-matrix.md)          | Confirm the player wallet signs the join.                                                |

SNG pools are keyed by `(game_type, tier)`. The format and tier tables:

| game\_type | Format            |
| ---------- | ----------------- |
| 0          | SitAndGo Heads-Up |
| 1          | SitAndGo 6max     |
| 2          | SitAndGo 9max     |

| tier | Public name | Total buy-in (SOL) | Prize (SOL) | Fee (SOL) |
| ---- | ----------- | ------------------ | ----------- | --------- |
| 0    | Copper      | 0.05               | 0.045       | 0.005     |
| 1    | Bronze      | 0.10               | 0.09        | 0.01      |
| 2    | Silver      | 0.25               | 0.225       | 0.025     |
| 3    | Gold        | 0.50               | 0.45        | 0.05      |
| 4    | Platinum    | 1.00               | 0.90        | 0.10      |
| 5    | Diamond     | 2.00               | 1.80        | 0.20      |
| 6    | Black       | 5.00               | 4.50        | 0.50      |

The fee is 10% of the total buy-in. The prize is 90%.

### 4. Legacy cash recovery client

Cash gameplay is retired. This path is only for clients that help owners and players recover existing balances, settle pending rewards, and close old tables. It must not build creation, deposit, seat, top-up, tip, or hand-start transactions.

| Read in order                                                           | Why                                                          |
| ----------------------------------------------------------------------- | ------------------------------------------------------------ |
| [frontend-integration.md](/integrations/frontend-integration.md)        | Current write policy and safe status display.                |
| [setup.md](/building-on-the-protocol/setup.md)                          | `getTablePda`, `getTableVaultPda`, `getSeatPda` helpers.     |
| [../04-architecture/state-accounts.md](/architecture/state-accounts.md) | `Table`, `Seat`, `TableVault`, deposit and cashout accounts. |
| [signer-matrix.md](/building-on-the-protocol/signer-matrix.md)          | Player and creator signatures for recovery and close.        |

Legacy cash uses `game_type = 3` (CashGame). Funds sit in the `TableVault` PDA. Never treat an indexer row as proof of a vault balance.

### 5. Indexer / analytics

You run a read-side service: history, leaderboards, profile stats, or analytics. You sign nothing and custody nothing.

| Read in order                                                           | Why                                                            |
| ----------------------------------------------------------------------- | -------------------------------------------------------------- |
| [README.md](/integrations/11-integrations.md)                           | The rule that an indexer is convenience, not custody.          |
| [indexer-integration.md](/integrations/indexer-integration.md)          | Required infrastructure, data model, ingestion, and API shape. |
| [../04-architecture/state-accounts.md](/architecture/state-accounts.md) | The accounts you decode into views.                            |

### 6. Full room / operator

You run a complete room: a frontend, an indexer, and the Dealer Service that advances games. You are an operator.

| Read in order                                                           | Why                                                                 |
| ----------------------------------------------------------------------- | ------------------------------------------------------------------- |
| [README.md](/integrations/11-integrations.md)                           | The full layer map.                                                 |
| [frontend-integration.md](/integrations/frontend-integration.md)        | The player-facing layer.                                            |
| [indexer-integration.md](/integrations/indexer-integration.md)          | The read layer.                                                     |
| [../04-architecture/state-accounts.md](/architecture/state-accounts.md) | Operator and reward accounts.                                       |
| [setup.md](/building-on-the-protocol/setup.md)                          | Shared program IDs and helpers.                                     |
| [signer-matrix.md](/building-on-the-protocol/signer-matrix.md)          | The operator key signs crank work; player keys sign player actions. |

## Example

This snippet imports the shared helper from [setup.md](/building-on-the-protocol/setup.md) and prints the SNG pool address for a chosen path. It reads only. It signs nothing, so it fits every path on this page.

```ts
import { Connection, clusterApiUrl } from '@solana/web3.js';
import { AnchorProvider } from '@coral-xyz/anchor';
import {
  FASTPOKER_PROGRAM_ID,
  getSngPoolPda,
  getSngPoolVaultPda,
} from './setup'; // shared helper from ./setup.md

// game_type: 0 = HU, 1 = 6max, 2 = 9max. tier: 0 = Copper ... 6 = Black.
const GAME_TYPE = 1; // SitAndGo 6max
const TIER = 1; // Bronze

async function main() {
  const connection = new Connection(clusterApiUrl('mainnet-beta'), 'confirmed');

  // AnchorProvider is read-only here: no wallet needed to derive and fetch.
  void AnchorProvider; // present for parity with write paths

  const [poolPda] = getSngPoolPda(GAME_TYPE, TIER);
  const [vaultPda] = getSngPoolVaultPda(GAME_TYPE, TIER);

  console.log('FastPoker program:', FASTPOKER_PROGRAM_ID.toBase58());
  console.log('SNG pool PDA     :', poolPda.toBase58());
  console.log('SNG pool vault   :', vaultPda.toBase58());

  const info = await connection.getAccountInfo(poolPda);
  console.log('pool initialized :', info !== null);
}

main().catch((e) => {
  console.error(e);
  process.exit(1);
});
```

## Result

You now know which pages to read and in what order. Open them in the listed order and skip the rest. Every path treats Solana accounts as the source of truth and keeps player transactions wallet-signed.

## Pitfalls

* Do not pick more than one path. If you span paths (a full room), follow the full room / operator path, which already chains the others.
* Do not treat an indexer response as proof of funds. Read vaults and settlement from Solana when correctness matters.
* Do not hardcode account offsets. Derive PDAs from the seeds in [../04-architecture/state-accounts.md](/architecture/state-accounts.md).
* Do not sign player actions from an indexer or a server. The player wallet signs custody and settlement.
* Do not run a production indexer on free public RPC. See [indexer-integration.md](/integrations/indexer-integration.md).
* Do not skip rebranding before publishing a custom client. The Fast Poker marks are not a general trademark grant.

## See also

* [Integrations Overview](/integrations/11-integrations.md)
* [frontend-integration.md](/integrations/frontend-integration.md)
* [indexer-integration.md](/integrations/indexer-integration.md)
* [setup.md](/building-on-the-protocol/setup.md)
* [quickstart.md](/building-on-the-protocol/quickstart.md)
* [signer-matrix.md](/building-on-the-protocol/signer-matrix.md)
* [../04-architecture/state-accounts.md](/architecture/state-accounts.md)
