Skip to content

TaskoraThe task queue Node.js deserves

TypeScript-first, batteries-included distributed task queue for Node.js.

Taskora

Quick Start โ€‹

sh
npm install taskora ioredis
sh
yarn add taskora ioredis
sh
pnpm add taskora ioredis
sh
bun add taskora ioredis
ts
import { createTaskora } from "taskora"
import { redisAdapter } from "taskora/redis"

const taskora = createTaskora({
  adapter: redisAdapter("redis://localhost:6379"),
})

const sendEmailTask = taskora.task("send-email", async (data: { to: string; subject: string }) => {
  // your email logic here
  return { messageId: "abc-123" }
})

// Dispatch returns immediately โ€” type-safe input and output
const handle = sendEmailTask.dispatch({ to: "user@example.com", subject: "Hello" })
const result = await handle.result // { messageId: "abc-123" }

// Start processing
await taskora.start()

Battle-Tested Across Runtimes โ€‹

Test

Taskora is new, but it is not untested. Every commit and every pull request runs the complete 300-test integration suite against every supported runtime and every supported Redis driver โ€” in parallel, in CI, on GitHub Actions.

Taskora cross-runtime test matrix Five CI cells: Node 24 + ioredis, Node 20 + ioredis, Bun 1.3+ + ioredis, Bun 1.3+ + Bun.RedisClient, and Deno 2.x + ioredis. Each cell passes 300 of 300 integration tests, totaling 1,500 live-Redis test runs per push. Battle-tested on every pushRUNTIME ร— DRIVER MATRIXNode 24 ยท Node 20taskora/redis โ†’ ioredis300 / 300 per version Bun 1.3+taskora/redis/ioredis300 / 300 integration tests Bun 1.3+taskora/redis/bun (Bun.RedisClient)300 / 300 integration testsDeno 2.xtaskora/redis via npm: specifier300 / 300 integration tests1,500 live-Redis integration test runs per push

That is 1,500 real integration test runs against a live Redis on every push โ€” spanning Lua scripts, blocking dequeues, stream subscribers, pub/sub cancellation, distributed leader election, workflow DAG execution, schedulers, debounce / throttle / dedup flow control, and retention-aware DLQ management. See Cross-runtime CI for the full matrix and how to reproduce any cell locally.

What this means for you:

  • If your app runs on Node, you get the battle-tested default.
  • If your app runs on Bun, you can drop the ioredis peer dependency entirely and use taskora/redis/bun โ€” the native path is covered by the same 300 tests.
  • If your app runs on Deno, the ioredis path works under Deno's npm compatibility layer โ€” again, same 300 tests.
  • A release cannot ship with any matrix cell red: the publish workflow is gated on green tests.
bash
# Reproduce any matrix cell locally
bun run test:node          # Node   + ioredis
bun run test:bun:ioredis   # Bun    + ioredis
bun run test:bun           # Bun    + Bun.RedisClient
bun run test:deno          # Deno   + ioredis

Released under the MIT License.