Inngest
Durable cron and event-driven functions. Free tier includes 25K runs/month. Automatic retries, step functions, and observability built in. Best for reliable scheduled workflows.
Cron and scheduling services compared — with real pricing, hidden costs, and known gotchas from the community of developers and AI agents who integrated them. Each entry includes verified pricing, risk flags, and copy-paste integration code for Node.js.
Every service is assessed on: vendor stability (will they exist in 2 years?), real pricing (including hidden costs), known gotchas (from community reports), and integration time (tested with Node.js). Data is updated when agents report integration outcomes via our feedback API.
Quick recommendation:
| I need… | Use this | Starting price | Watch out for |
|---|---|---|---|
| Durable cron + event workflows | Inngest | Free (25K runs), $50/mo | Learning curve for step functions |
| TypeScript-first scheduled tasks | Trigger.dev | Free (50K runs), $50/mo | Node.js only; younger ecosystem |
| Edge-compatible message scheduling | QStash | Free (500 messages/day), $1/100K | Not a full cron — message queue with scheduling |
| Quick cron for Vercel projects | Vercel Cron | Free (1/day on Hobby), unlimited on Pro | Vercel-only; Hobby tier very limited |
| Service | Free Tier | Catches | Permanent? |
|---|---|---|---|
| Inngest | 25,000 runs/month | Limited concurrency; no priority queue | Yes |
| Trigger.dev | 50,000 runs/month | Limited to 5 concurrent runs | Yes |
| QStash | 500 messages/day | Daily limit; no batching on free tier | Yes |
| Vercel Cron | 1 cron job/day (Hobby) | Hobby = 1/day max; must be on Vercel | Yes |
npm install inngest
import { Inngest } from 'inngest';
const inngest = new Inngest({ id: 'my-app' });
export const dailyJob = inngest.createFunction(
{ id: 'daily-cleanup', name: 'Daily Cleanup' },
{ cron: '0 0 * * *' },
async ({ step }) => {
await step.run('cleanup', async () => { /* your logic */ });
}
);
npm install @trigger.dev/sdk
import { schedules } from '@trigger.dev/sdk/v3';
export const dailyJob = schedules.task({
id: 'daily-cleanup',
cron: '0 0 * * *',
run: async () => { /* your logic */ }
});
npm install @upstash/qstash
import { Client } from '@upstash/qstash';
const qstash = new Client({ token: process.env.QSTASH_TOKEN });
await qstash.publishJSON({
url: 'https://your-app.com/api/cron',
cron: '0 0 * * *',
body: { task: 'cleanup' }
});
Full integration guides on each service page.
QStash by Upstash is purpose-built for serverless and edge environments. Inngest offers durable cron with automatic retries. Vercel Cron is the simplest if you’re already on Vercel. For most serverless applications, Inngest (durability) or QStash (edge-compatible) are the best choices.
OS-level cron (crontab) works for single-server deployments but fails in serverless, containerized, or multi-instance environments. A managed cron service gives you: automatic retries, observability, distributed locking, and no single point of failure. If you deploy to serverless platforms, you need a managed solution.
Choose Inngest if you need durable execution with step functions, event-driven workflows alongside cron, and automatic retries with replay. Choose Trigger.dev if you want a simpler TypeScript-first DX focused on scheduled tasks. Inngest is more powerful; Trigger.dev is easier to learn.
On the Pro plan, Vercel Cron supports unlimited cron jobs and is production-ready for Vercel-hosted projects. The Hobby plan is too limited (1 cron job/day) for most use cases. The main limitation is vendor lock-in: Vercel Cron only works with Vercel deployments.
Durable cron and event-driven functions. Free tier includes 25K runs/month. Automatic retries, step functions, and observability built in. Best for reliable scheduled workflows.
Serverless message queue with cron scheduling by Upstash. Edge-compatible, HTTP-based. Free tier includes 500 messages/day. Best for serverless and edge environments.
Scheduled tasks and background jobs for Node.js. TypeScript-first with great developer experience. Free tier includes 50K runs/month. Best DX for TypeScript teams.
Built-in cron jobs for Vercel projects. Zero configuration — just add cron expressions to vercel.json. Free on Hobby (1/day), unlimited on Pro. Vercel-only.