finds.dev← search

// the find

actionhero/node-resque

★ 1,416 · TypeScript · Apache-2.0 · updated Jul 2026

Node.js Background jobs backed by redis.

node-resque is a Redis-backed background job queue for Node.js that stays API-compatible with Ruby's Resque and Sidekiq. It handles delayed jobs, priority queues, retries, and job locking out of the box. The target is any Node shop that wants battle-tested queue semantics without adopting a separate queue service.

The Resque wire-protocol compatibility is real — you can share queues with Ruby workers and use existing Resque UI tools, which is a genuine differentiator over newer JS-only queues. The MultiWorker auto-scales worker concurrency based on event loop lag rather than a static pool size, which is a smart fit for I/O-heavy jobs. The plugin system is clean: four lifecycle hooks, easy to compose, and the bundled plugins (JobLock, QueueLock, Retry, DelayQueueLock) cover the cases you'll hit in production. TypeScript throughout with generated TypeDoc means you get accurate types and up-to-date API docs without digging through source.

The stuck-worker detection relies on a heartbeat timer that can miss if your job saturates the event loop CPU — the README admits this but offers no solution beyond 'use async code', which isn't always possible. Delayed jobs don't guarantee execution time, only enqueue time, so if you have a backed-up queue your 'scheduled at noon' job might run at 2pm with no visibility into the lag. There's no built-in priority beyond named queues processed in the order you list them, so priority is a naming convention you have to design yourself. The Redis dependency is single-node by default; Cluster support exists but the namespace/keyPrefix behavior has known footguns (documented in a GitHub issue link, not in the config docs).

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →