This is purely a comparison of how the libraries are structured and their features. Between building Kiq and Oban I investigated nearly every library in the ecosystem (EctoJob, Exq, Honeydew, Que, Rihanna and Verk). I learned something from each one and owe all of the authors a debt of gratitude.
There are far too many differences between the various libraries to summarize them here. Therefore I’m going to cheat a bit and make a table highlighting the differences between only the libraries you asked about.
| Feature | Oban | EctoJob | Rihanna |
|---|---|---|---|
| perform return | output doesn’t matter | multi transaction | success tuple |
| job scheduling | triggered, polled | triggered, polled | polled |
| args storage | jsonb | jsonb | erlang terms |
| error retention | all full historic errors | none | last error |
| execution time | unlimited | configured timeout | unlimited |
| orphaned jobs | rescued, guarded by locks | inside a transaction | guarded by locks |
| queues | multiple with single table | one per table | single |
| queue limits | configured limit per queue | configured limit per queue | configured globally |
| queue changes | pause, resume, scale | none | none |
| graceful shutdown | worker draining | no | no |
| job cancelling | yes | no | no |
| runtime metrics | with telemetry | no | no |
| historic metrics | with retained jobs | no | no |
| integrations | with telemetry, pubsub | no | no |
This is all based on my understanding of the other libraries through docs, issues and source code. It may not be entirely accurate! If I got anything wrong please let me know (@mbuhot @lpil)




















