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.