Ship background jobs
without the infra.
RELAY is an edge-native job queue. Enqueue from your API, execute at the edge, sleep soundly — dead-letter queues, retry policies, and real-time observability built in from day one.
1B+
jobs processed in beta
40+
edge regions
<50ms
median cold start
Trusted by teams building at scale
The problem
Background jobs are simple in theory.
In production, they're a nightmare.
You start with a simple queue. Then you need retries. Then a dead-letter queue. Then observability. Then regions. Six months later, you're maintaining infra you never wanted.
Silent failures
Jobs fail and disappear. No alert, no trace, no way to know what went wrong or replay it.
3am alerts
A worker crashes, a queue backs up, users don't get their receipts. You're debugging at midnight.
Infra sprawl
SQS queues, Lambda functions, CloudWatch alarms, DLQ redrive policies — all for a simple email send.
Zero observability
How many jobs ran today? What's the p99 latency? Which queue is backed up? Nobody knows.
Type-unsafe glue code
JSON.parse() with `any` types, magic string queue names, no compile-time safety between enqueue and handler.
Single-region lock-in
Your workers run in one region. Your users are everywhere. Latency is a feature you forgot to ship.
RELAY solves all of this. Out of the box. No config files.
Features
Everything you need. Nothing you don't.
RELAY is designed for developers who want to ship features, not manage queues.
Edge-native execution
Jobs run in 40+ edge regions worldwide — milliseconds from your users.
No cold starts. No region pinning. RELAY automatically routes each job to the nearest healthy worker, with automatic failover in under 200ms.
Dead-letter queues built in
Failed jobs don't disappear. Every failure is captured, inspectable, and retryable.
Configure retry policies with exponential backoff. Inspect payloads, stack traces, and execution logs from the dashboard. Replay any job with one click.
Real-time observability
See every job's status, latency, and error in a live dashboard.
Stream job logs in real time. Set alerts on queue depth, p99 latency, or failure rate. Export metrics to Datadog, Prometheus, or your own sink.
P50 latency
23ms
P99 latency
142ms
Error rate
0.02%
SDK-first, not YAML-first
Define jobs in code, not config files. Type-safe from enqueue to execution.
First-class SDKs for Node.js, Python, Go, and Rust. Full TypeScript generics — your payload type flows from enqueue() to the handler with zero casting.
// TypeScript — generic flows through const processOrder = relay.defineJob<OrderPayload>( id: "process-order", async handler(payload) // payload is typed payload.orderId; // string payload.amount; // number , ); // Enqueue — compile error if payload wrong await processOrder.enqueue( orderId: "ord_abc", amount: 4999, );
How it works
From zero to production in 15 minutes.
No infrastructure to provision. No queues to manage. Just define, enqueue, ship.
Define your job
Use the SDK to write a typed job handler. Set retry policies, timeouts, and queue routing — in code, not config.
relay.defineJob({
id: "send-invoice",
queue: "billing",
retries: 5,
timeout: "30s",
handler: async (payload) => { ... }
}) Enqueue from anywhere
Call .enqueue() from your API, webhook handler, or scheduled function. RELAY routes to the nearest edge worker instantly.
await sendInvoice.enqueue({
userId: "usr_123",
amount: 4999,
});
// -> job_7xnm | eu-west-1 | 21ms Monitor and recover
Every execution is logged, every failure is captured in the DLQ, and every metric is in your dashboard — real time.
SDK examples
Integrate in minutes.
First-class SDKs for every major language. Or use the HTTP API from anywhere.
import { relay } from "@relay/sdk";
const generateReport = relay.defineJob({
id: "generate-report",
queue: "analytics",
retries: 3,
timeout: "5m",
async handler(payload: { reportId: string; format: "pdf" | "csv" }) {
const data = await fetchReportData(payload.reportId);
const file = await renderReport(data, payload.format);
await storage.upload(`reports/${payload.reportId}.${payload.format}`, file);
await notify.email({ template: "report-ready", data: { reportId } });
},
});
// Enqueue from your Express/Next.js API
app.post("/reports", async (req, res) => {
const job = await generateReport.enqueue({
reportId: req.body.id,
format: "pdf",
});
res.json({ jobId: job.id, status: "queued" });
}); Integrates with your stack
Performance numbers
< 50ms
Median cold-start
P50 job handler boot time across all regions
40+
Edge regions
Jobs route to the nearest healthy worker automatically
99.99%
Uptime SLA
Enterprise plan — measured over rolling 30 days
1B+
Jobs processed
Across all beta customers in the past 90 days
What teams say
Developers ship faster with RELAY.
“We moved our email and webhook delivery from a hand-rolled SQS setup to RELAY in one afternoon. The DX is on another level — I wrote less code than the IAM policy I deleted.”
“The dead-letter queue alone is worth it. Before RELAY we'd get paged at 3am because a failed job silently dropped. Now every failure is captured, inspectable, and I can replay it from my phone.”
“We process 40 million background jobs a day. RELAY handles it without a single ops ticket. Our infra team spent two weeks building the old system. With RELAY, two engineers got the same throughput in a day.”
Pricing
Start free. Scale when you need to.
No credit card for Hobby. Straightforward pricing as you grow.
Hobby
For side projects and early experiments. No credit card required.
- 100,000 job executions / month
- 3 queues
- 5 edge regions
- 72-hour log retention
- Community support
- + 1 more features
Pro
For growing teams that need reliability, observability, and scale.
- 10M job executions / month
- Unlimited queues
- 40+ edge regions
- 30-day log retention
- Priority email support
- + 4 more features
Enterprise
For teams with compliance, SLA, and volume requirements.
- Unlimited executions
- Unlimited queues
- Private edge regions
- 1-year log retention
- Dedicated Slack support & SLA
- + 5 more features
RELAY vs building it yourself
estimated savings / month| What you're avoiding | DIY est. cost | With RELAY Pro | You save |
|---|---|---|---|
| SQS + Lambda infra setup | ~8 hrs eng | 0 hrs | $800+ |
| DLQ monitoring + alerts | ~4 hrs / mo | Built in | $400+ |
| Multi-region job routing | $200+ / mo | Included | $200+ |
| Ops overhead (on-call, fixes) | ~6 hrs / mo | 0 hrs | $600+ |
| Total monthly savings | $49 / mo | $2,000+ | |
Engineering time estimated at $100/hr. Infrastructure costs vary. RELAY Pro at $49/mo.
FAQ
Common questions, straight answers.
Managed queues give you the pipe; RELAY gives you the whole plumbing system. You get SDK-native job definitions, built-in dead-letter queues with replay, real-time dashboards, edge execution, and a retry engine — all without writing a single line of infrastructure config. SQS is infrastructure. RELAY is a job platform.
None. RELAY is fully serverless. You write your job handler, push it with the CLI, and RELAY provisions the compute at the edge on every enqueue. You never touch a server, a Kubernetes deployment, or an IAM role.
Job payloads are limited to 256 KB on all plans. If your job needs larger data, the recommended pattern is to store the payload in object storage (S3, R2, GCS) and pass a reference URL in the job. Our docs include a working example of this pattern.
Both. RELAY supports on-demand enqueue via SDK, HTTP, or webhook trigger. It also supports cron schedules with full observability — view upcoming runs, edit the schedule, and see historical run history per schedule.
The default job timeout is 30 seconds. Pro and Enterprise plans can configure per-queue or per-job timeouts up to 15 minutes. Timed-out jobs are automatically sent to the dead-letter queue with a TIMEOUT error code.
RELAY is SOC 2 Type II certified. We process data only in regions you configure, support data residency requirements on Enterprise, and can sign a Data Processing Agreement (DPA). Contact our team for compliance documentation.
Private Beta
Ship faster.
Sleep better.
Join 1,200+ developers on the RELAY waitlist. No credit card. Early access starts Q3 2026.
No spam. Unsubscribe at any time.