<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="RustQueue: background jobs without infrastructure. Add persistent job processing to any Rust app with zero external dependencies.">
<title>RustQueue | Background Jobs Without Infrastructure</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600&family=Manrope:wght@400;500;700;800&family=Syne:wght@500;700;800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/dashboard/landing.css">
</head>
<body>
<div class="scene" aria-hidden="true">
<div class="orb orb-a"></div>
<div class="orb orb-b"></div>
<div class="orb orb-c"></div>
</div>
<header class="nav-shell reveal">
<nav class="container nav">
<a href="/" class="logo" aria-label="RustQueue home">
<span class="logo-mark"></span>
<span class="logo-text">RustQueue</span>
</a>
<div class="nav-links">
<a href="#how-it-works">How It Works</a>
<a href="#features">Features</a>
<a href="#get-started">Get Started</a>
<a href="/blog/background-jobs-without-redis">Blog</a>
</div>
<a class="btn btn-ghost" href="/dashboard">Open Dashboard</a>
</nav>
</header>
<main>
<section class="hero container">
<div class="hero-copy reveal">
<p class="eyebrow">No Redis. No RabbitMQ. No external services.</p>
<h1>Background Jobs <span>Without Infrastructure</span></h1>
<p class="lead">
Add persistent, crash-safe background job processing to any Rust application.
Three lines of code. Zero operational overhead.
</p>
<div class="hero-code">
<pre><code><span class="kw">let</span> rq = RustQueue::redb(<span class="str">"./jobs.db"</span>)?.build()?;
rq.push(<span class="str">"emails"</span>, <span class="str">"send-welcome"</span>, json!({<span class="str">"to"</span>: <span class="str">"a@b.com"</span>}), None).<span class="kw">await</span>?;
<span class="comment">// That's it. The job is persisted. It survives crashes.</span></code></pre>
</div>
<div class="hero-cta">
<a class="btn btn-primary" href="#get-started">Get Started</a>
<a class="btn btn-ghost" href="https://github.com/ferax564/rustqueue">View Source</a>
</div>
</div>
<div class="hero-side">
<article class="panel panel-stats reveal">
<h2>Single Binary</h2>
<div class="kpis">
<div>
<span class="mono">binary</span>
<strong>6.8 MB</strong>
</div>
<div>
<span class="mono">startup</span>
<strong>10 ms</strong>
</div>
<div>
<span class="mono">idle RAM</span>
<strong>15 MB</strong>
</div>
</div>
</article>
<article class="panel panel-compare reveal">
<h2>Setup Comparison</h2>
<ul class="compare-list">
<li><strong>RustQueue</strong> <code>cargo add rustqueue</code></li>
<li><span class="muted">BullMQ</span> <code>Install Redis + npm i bullmq</code></li>
<li><span class="muted">Celery</span> <code>Install Redis/RabbitMQ + pip install celery</code></li>
</ul>
</article>
</div>
</section>
<section id="how-it-works" class="how-it-works container">
<div class="section-head reveal">
<p class="eyebrow">How it works</p>
<h2>Start Embedded. Grow Into a Server.</h2>
</div>
<div class="growth-path">
<article class="growth-step reveal">
<div class="step-num">1</div>
<h3>Import the Library</h3>
<p>Add <code>rustqueue</code> to your Cargo.toml. Use it directly in your app — no server process, no network, no config file.</p>
<pre class="code-sm"><code>let rq = RustQueue::redb("./jobs.db")?.build()?;
rq.push("emails", "welcome", data, None).await?;</code></pre>
</article>
<article class="growth-step reveal">
<div class="step-num">2</div>
<h3>Run as a Server</h3>
<p>When you need language-agnostic access, run the same engine as a standalone server. Same data file, same guarantees.</p>
<pre class="code-sm"><code>rustqueue serve --storage ./jobs.db</code></pre>
</article>
<article class="growth-step reveal">
<div class="step-num">3</div>
<h3>Scale With SDKs</h3>
<p>Connect workers in any language. Node.js, Python, and Go SDKs included — zero runtime dependencies each.</p>
<pre class="code-sm"><code>const rq = new RustQueueClient("http://localhost:6790");
await rq.push("emails", "welcome", { to: "user@a.com" });</code></pre>
</article>
</div>
</section>
<section id="features" class="features container">
<div class="section-head reveal">
<p class="eyebrow">Batteries included</p>
<h2>Everything You Need, Nothing You Don't</h2>
</div>
<div class="feature-grid">
<article class="card reveal">
<h3>Crash-Safe Storage</h3>
<p>ACID-compliant embedded database. Jobs persist automatically. Safe to kill -9 at any time.</p>
</article>
<article class="card reveal">
<h3>Retries + Backoff + DLQ</h3>
<p>Fixed, linear, or exponential backoff. Failed jobs land in a dead-letter queue for inspection.</p>
</article>
<article class="card reveal">
<h3>Cron + Interval Scheduling</h3>
<p>Built-in schedule engine. Cron expressions and fixed intervals with pause/resume.</p>
</article>
<article class="card reveal">
<h3>DAG Workflows</h3>
<p>Job dependencies with cycle detection and cascade failure. Multi-step pipelines built in.</p>
</article>
<article class="card reveal">
<h3>Webhooks + WebSocket</h3>
<p>HMAC-signed callbacks on job events. Real-time WebSocket stream for live monitoring.</p>
</article>
<article class="card reveal">
<h3>Observability</h3>
<p>15+ Prometheus metrics, per-queue gauges, latency histograms. Pre-built Grafana dashboard.</p>
</article>
</div>
</section>
<section id="get-started" class="launch container reveal">
<div>
<p class="eyebrow">Get started</p>
<h2>Your First Background Job in Two Minutes</h2>
</div>
<pre class="code"><code># As a library in your Rust project
cargo add rustqueue tokio serde_json anyhow
# Or as a standalone server
cargo install rustqueue && rustqueue serve
# Or with Docker
docker compose up -d</code></pre>
<div class="launch-actions">
<a class="btn btn-primary" href="/dashboard">Open Dashboard</a>
<a class="btn btn-ghost" href="https://github.com/ferax564/rustqueue">View Source</a>
</div>
</section>
</main>
<footer class="footer container">
<p>RustQueue · Background jobs without infrastructure</p>
<p class="mono">MIT OR Apache-2.0</p>
</footer>
</body>
</html>