Skip to main content

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
./scripts/install_zig.sh # or .bat if you're on Windows.
zig/zig build
./tigerbeetle version

Direct Download

You can download prebuilt binaries here:

LinuxWindowsMacOS
x86_64tigerbeetle-x86_64-linux.ziptigerbeetle-x86_64-windows.ziptigerbeetle-universal-macos.zip
aarch64tigerbeetle-aarch64-linux.zipN/Atigerbeetle-universal-macos.zip

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 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 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 0_0.tigerbeetle
./tigerbeetle format --cluster=0 --replica=1 --replica-count=3 0_1.tigerbeetle
./tigerbeetle format --cluster=0 --replica=2 --replica-count=3 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 0_0.tigerbeetle
./tigerbeetle start --addresses=127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002 0_1.tigerbeetle
./tigerbeetle start --addresses=127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002 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.