Project

outboxd

0.0
The project is in a healthy, maintained state
outboxd implements the transactional outbox pattern: stage events atomically alongside your database writes, then dispatch them to pluggable transports. Database-agnostic via ActiveRecord — PostgreSQL, MySQL, and SQLite are all first-class. The durability layer your message bus assumed you already had.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Runtime

 Project Readme

outboxd

A transactional outbox for Ruby with a pluggable dispatcher.

Status: Early Development. outboxd is not yet functional — this gem name is reserved while the first working release is built. Nothing here is ready for use yet; watch the repo if you're curious.

The Idea

When an application updates its database and tells another system about it — a message bus, a job queue, a webhook — doing both naïvely invites inconsistency: the write commits but the publish crashes, or the publish lands and the write rolls back. The well-known transactional outbox pattern fixes this by staging the event in a database table, inside the same transaction as the domain write, and dispatching it from that table asynchronously.

outboxd implements that pattern for Ruby, with:

  • Atomic staging — publish intent commits or rolls back together with your domain write.
  • Pluggable transports — deliver to Sidekiq or anything else you can write a small Ruby class to talk to; transports are a plugin contract, not a baked-in destination.
  • Database agnosticism — PostgreSQL, MySQL, and SQLite are all first-class, via ActiveRecord.
  • Honest per-destination delivery state — each (event, transport) pair has its own lifecycle, retries, and dead-lettering.
  • A separately-run dispatcher daemon — scale and operate delivery independently of your application.

Installation

Not yet — see the status note above.

License

MIT. See LICENSE.txt.