A small, language-agnostic durable job queue.
Built on fjall, sepp offers fully durable queue operations whilst maintaining high throughput.
Warning
As sepp is pre 1.0, expect bugs and other teething issues when running it in production. Please submit an issue if you encounter any problems.
- At-least-once delivery via job leasing.
- Exactly-once enqueue via idempotency keys.
- Atomic and best-effort job enqueuing.
- Batch operations for maximum throughput.
- Bring your own payload format. Sepp only sees opaque bytes with an additional encoding hint.
- Single static Rust binary, embedded storage.
- Built-in web admin UI: live dashboards, job inspection, dead-letter management and an audit log.
- Durable by default. If using the
sync_allpersist mode, all successful operations are guaranteed to befsync-ed. - End-to-end distributed OpenTelemetry tracing across clients and server. The client SDKs inject trace context automatically.
- OpenTelemetry/Prometheus metrics.
- Clients and server talk gRPC. Bring your own client if you wish.
With every operation fsync-ed before it is acknowledged, sepp sustains 1.4x the throughput of BullMQ, roughly 10x beanstalkd and 20x NATS JetStream (200,000 jobs, 256 byte payloads, 50 producers and 50 workers, no batching). Sepp also supports batch enqueue and drain operation, which can dramatically increase throughput even further.
| broker | enqueue jobs/s | drain jobs/s |
|---|---|---|
| sepp | 15,325 | 6,980 |
| beanstalkd | 1,494 | 1,431 |
| Faktory | - | - |
| NATS JetStream | 716 | 724 |
| BullMQ | 10,939 | 5,566 |
Faktory has no fully durable mode. Buffered-mode results, concurrency scaling, methodology and hardware are in the benchmark docs.
Via Cargo:
cargo install sepp --lockedBuild from source:
git clone https://github.com/sepp-org/sepp.git
cd sepp
cargo build --releaseor grab a binary from the releases page.
Start sepp with:
docker run --rm \
-p 50051:50051 -p 9465:9465 \
-v sepp-data:/sepp/sepp-data \
ghcr.io/sepp-org/sepp:latestBy default, sepp listens on 0.0.0.0:50051 with API-key authentication disabled, and persists data to a sepp-data directory in the current working directory. Restrict listen_addr or configure auth before exposing the port beyond your machine. You can generate a config file to edit with sepp config example > sepp.toml. Sepp will pick it up automatically as long as it is named sepp.toml and in the working directory the server is started from, or you can specify a custom path with the SEPP_CONFIG environment variable. Specifying a custom path is also possible via the --config CLI flag.
The admin UI is accessible at http://localhost:9465. Run locally it binds to loopback and requires no login; the Docker image ships a demo login (admin/admin) instead. Change both before exposing the port on a production network.
sepp has official clients for Rust, Python and Node.js. See your preferred language's client SDK for usage instructions.
sepp has in-depth documentation on its docs site. The docs include guides for running sepp in production, configuring it and even building your own client.
sepp is licensed under the Apache License, Version 2.0. See LICENSE for details.