Last updated: March 30, 2026
Queuebase vs Quirrel
The Core Difference
Quirrel was a pioneering job queue for serverless apps — it introduced the HTTP callback pattern for Next.js background jobs. Its hosted service shut down in July 2022 after creator Simon Knott was acquired by Netlify. The open-source repo is in maintenance mode with no active development.
Queuebase picks up where Quirrel left off. Same callback architecture, but with a modern TypeScript-first API, built-in CRON scheduling, a monitoring dashboard, and an actively maintained hosted service.
| Quirrel | Queuebase | |
|---|---|---|
| Status | Maintenance mode (hosted service shut down July 2022) | Actively developed and maintained |
| Architecture | HTTP callback | HTTP callback |
| Type Safety | Basic TypeScript (manual payload typing) | tRPC-style router with Zod validation |
| Job Definition | Queue() and CronJob() per-file | createJobRouter() with all jobs in one router |
| Monitoring | Local dev UI only | Full dashboard with job history, metrics, and logs |
| CRON Scheduling | Yes (cron expressions) | Yes (cron expressions and plain English) |
| Hosted Service | Shut down | Available with free tier |
Why Quirrel Users Switch
When Quirrel’s hosted service shut down, users faced a choice:
- Self-host Quirrel — Run the Quirrel Docker image + Redis. This works, but adds operational overhead that defeats the purpose of choosing serverless in the first place.
- Switch to Vercel Cron — Covers scheduled tasks but not delayed jobs or one-off background processing.
- Switch to a general-purpose queue — BullMQ, Inngest, or Trigger.dev. These work, but are more complex than what most Next.js apps need.
Queuebase is the option that didn’t exist when Quirrel shut down: a hosted service with the same callback architecture, built specifically for Next.js, with a modern DX.
Architecture Comparison
Both Quirrel and Queuebase use the same fundamental model: your app defines HTTP endpoints, and the service calls them when jobs are ready to execute. This means jobs run on your own infrastructure with full access to your database, environment variables, and services.
The difference is in how you define and manage jobs.
Quirrel
// pages/api/send-email.ts (one file per queue)
import { Queue } from "quirrel/next";
export default Queue("api/send-email", async (payload: {
to: string;
subject: string;
body: string;
}) => {
await sendEmail(payload);
});
// Enqueue from elsewhere
import sendEmailQueue from "./api/send-email";
await sendEmailQueue.enqueue(
{ to: "user@example.com", subject: "Hello", body: "World" },
{ delay: "5m", retry: ["1min", "5min", "30min"] }
);
Queuebase
// src/jobs/index.ts (all jobs in one router)
import { createJobRouter, job } from "@queuebase/nextjs";
import { z } from "zod";
export const jobs = createJobRouter({
sendEmail: job({
input: z.object({
to: z.string().email(),
subject: z.string(),
body: z.string(),
}),
handler: async ({ input, jobId, attempt }) => {
await sendEmail(input);
return { sent: true };
},
defaults: {
retries: 3,
backoff: "exponential",
},
}),
});
// Enqueue with full type safety
await jobClient.sendEmail.enqueue({
to: "user@example.com",
subject: "Hello",
body: "World",
});
Key DX differences
- Job organization: Quirrel creates one file per queue. Queuebase groups all jobs in a single router, similar to tRPC.
- Type safety: Quirrel relies on manual TypeScript annotations for payloads. Queuebase uses Zod schemas that validate at runtime and generate types for the client.
- Retry configuration: Quirrel uses an array of delay strings. Queuebase uses a declarative config with
retriescount andbackoffstrategy. - Client: Quirrel imports queue functions directly. Queuebase generates a fully typed client from the router — autocomplete for job names, input validation, and type-checked payloads.
Feature Comparison
| Feature | Quirrel | Queuebase |
|---|---|---|
| Runtime validation | No (TypeScript only) | Yes (Zod / Standard Schema) |
| Retries | Array of delay strings (max 10) | Configurable count with linear/exponential backoff |
| CRON scheduling | Yes (cron expressions, timezones) | Yes (cron expressions, plain English, timezones, overlap policies) |
| Delayed jobs | Yes (delay or runAt) | Yes (delay) |
| Exclusive mode | Yes (serial execution per queue) | Per-job concurrency controls |
| Idempotent jobs | Yes (custom id parameter) | Not yet available |
| Bulk enqueue | Yes (enqueueMany, up to 1,000) | Not yet available |
| Dashboard | Local dev UI | Full web dashboard with job history, metrics, and logs |
| Monitoring | None in production | Real-time status, run history, and performance metrics |
| Hosted service | Shut down (July 2022) | Available with free tier (10,000 jobs/month) |
| Self-hosted | Docker + Redis | CLI + SQLite (local dev) |
| Framework support | Next.js, Blitz.js, Nuxt, SvelteKit, Netlify | Next.js (primary), Node.js |
| Active development | No | Yes |
Pricing Comparison
| Quirrel | Queuebase | |
|---|---|---|
| Hosted service | Shut down | Free: 10,000 jobs/month, 5 concurrent, 7-day retention |
| Self-hosted | Free (requires Docker + Redis) | Free (CLI for local dev) |
| Pro tier | N/A | $29/month: 100,000 jobs, 50 concurrent, 30-day retention |
When Quirrel Might Still Work
- Existing projects: If you already have Quirrel self-hosted with Redis and it’s stable, there’s no urgent reason to migrate.
- Quirrel-specific features: Idempotent jobs via custom IDs and
enqueueManyfor bulk operations aren’t in Queuebase yet.
When to Choose Queuebase
- New projects: Starting fresh with Next.js background jobs — Queuebase is actively maintained with modern DX.
- Leaving self-hosted Quirrel: You don’t want to manage Docker + Redis just to run background jobs.
- Production monitoring: You need visibility into job status, failures, and performance beyond local dev.
- Type safety: You want runtime validation and a fully typed client, not just TypeScript annotations.
- CRON scheduling: You want dashboard-managed schedules with plain English support, overlap policies, and manual triggers.
Summary
Quirrel was ahead of its time — it proved that the HTTP callback model is the right architecture for serverless background jobs. But with its hosted service shut down and the project in maintenance mode, teams building new Next.js apps need an actively maintained alternative. Queuebase carries forward the same callback architecture with a modern tRPC-style API, Zod validation, a production monitoring dashboard, and a hosted service with a generous free tier.
Question: What is the best alternative to Quirrel for Next.js? Answer: Queuebase is the closest alternative to Quirrel. It uses the same HTTP callback architecture, is built specifically for Next.js, and is actively maintained with a hosted service. For teams that need complex workflows or long-running tasks beyond simple job queuing, Inngest or Trigger.dev are also worth evaluating.