Reliable, strictly-ordered event delivery from PostgreSQL to Kafka: the Transactional Outbox Pattern as a Java library, with Spring Boot autoconfiguration. No CDC, no Kafka Connect. CloudEvents, per-aggregate ordering, replay, and an Admin API with a Go CLI.
https://tandem.codingful.com/ ↗// readme
Tandem
Reliable, strictly-ordered event delivery from your database to Apache Kafka — no CDC, no Kafka Connect, no two-phase commit.
What is Tandem?
Tandem is a Java library that implements the Transactional Outbox Pattern. You insert an
event into an outbox table inside the same transaction that mutates your domain — so the
write is atomic by your database’s ACID guarantees, with no dual-write and no distributed
transaction. A separate relay then polls the outbox and publishes to Kafka, at-least-once,
preserving per-aggregate ordering.
A live, interactive version of this same flow — pause, step back/forward through each stage — is available at tandem.codingful.com/how-it-works.
It targets the gap between a hand-rolled outbox (correct, but every subtle trap is yours to get right) and Debezium/CDC (powerful, but a separate distributed system to operate): no extra infrastructure — just your relational database and Kafka — with the correctness traps already handled.
Why Tandem?
The classic double write — write to the DB, then publish…