In CeleRS 0.2.0, a chord nested inside a chain was silently dropped, the worker pool ran a simulated sleep-only loop instead of your actual tasks, and “envelope encryption” was a mock XOR cipher with no integrity check at all.
Today we released CeleRS 0.3.0 — a release that spent as much energy replacing what was fake with what is real as it did adding anything new. Every broker crate cut over from sqlx to the pure-Rust oxisql-postgres/oxisql-mysql, every HTTP call site cut over from reqwest to oxihttp-client, and a full audit of “looks implemented” code turned up — and fixed — six separate places where the system was quietly doing less than it claimed.
No C. No sqlx’s C-adjacent TLS chain. No mock crypto pretending to be a cipher.
Zero sqlx or reqwest dependency declarations remain anywhere in the workspace.
Just a task queue that does, honestly, what its API says it does — and compiles to a single static binary that runs everywhere, from laptops to Kubernetes clusters.
Why CeleRS 0.3.0 is a game changer
The 0.2.0 release was feature-complete on paper. In practice, a source-level audit found real gaps between the API surface and what actually ran:
- Chord callbacks nested inside a Chain or Group were silently dropped instead of enqueued
- The worker pool’s job-execution path was a simulated
sleep, not real submitted work - Redis envelope “encryption” was XOR with no authentication tag — anything “decrypted” without any integrity check
- Kombu’s compression and signing middleware recorded nothing on publish, so consume-side decompression/verification was a no-op
- Beat’s crontab
day_of_weekused the wrong numbering —"1-5"fired Sunday–Thursday instead of Monday–Friday - DLQ replay used one fixed retry strategy regardless of whether the original failure was transient or permanent
CeleRS 0.3.0 ends all of that.
Concrete wins from this release:
- Zero
sqlx/reqwestanywhere in the workspace — the default-featurecelers-clibinary is now fully free of thering/aws-lc-syschain those dependencies used to pull in - Real AES-256-GCM + ChaCha20-Poly1305 envelope encryption (
aes-gcm/chacha20poly1305), replacing the mock XOR cipher, with authenticated-tag verification on every decrypt - Real chord/chain execution end-to-end: nested chord callbacks enqueue correctly, chain continuation carries real result bytes forward, and the worker pool executes genuine submitted work via a work-stealing job channel
- SQL-injection hardening: table/column identifiers validated against
^[A-Za-z_][A-Za-z0-9_]*$before interpolation, task-state filters parsed through a closed-vocabulary enum instead of raw string splicing - 18 crates, 5,676 tests passing (
--all-features), zeroclippy -D warnings, zerounwrap()in production code paths touched this cycle
Technical Deep Dive: What Changed Under the Hood
-
Core & Protocol Layer (
celers-core,celers-protocol,celers-kombu) Message creation timestamps (MessageHeaders.created_at) for age tracking, real bidirectional protocol v2↔v5 migration with version stamping, a native v5 wire-format builder, and a YAML serializer alongside a pluggableCustomSerializerRegistry. -
Broker Layer & the Pure-Rust Migration (
celers-broker-postgres,celers-broker-sql,celers-broker-redis,celers-broker-amqp,celers-cli)sqlx→oxisql-postgres/oxisql-mysql,reqwest→oxihttp-client. The port itself surfaced real bugs — a hardcodedTlsMode::Disabledthat silently downgradedsslmode=requireconnections to plain-text was caught and fixed before it shipped, via a sharedtls_mode.rshelper across all five migrated crates. -
Workflow & Scheduling (
celers-canvas,celers-beat,celers-worker) DAG visualization (DagVisualize::to_mermaid()/to_dot()), workflow loops and sub-workflow composition, versioned workflow serialization with aMigrationRegistry, holiday-calendar business-day arithmetic, schedule-conflict detection, and the Unix→Quartzday_of_weekfix for crontab scheduling. -
Enterprise Security & Observability (
celers-core,celers-metrics) HMAC-SHA256 task signature verification, configurable argument sanitization, PII detection/masking (email/phone/Luhn-checked card/SSN), native Prometheus histograms with a self-implemented P² streaming quantile estimator, a pure-UdpSocketStatsD backend, SLA/SLO burn-rate alerting, and EWMA-based anomaly detection.
Getting Started
[dependencies]
celers-core = "0.3"
celers-protocol = "0.3"
celers-broker-redis = "0.3"
celers-worker = "0.3"
celers-macros = "0.3"
tokio = { version = "1", features = ["full"] }
Define a task with the procedural macro, then start a worker against it:
use celers_macros::task;
use celers_core::Result;
#[task]
async fn add(x: i32, y: i32) -> Result<i32> {
Ok(x + y)
}
// Generates `AddTask` (implements `Task`) and `AddTaskInput { x: i32, y: i32 }`.
use celers_broker_redis::RedisBroker;
use celers_core::TaskRegistry;
use celers_worker::{Worker, WorkerConfig};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let broker = RedisBroker::new("redis://localhost:6379", "celers")?;
let registry = TaskRegistry::new();
registry.register(AddTask).await;
let config = WorkerConfig {
concurrency: 4,
max_retries: 3,
default_timeout_secs: 300,
..Default::default()
};
let worker = Worker::new(broker, registry, config);
worker.run().await?;
Ok(())
}
No Redis handy? Swap in InMemoryBroker + InMemoryResultBackend from celers-core and the same code runs with zero external services.
What’s New in 0.3.0
- Real nested chord/chain execution, and a worker pool that executes genuine submitted work instead of simulating it
- Pure-Rust migration complete:
sqlx→oxisql-postgres/oxisql-mysql,reqwest→oxihttp-client, workspace-wide - Real AES-256-GCM + ChaCha20-Poly1305 envelope encryption, and SQL-injection hardening across the Postgres/MySQL brokers
- Kombu compression, signing, and health-check middleware now do real work instead of being silent no-ops
- Beat gains holiday calendars, business-day arithmetic, schedule-conflict detection, and missed-task catch-up policies
- Canvas gains DAG visualization (Mermaid/DOT export), workflow loops, sub-workflow composition, and versioned migration
- A major CLI expansion:
metrics/monitorcommands,replay,loadtest/simulate, connection pooling + TTL caching, structured JSON/TCP logging, user-defined aliases, an interactive setup wizard, incremental backup/restore, adepsdependency-graph visualizer, and HTML reports with inline SVG charts
Tips
- Develop without infrastructure:
InMemoryBroker/InMemoryResultBackendgive you full trait coverage with zero external services — ideal for tests and local iteration. - Bootstrap a config interactively:
celers init --wizardwalks through broker selection with a live connection test, queue/worker sizing, and dev/staging/prod profiles. - Ship structured logs:
celers --log-format json --log-sink file:/var/log/celers.log workerstreams newline-delimited JSON to a file (ortcp:host:port) instead of stdout text. - Save yourself typing:
celers alias add w "worker --concurrency 8"— then just runcelers w. - Visualize before you ship a workflow:
DagVisualize::to_mermaid()on any Chain/Group/Chord renders straight into a Markdown-embeddable diagram. - Get a chart, not just a table:
celers report queues --format html --output queues.htmlembeds an inline SVG bar chart above the data.
This is the foundation
CeleRS is the distributed task queue backend for the COOLJAPAN stack:
- SciRS2 / NumRS2 — scientific workflow orchestration and batch processing
- OxiMedia / VoiRS — media transcoding and voice synthesis pipelines
- OxiGDAL — geospatial data processing jobs
- Spintronics / OxiHuman — physics simulation and biomechanical modeling tasks
- OxiLLaMa / OxiONNX — LLM and model inference jobs
- RusMES — mail processing and archival workflows
Repository: https://github.com/cool-japan/celers
Star the repo if you want a task queue that doesn’t just claim to work end-to-end — it’s now audited to.
The era of task queues that quietly mock the hard parts is over.
Pure Rust, honestly implemented, fully sovereign — CeleRS 0.3.0 is here.
— KitaSan at COOLJAPAN OÜ July 13, 2026