Type-Safe End-to-End
Inferred input and output types from handler signature all the way to handle.result. Standard Schema validation on the way in. Zero casts, zero magic strings.
Define a task
TypeScript-first, batteries-included distributed task queue for Node.js.
npm install taskora ioredisyarn add taskora ioredispnpm add taskora ioredisbun add taskora ioredisimport { 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()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.
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:
ioredis peer dependency entirely and use taskora/redis/bun โ the native path is covered by the same 300 tests.# 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