Queuebase
← Back to home

Last updated: March 30, 2026

Queuebase vs Trigger.dev

The Core Difference

Trigger.dev (v3/v4) is a Managed Runtime. When you deploy, they bundle your code into a Docker image and run it on their specialized MicroVMs.

Queuebase is an Orchestration Layer. Your code stays in your Next.js app on Vercel/Railway. Queuebase simply tells your app when to run it.

FeatureQueuebaseTrigger.dev
Execution PathYour server (via Callback)Trigger.dev’s MicroVMs
ComplexityZero-config; use your existing Env VarsRequires CLI-based deploys & separate build step
Type SafetyIntegrated tRPC-style (Zod)SDK-based with manual task definitions
Timeout LimitsNone (Uses HTTP heartbeat/callback)None (Managed runtime)
Local DevJust run npm devRequires npx trigger.dev dev tunnel
PricingFixed per-job (Predictable)Compute-based (vCPU/sec + Invocations)

Why Choose Queuebase?

  1. Zero Cold Starts: Since your code is already running in your app, there’s no “spinning up” a new container for a task.
  2. Standard DX: No custom build extensions or Docker issues. If it works in your Next.js API route, it works in Queuebase.
  3. Privacy & Security: Your sensitive database credentials never leave your infrastructure. Queuebase never sees your secrets; it only sends a signed webhook to trigger your job.

Architecture Deep Dive

The fundamental architectural difference is where your code runs.

Trigger.dev deploys your task code to its own managed, container-based runtime. When you trigger a task, Trigger.dev spins up an isolated container, executes your code, and manages the full lifecycle. Their checkpoint-resume system can pause execution (e.g., during a wait.for call), snapshot the container state, and resume it later — meaning you don’t pay for compute while waiting.

Queuebase uses a callback model. Your job handler code lives in your existing application (e.g., a Next.js API route). When a job is ready to run, the Queuebase service makes an HTTP POST to your app’s callback endpoint. Your app executes the job and returns the result. Jobs run on your own infrastructure — your existing Vercel deployment, your own server, wherever your app already runs. No separate deployment step, no additional containers.

AspectTrigger.devQueuebase
Execution environmentManaged containers (cloud or self-hosted)Your existing app infrastructure
DeploymentSeparate deploy step (npx trigger.dev deploy)No separate deploy — jobs ship with your app
State during waitsCheckpointed, container pausedN/A (callback completes and returns)
Infrastructure overheadManaged for you (or self-hosted Docker/K8s)None beyond your existing app

Developer Experience

Defining a job in Queuebase

// src/jobs/index.ts
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 from anywhere
await jobClient.sendEmail.enqueue({
  to: "user@example.com",
  subject: "Hello",
  body: "World",
});

Defining a task in Trigger.dev

// src/trigger/send-email.ts
import { task } from "@trigger.dev/sdk/v3";

export const sendEmail = task({
  id: "send-email",
  retry: {
    maxAttempts: 3,
    factor: 2,
    minTimeoutInMs: 1000,
    maxTimeoutInMs: 30000,
  },
  run: async (payload: { to: string; subject: string; body: string }) => {
    await sendEmail(payload);
    return { sent: true };
  },
});

// Trigger from your app
await sendEmail.trigger({
  to: "user@example.com",
  subject: "Hello",
  body: "World",
});

Key DX differences

  • Queuebase: Router-based grouping (all jobs in one place), type-safe client generated from the router, handler is a one-liner in your API route.
  • Trigger.dev: Tasks are standalone files/exports, richer built-in primitives (wait, retry, queue config), requires a deploy step and CLI setup.

Feature Comparison

FeatureTrigger.devQueuebase
Type safetyTypeScript, optional Zod via schemaTaskTypeScript, Zod required on all jobs
RetriesConfigurable (maxAttempts, backoff factor, jitter)Configurable (retries, linear/exponential backoff)
Cron / SchedulingBuilt-in with timezone supportYes, with plain English or cron expressions
Long-running tasksNo timeouts, checkpoint-resumeLimited by your app’s execution timeout
Durable executionYes — checkpoint/resume, waitpointsNo
Concurrency controlsPer-task, per-queue, priority levelsPer-job-type concurrency
Local devnpx trigger.dev devqueuebase dev
DashboardBuilt-in cloud dashboard with tracesDashboard app included
Framework supportNext.js, Remix, Astro, Express, SvelteKitNext.js (primary), Node.js
Self-hostingDocker Compose or Kubernetes (complex)Hosted service
Batch operationsbatchTrigger() for bulk enqueuingNot yet available
Subtasks / fan-outtriggerAndWait(), fan-out patternsNot yet available
Open sourceYes (Apache 2.0)No

Pricing Comparison

Trigger.devQueuebase
Free tier$5/month compute credit, 10 concurrent runs10,000 jobs/month, 5 concurrent, 7-day retention
Pricing modelPay for compute time (tasks run on their machines)Pay per job run (no compute charges)
Compute costs$0.0000169-$0.000680/sec depending on machine sizeNone — jobs run on your infra
Self-hostedFree (requires Docker/K8s setup)Free (CLI + SQLite local, API + Postgres prod)

The key pricing distinction: Trigger.dev charges for the compute time your tasks consume on their infrastructure. Queuebase charges per job but your compute costs are whatever you already pay for your hosting — there are no additional compute charges.

When to Choose Trigger.dev

  • Long-running tasks: Video processing, AI inference, multi-step workflows running for minutes or hours
  • Durable execution: Workflows that wait for external events, fan out to subtasks, and resume reliably
  • Cron/scheduled tasks: Built-in scheduling with timezone and DST support
  • Managed infrastructure: You don’t want to think about where jobs run or how they scale
  • Advanced queue management: Priority queues, dynamic concurrency keys, pause/resume

Trigger.dev is a more feature-complete platform. If your use case involves complex workflows or long-running operations, it is the more capable option today.

When to Choose Queuebase

  • Simplicity: Define jobs, enqueue with a typed client, done. No separate deploy step.
  • Jobs on your own infrastructure: No vendor lock-in for execution — your handlers are just functions in your codebase
  • No compute charges: You already pay for your hosting. Queuebase doesn’t charge again for CPU time.
  • tRPC-style DX: Router-based job definitions with fully typed clients
  • Tight Next.js integration: One-liner route handler, server action enqueuing, zero-config local dev
  • Predictable costs: Job-based pricing is easier to forecast than compute-time pricing

Summary

Trigger.dev and Queuebase solve the same core problem with fundamentally different architectures. Trigger.dev is a more feature-rich, mature platform that manages execution infrastructure for you, excelling at long-running tasks, durable workflows, and complex scheduling. Queuebase takes a simpler approach where jobs run on your existing infrastructure via callbacks, resulting in no compute charges, no vendor lock-in for execution, and a streamlined developer experience that feels like a natural extension of your Next.js app.


Question: Is Queuebase or Trigger.dev better for Next.js? Answer: If you want a “deploy and forget” experience using your existing Vercel infrastructure, Queuebase is better due to its tRPC-like simplicity. If you need to run AI agents that require custom system dependencies (like FFmpeg or Python) inside the worker, Trigger.dev is the better choice.