tigerbeetle-node
Advanced tools
Changelog
TigerBeetle 0.16.43
Released: 2025-05-30
This release includes the tigerbeetle recover
subcommand, which can be used to safely recover a
replica that is permanantly lost.
Additionally, it includes Change Data Capture (CDC) support to stream TigerBeetle state to Advanced Message Queuing Protocol (AMQP) targets, such as RabbitMQ and other compatible brokers.
Check out the documentation to learn about how to use
CDC and tigerbeetle recover
!
Add the tigerbeetle recover
subcommand, to safely recover a replica that is permanantly lost
(e.g. if the SSD fails).
Earlier, the only way to recover a permanantly lost replica was using the tigerbeetle format
command. Howerver, this was unsafe, as a newly-formatted replica may nack prepares which its
previous incarnation acked -- a correctness bug.
Implement an adaptive replication routing protocol to handle changes in network topology.
To select the best route, primary uses outcome-focused explore-exploit approach. Every once in a while, the primary tries an alternative route, and replaces the current route if the alternative provides better replication latency.
Replica pulls messages from the MessageBus, as opposed to the MessageBus pushing messages.
Earlier, replicas had to process every message that the bus pushed. This could lead to messages being dropped due to lack of available disk read/write IOPs. Now, a replica can "suspend" certain messages and return to them later when it has enough IOPs.
CDC support to stream TigerBeetle state to AMQP targets, such as RabbitMQ and other compatible brokers.
We implement the AMQP 0.9.1 specification instead of AMQP 1.0 as it is simpler and more widely supported (e.g., RabbitMQ only recently added native AMQP 1.0 support).
Unify the production and testing AOF code paths to make sure the production AOF is rigorously fuzzed by the VOPR.
Reduce code duplication while erasing IO callbacks' type.
Track debug build times on DevHub.
Miscellaneous improvements and fixes to CI and release.
Changelog
TigerBeetle 0.16.42
Released: 2025-05-23
Fix assert in fulfill_block
, if a replica receives a block that it didn't ask for from a newer
replica.
Extract the parsing parts of MessageBus into a sans-IO style ReceiveBuffer, that'll be used for the upcoming pull based MessageBus.
Speed up the LSM scan fuzzer.
Changelog
TigerBeetle 0.16.41
Released: 2025-05-16
Implement request throttling for grid repair, making state sync less chatty over the network.
Improved latency and throughput in prepare repair operations.
Make the Quick Start page more direct by showing only the installation instructions for Linux by default, with Windows and macOS hidden behind click-to-expand sections.
New tigerbeetle inspect op
command that displays checkpoints and triggers surrounding a given
op
number.
Changelog
TigerBeetle 0.16.40
Released: 2025-05-09
Fix AOF unflushed
assertion.
Decouple prepare repair from header breaks. This helps a replica repair faster, and prevents a case where we would request a prepare only to discard it when it arrives.
Bump default journal write iops. Previously we were inadvertently throttling repair by not allocating enough.
Primary now broadcasts start_view
message on checkpoint durability.
This will help syncing replicas update to the latest sync target as early as possible.
Add assert to check return value of next_batch_of_block_requests
.
Add subcommand to git-review
to send review comments as a email.
Add subcommand to git-review
to split suggested code changes out of a review commit.
Speed up fuzz smoke tests.
Improve memory usage of tests 10x and test runtime 10x.
Add arbitrary debug output to CFO seeds.
Fix for multiple CFO branches on same commit.
Reduce closed loop replication quorum from n
to n-1
.
Changelog
TigerBeetle 0.16.39
Released: 2025-05-02
Heads up, we are changing our release process! From this point on, a TigerBeetle release is tagged on Friday, spends a weekend on the CFO fleet, and is published on Monday. In other words, you'll still be getting a new release every Monday, but the date of the release will be set to Friday. This setup allows extra time for fuzzers to find problems in the specific commit we are trying to release.
Continuously fuzz the release branch, in addition to the main branch and the pull requests.
Eagerly deinitialize clients upon eviction, to proactively sever TCP connections to replicas.
Add an initial Rust client. Note that it is not published to crates.io yet.
Reduce verbosity when running full CI suite locally.
Changelog
TigerBeetle 0.16.38
Released: 2025-04-28
Switch to using gpa as backing allocator for clients.
Set socket options for peer connections.
Add tb_client_init_parameters
and implement for Python client.
Fix tigerbeetle inspect grid
for data files with no used blocks.
CI improvements.
De-genericify Queue
.
Modernize stdx.cut
API
Trial a git-native + offline-first code review interface.
Devhub improvements. In particular, ensure that a failing canary fuzzer is obvious.
Compile scripts for zig build ci
.
Changelog
TigerBeetle 0.16.37
Released: 2025-04-21
Fix a bug where VOPR latencies were computed incorrectly when the minimum and mean were equal.
Improve binary size and compilation time by making implementation of intrusive stack non-generic.
Make the Docs website pass the W3C HTML validation test.
Fix a memory leak in VOPR and apply idiomatic naming conventions for the allocator.
Fix a panic where the VOPR attempts to print a deinitialized packet when debug logs are enabled.
Changelog
TigerBeetle 0.16.36
Released: 2025-04-14
Fix journal disjoint-buffer assertion.
Make object cache optional. This improves throughput by ~10%, as we can omit the object cache from the account events groove, which never uses it.
Changelog
TigerBeetle 0.16.35
Released: 2025-04-07
Please note that after #2787, which adds
batching support for all operations, the batch_max
limit has changed from 8190 to 8189
accounts/transfers per batch.
Add support for batching multiple independent requests of the same operation within a single VSR message, amortizing network and consensus costs.
Earlier, we batched only create_accounts and create_transfers. Now, we can batch any operation!
Use TigerBeetle's time abstraction as opposed to raw OS time in the tracer.
Allow custom network packet delay functions in the VOPR. This allows us to simulate latencies for different network topologies, for example the ring/star topology.
Fix a VOPR false positive wherein we were accessing a crashed replica's uninitialized memory.
Improve error thrown when an invalid --account/transfer-batch-size is passed to the benchmark CLI.
Minor refactors to VSR and VOPR.
Fixes and improvemenents in the documentation.
Changelog
TigerBeetle 0.16.34
Released: 2025-03-31
Add basic fuzzing for the state machine.
Re-do tickless VOPR to simulate fast IOPs.
Allow simulating one-replica-down scenario in the VOPR.
Print dropped packets in the VOPR.
Various changes for VOPR performance mode.
A quicker request protocol for VSR.
Account for pulses when computing the size of the request queue in VSR.
Fix a possible panic in the Node.js client by handling the "too much data" error.
Fix a possible replica crash if negative timestamps would be provided to AccountFilter or QueryFilter.
Allow tigerbeetle inspect
to run on open data files. This helps with getting an idea what's
going on on a running cluster without needing to shut it down first.
Vendor our own BitSet in stdx, TigerBeetle's extended standard library. This change reduces the Linux binary size by 38KiB.
Track the REPL execution time on DevHub.
Fix the wording in the correcting transfers example. Thanks @shraddha38!
Remove the global allocator from the fuzzers and pass the allocator explicitly to align more with TigerStyle.
Block merges in the CI based on DevHub pipeline results.
Add replica/lsm/grid/journal metrics to VSR.