GitHub

Quick Start

This page will guide you through downloading TigerBeetle, setting up a single- or multi-node cluster, and creating some accounts and transfers using the REPL.

1. Download TigerBeetle

TigerBeetle is a single, small, statically-linked binary.

Latest Release

# macOS
curl -Lo tigerbeetle.zip https://mac.tigerbeetle.com && unzip tigerbeetle.zip && ./tigerbeetle version
# Linux
curl -Lo tigerbeetle.zip https://linux.tigerbeetle.com && unzip tigerbeetle.zip && ./tigerbeetle version
# Windows
powershell -command "curl.exe -Lo tigerbeetle.zip https://windows.tigerbeetle.com; Expand-Archive tigerbeetle.zip .; .\tigerbeetle version"

Build from Source

To build TigerBeetle from source, clone the repo, install Zig and run zig build:

git clone https://github.com/tigerbeetle/tigerbeetle && cd tigerbeetle
./zig/download.sh # .bat if you're on Windows.
./zig/zig build
./tigerbeetle version

Notes:

  • Building from source is not recommended for production deployments.
  • If you build TigerBeetle from source, it is only compatible with clients that were also built from source.

Direct Download

You can download prebuilt binaries here:

Docker

You can find instructions on using TigerBeetle with Docker here.

2. Create the Data File

Each TigerBeetle node uses a single data file to store its state. Create the data file using the format command:

./tigerbeetle format --cluster=0 --replica=0 --replica-count=1 --development 0_0.tigerbeetle
info(io): creating "0_0.tigerbeetle"...
info(io): allocating 660.140625MiB...

3. Start Your Cluster

Now we’ll run the TigerBeetle server.

./tigerbeetle start --addresses=3000 --development 0_0.tigerbeetle
info(io): opening "0_0.tigerbeetle"...
info(main): 0: cluster=0: listening on 127.0.0.1:3000

4. Connect to the REPL

Now that we have TigerBeetle running, we can connect to it via the REPL to create some accounts and transfers!

./tigerbeetle repl --cluster=0 --addresses=3000
TigerBeetle Client
  Hit enter after a semicolon to run a command.

Examples:
  create_accounts id=1 code=10 ledger=700 flags=linked | history,
                  id=2 code=10 ledger=700;
  create_transfers id=1 debit_account_id=1 credit_account_id=2 amount=10 ledger=700 code=10;
  lookup_accounts id=1;
  lookup_accounts id=1, id=2;

5. Create Accounts

In the REPL, create two accounts on the same ledger using the command:

create_accounts id=1 code=10 ledger=700,
                id=2 code=10 ledger=700;
info(message_bus): connected to replica 0

6. Create a Transfer

Now create a transfer of 10 (of some amount/currency) between the two accounts.

create_transfers id=1 debit_account_id=1 credit_account_id=2 amount=10 ledger=700 code=10;

Now, the amount of 10 has been credited to account 2 and debited from account 1.

7. Look Up Accounts

Let’s query TigerBeetle for these two accounts to verify the transfer we made!

lookup_accounts id=1, id=2;
{
  "id": "1",
  "user_data": "0",
  "ledger": "700",
  "code": "10",
  "flags": [],
  "debits_pending": "0",
  "debits_posted": "10",
  "credits_pending": "0",
  "credits_posted": "0"
}
{
  "id": "2",
  "user_data": "0",
  "ledger": "700",
  "code": "10",
  "flags": "",
  "debits_pending": "0",
  "debits_posted": "0",
  "credits_pending": "0",
  "credits_posted": "10"
}

And indeed you can see that account 1 has debits_posted as 10 and account 2 has credits_posted as 10. The 10 amount is fully accounted for!

You can take a look at the Accounts reference to understand all of the fields on the accounts.

You can also take a look at the Request Types to see what else you can do with the REPL.

Optional: Run a Multi-Node Cluster

Up to this point, we have only shown you how to run a single-node TigerBeetle cluster. In production, TigerBeetle is intended to be run with 6 nodes.

Here, we will show you how to run a 3-node cluster (the idea is the same for 6 nodes):

First, create the data files for each node:

./tigerbeetle format --cluster=0 --replica=0 --replica-count=3 --development 0_0.tigerbeetle
./tigerbeetle format --cluster=0 --replica=1 --replica-count=3 --development 0_1.tigerbeetle
./tigerbeetle format --cluster=0 --replica=2 --replica-count=3 --development 0_2.tigerbeetle

Note that the data file stores which replica in the cluster the file belongs to.

Start each server in a new terminal window:

./tigerbeetle start --addresses=127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002 --development 0_0.tigerbeetle
./tigerbeetle start --addresses=127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002 --development 0_1.tigerbeetle
./tigerbeetle start --addresses=127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002 --development 0_2.tigerbeetle

TigerBeetle uses the --replica that’s stored in the data file as an index into the --addresses provided.

You can connect to the REPL as described above try creating accounts and transfers in this cluster.

You can also read more about deploying TigerBeetle in production.

Next: Designing for TigerBeetle

Now that you’ve created some accounts and transfers, you may want to read about how TigerBeetle fits into your system architecture and dig into the data model.

Edit this page