rbino

rbino

Ash Core Team

TigerBeetlex - an Elixir client for TigerBeetle

Hey folks!

I’m happy to introduce TigerBeetlex, an Elixir client for TigerBeetle, the financial transactions database. I’ve been working on this for some time and I finally feel it’s ready for general usage.

The goal of TigerBeetle is making financial transactions safe and fast, and TigerBeetlex allows you to interact with it from the Elixir world. If you’re building applications requiring high-throughput, fault-tolerant double-entry accounting, TigerBeetle, and now TigerBeetlex, could be a great fit.

It exposes all the available operations with two different flavored APIs: a message-based one, useful to plug into and existing process architecture, and a blocking API, providing a more familiar RPC-like interface. Moreover, it translates TigerBeetle binary data back and forth to Elixir structs.

The client is built upon the official TigerBeetle Zig client as a NIF, which is the approach used by all other TigerBeetle high-level clients. The NIF is built using build_dot_zig, so it automatically downloads the Zig toolchain for you and doesn’t require any system dependency to be built.

The docs contain a walkthrough that can be executed in LiveBook and should cover all the main features, but I suggest checking out the official TigerBeetle docs, especially the recipes section, which show some really cool accounting-foo to implement concrete use cases.

I’ve also done an introductory talk to TigerBeetlex at ElixirConf EU 2025, I’ll post the recording of the talk here when it’s released.

Let me know if you have any questions or suggestions, someone on the forum was already asking for integration with Ash which was something I already had on my mind.

Most Liked

rbino

rbino

Ash Core Team

Hey everyone!

I’ve released version 0.16.47 today (like I do almost every Tuesday, following TigerBeetle release schedule). This time though the version doesn’t just bump the TigerBeetle client version, but also adds support for TigerBeetle Change Data Capture functionality.

To provide a little more context, since version 0.16.43 TigerBeetle has the ability to stream its transactions to RabbitMQ, so in this version of TigerBeetlex I’ve added structs to decode the JSON payload of the events and a guide showing how to use Broadway to build a pipeline processing TigerBeetle CDC data.

rbino

rbino

Ash Core Team

TigerBeetle is meant to be used only for (financial) transaction processing, so you’ll probably need another general purpose database in your system for a full application.

Basically you use TigerBeetle as your data plane (to process a high volume of transactions) and your general purpose database of choice as control plane, storing all the other kinds of data that vary less frequently (e.g. user metadata, application data and so on).

Where Next?

Popular in Announcing Top

wkirschbaum
Hi everyone. We released Spreadsheet a couple of months ago which we have been using internally for parsing xlsx files internally for our...
New
MRdotB
Greetings Elixir community! Today, I’m thrilled to present you with resvg_nif, an open-source project that provides Elixir bindings for ...
New
restlessronin
The repo is at GitHub - cyberchitta/openai_ex: Community maintained Elixir library for OpenAI API. Docs are at OpenaiEx User Guide — ope...
New
kzemek
I’ve recently released v0.2.0 of my Python interop library, Snex. This version rolls up all work-in-progress improvements that have been...
New
Zurga
Subscribe to events emitted by EctoWatch, and cache the changed row. Use the sync/3 function to update an in-memory row or list of rows u...
New
munksgaard
flakify is an igniter installer that allows you to quickly get a Nix flake-based development shell up and running for your Elixir/Phoenix...
New
johantell
Ever struggled with mocking external HTTP services in Elixir tests? Found yourself writing brittle mocks that don’t catch real-world enco...
New
victor23k
LiveViewPortal is a small library that allows third-party sites to embed LiveView apps. The library is distributed as an NPM package. On...
New
leandrocp
MDEx is a fast and extensible Markdown parser and formatter. Fast Leverage Rust to parse, manipulate and render documents using: comra...
New
mudspot
Hi folks, I’d like to announce the release of Prometheus Agents, a set of subagents for Claude Code that cater to the Elixir Phoenix pro...
New

Other popular topics Top

srinivasu
How to handle excepions in elixir? Suppose i have A, B, C ,D, E modules. and each module has get() function. A.get() method will call th...
New
dotdotdotPaul
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
yawaramin
In the Dialyzer docs ( http://erlang.org/doc/man/dialyzer.html#requesting-or-suppressing-warnings-in-source-files ), there is a way to tu...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
vac
Hi, I'm quite new in Elixir and I'm trying to format a string to a PEM format. I have the certificate value like MIIDBTCCAe2...... and ...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New

We're in Beta

About us Mission Statement