Free tools Windows power users keep installed
One-click scans. No signup required.
Use an always-on worker when your process must keep running without an inbound HTTP request: continuously polling a queue, watching an external system, maintaining a long-lived connection, or handling work that exceeds Vercel Function duration limits. Use Vercel Cron Jobs for predictable periodic triggers, Vercel Queues for bursty event-driven jobs that need buffering and retries, and Vercel Workflows for multi-step operations that must survive crashes or redeploys. The choice is determined by workload shape, not by whether a task is merely called a “background job.”
Start with the shape of the workload
Vercel’s architecture guidance draws a useful boundary: “A consumer that spins up when an event arrives and disappears once its work is done is exactly what serverless was built for.” That model is ideal when each unit of work has a clear beginning and end. It is not ideal when the application itself must remain resident.
As an Amazon Associate I earn from qualifying purchases.
Classify the trigger before choosing a product:
- Schedule: work should start at a known interval, such as nightly reconciliation or a periodic report. Use Cron Jobs.
- Event: work arrives irregularly from requests, webhooks, or domain events. Use Queues when buffering, independent consumers, or retries matter.
- Durable process: one job contains several dependent steps and must resume after a crash or deployment. Use Workflows.
- Continuous consumption: a process polls, watches, listens, or drains work without an HTTP request. Use a Daemon or another always-on worker.
A single post-response side effect, such as analytics or logging, is a different case again: Vercel maps that to after(). It is not a queue, scheduler, or resident worker, and it does not provide retries or fan-out.
What each Vercel primitive is designed to do
| Primitive | Best fit | Key strengths | Main constraints |
|---|---|---|---|
| Cron Jobs | Fixed periodic work | Simple schedule; available on all plans | Best-effort delivery, no automatic retry, duplicate and overlap risk, and Function duration limits |
| Vercel Queues | Event-driven background jobs | Durable fan-out to independent consumer groups and automatic retries | No built-in dead-letter queue; handling poison messages is application work |
| Vercel Workflows | Durable multi-step jobs | Survives crashes and redeploys; run observability, pause, replay, and time-travel debugging | More structure than a single short task requires |
| Vercel Daemons or other always-on workers | Continuous, non-HTTP consumers | Resident process, queue polling, and no inbound HTTP server required | Always-on capacity and operational cost; verify current product maturity and limits |
| Render background workers | External always-on processing | Long-running workers, cron containers, persistent disks, and no HTTP endpoint requirement | Separate platform and billing model |
These options can be combined. For example, a queue can own delivery state and backpressure while an always-on worker acts as the consumer. The worker is then an implementation detail of consumption, not a replacement for durable messaging.
#1 Best Overall
When an always-on worker is justified
Continuous polling or queue consumption
Choose a resident process when it must repeatedly poll a queue or another system and there is no useful HTTP request to trigger each iteration. A worker can hold an open loop, apply backoff, and immediately fetch the next item instead of starting a new invocation for every message.
This pattern is especially useful when the source has no webhook, when polling cadence must be tighter than a schedule permits, or when connection setup is expensive. Keep delivery state in the queue or source system so a process restart does not silently lose work.
Long-lived connections and watchers
WebSocket clients, database change streams, file watchers, and integrations that require a persistent connection benefit from a resident process. A short-lived Function can respond to an HTTP request, but it is the wrong lifecycle for a connection that must remain open between events. Build reconnect logic, heartbeat handling, and bounded memory use into the worker.
Runtime beyond Function duration limits
If one operation can run longer than the applicable Vercel Function duration, an always-on process may be the appropriate execution environment. That includes large imports, media or data transformations, and consumers that may legitimately process for hours. Do not assume that moving the same handler into a worker solves every problem: define checkpoints, graceful shutdown behavior, and a way to resume after interruption.
Resident state or warm resources
A worker can keep a connection pool, in-memory cache, model, or specialized runtime loaded between jobs. This can reduce setup overhead for sustained traffic, but resident memory is a liability if leaks accumulate. Set health checks, restart policies, and memory alerts, and treat every restart as normal rather than exceptional.
Why a queue is usually better for bursty event work
Queues separate request latency from background processing. A request can enqueue a job and return while consumers process it later, allowing producers and consumers to scale independently. Vercel documents Queues as durable fan-out to independent consumer groups with automatic retries.
Use a queue when:
- Events arrive irregularly or in bursts rather than on a fixed clock.
- Several independent consumers need the same event.
- Backpressure is important because downstream systems have finite capacity.
- A failed delivery should retry automatically.
- Producers must remain responsive even when processing is slow.
Automatic retries do not eliminate failure design. Vercel’s queue guidance leaves poison-message routing to the application. A malformed or permanently failing message can retry repeatedly unless you add attempt limits, monitoring, and a quarantine or dead-letter path. Record an event ID and make the handler idempotent so a retry cannot apply the same side effect twice.
A permanently running worker can consume a queue, but the queue should still own delivery state and backpressure. Bypassing the queue with an in-memory list or an ad hoc polling table forfeits durable recovery when the process, host, or deployment disappears.
Rank #3
When Cron Jobs are the right trigger
Cron is the correct primitive for periodic reconciliation, cleanup, reporting, or polling when a missed run can be recovered and each invocation fits Function limits. Vercel Cron Jobs are available on all plans, with a limit of 100 cron jobs per project in 2026.
| Plan | Scheduling frequency | Precision |
|---|---|---|
| Hobby | Once per day | Per-hour precision, with a possible offset of plus or minus 59 minutes |
| Pro | Once per minute | Per-minute precision |
| Enterprise | Once per minute | Per-minute precision |
These are platform limits and delivery characteristics stated for 2026; check the current plan documentation before committing to a schedule.
Cron is a trigger, not a durable queue. Vercel states, “Vercel will not retry an invocation if a cron job fails.” It also describes delivery as “best effort” and warns that the same scheduled run can occasionally be invoked more than once. If one run lasts longer than the interval, a second instance can start while the first is still active.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minuteMake a Cron handler safe to miss, repeat, or overlap
- Process a time or version range, not one presumed tick. Store the last successful timestamp, sequence, or version and reconcile every outstanding item since that point.
- Use idempotency keys. Persist unique event IDs or a deterministic job key before applying an external side effect.
- Check current state before changing it. A repeated invocation should see that an item is already complete and do nothing.
- Protect unsafe overlap. Add a distributed lock, such as one backed by Redis, when two instances could corrupt shared state.
- Record completion and failure separately. A run that starts but fails halfway through must not advance the checkpoint as if all work completed.
- Alert on missed coverage. Monitor the age of the oldest unprocessed item rather than only whether the HTTP endpoint returned a success code.
When Workflows are a better answer than either option
Some jobs are neither one short function nor an endless consumer. They contain a sequence such as reserve inventory, call a provider, wait for confirmation, and send a notification. Vercel Workflows provide durable multi-step execution that survives crashes and redeploys, with run observability, pause, replay, and time-travel debugging.
Rank #4
Use a Workflow when the important requirement is preserving progress between steps. A queue can deliver the initial event, and a worker can execute a step, but you would otherwise have to build persistence, timers, replay rules, and operator tooling yourself. Conversely, do not introduce a Workflow for a single quick transformation that needs none of that state.
How to decide: a practical sequence
- Ask whether anything must run continuously. If the process polls, watches, maintains a connection, or has no inbound HTTP trigger, start with an always-on worker. If not, continue.
- Ask whether work arrives because of events. For irregular or bursty arrivals, choose a Queue when buffering, fan-out, or retries matter.
- Ask whether the trigger is a clock. For fixed periodic work that fits Function limits, choose Cron and implement reconciliation and idempotency.
- Ask whether there are durable intermediate steps. If the operation must pause, resume, replay, or survive redeploys, choose Workflows.
- Measure the execution envelope. Estimate maximum runtime, concurrency, memory, connection lifetime, and recovery behavior. A task that only occasionally exceeds a limit may need decomposition rather than a permanently running host.
- Choose the operating model. Use a Vercel Daemon where its current availability and limits fit, or an external worker platform when you need a separately managed always-on instance.
- Design failure handling before deployment. Define retries, idempotency, poison-message quarantine, shutdown, observability, and replay procedures.
Common architectures and their trade-offs
Queue plus short-lived consumers
An HTTP handler publishes an event to a Queue. Consumers start when messages are available, process a bounded unit of work, acknowledge success, and exit. This is the default for bursty workloads because capacity follows demand and idle consumers do not need to remain alive.
Queue plus an always-on consumer
The Queue still supplies durability, retries, and backpressure, while a resident worker continuously drains it. This is useful when polling overhead is high, message volume is steady, or processing requires a warm runtime. The trade-off is paying for capacity while idle and operating a process that can fail independently of the queue.
Recommended Free Tools
Cron plus reconciliation
A Cron invocation periodically scans for overdue or incomplete records and repairs them. This is suitable when freshness can be measured in minutes or hours and a missed invocation can be recovered by the next scan. It is not suitable for strict exactly-once timing or immediate event response.
Best Value
Workflow started by a Queue or HTTP request
An event starts a Workflow that persists each step and can pause for an external result. This pattern avoids turning a multi-hour business process into one fragile Function invocation while retaining a clear audit trail.
Cost and scaling differences
Vercel’s comparison describes billing by Active CPU, with idle or no-traffic containers able to scale to zero. Render bills paid instances for wall-clock time, and those instances do not scale to zero. Bursty workloads often align better with Active CPU and scale-to-zero economics; sustained workloads may find per-instance billing more predictable.
Do not compare only the nominal compute rate. Include minimum instance counts, memory, network transfer, storage, queue operations, observability, and the engineering time required to operate a worker. Re-check current pricing and product limits at deployment time because these platform statements can change.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Failure modes to plan for
- Cron invocation fails: no automatic retry occurs. Reconciliation, alerting, and a manually repeatable endpoint or runbook are required.
- Cron invocation duplicates: idempotency keys and state checks prevent duplicate side effects.
- Cron invocations overlap: use a distributed lock or partition work so concurrent runs cannot update the same records unsafely.
- Queue message is poisonous: cap attempts, capture the payload and error, and quarantine it for inspection instead of retrying forever.
- Worker exits during processing: acknowledge only after durable completion, use leases or visibility timeouts where supported, and make the operation restartable.
- Deployment interrupts a resident process: handle termination signals, stop taking new work, finish or release the current lease, and resume from durable state.
- External connection drops: reconnect with exponential backoff, refresh credentials safely, and expose connection health in metrics.
- Worker capacity is exhausted: measure queue age and processing latency, then increase concurrency or capacity without exceeding downstream rate limits.
A concise rule of thumb
Use Cron for a clock, Queues for events, Workflows for durable steps, and an always-on worker for continuous consumption. Cron can schedule a worker, and a worker can consume a Queue, but neither combination changes the underlying responsibility: Cron supplies timing, the Queue supplies durable delivery, the Workflow supplies durable orchestration, and the worker supplies a continuously running execution environment.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

