{"id":49164,"library":"relyq","title":"relyq","description":"A Redis-backed reliable task queue and state machine (v0.13.0). Built on four simple queues (todo, doing, failed, done) to ensure tasks are never lost on crash. Features blocking pop, cleanup options, defer support, and pluggable storage backends via subclasses like RedisJsonQ. Latest release: 2015, low maintenance cadence. Alternatives: Bull, Kue, Bee-Queue.","status":"maintenance","version":"0.13.0","language":"javascript","source_language":"en","source_url":"git://github.com/Rafflecopter/node-relyq","tags":["javascript","work-queue","task-queue","queue","distributed","redis"],"install":[{"cmd":"npm install relyq","lang":"bash","label":"npm"},{"cmd":"yarn add relyq","lang":"bash","label":"yarn"},{"cmd":"pnpm add relyq","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Required to create Redis clients for queue operations","package":"redis","optional":false},{"reason":"Used to generate task IDs if not provided","package":"uuid","optional":false}],"imports":[{"note":"Package provides CommonJS exports; no ESM or default export.","wrong":"import Relyq from 'relyq'","symbol":"Relyq","correct":"const Relyq = require('relyq')"},{"note":"Named export via destructuring works in Node 6+ but .RedisJsonQ is also fine.","wrong":"const { RedisJsonQ } = require('relyq')","symbol":"RedisJsonQ","correct":"const RedisJsonQ = require('relyq').RedisJsonQ"},{"note":"Prefix and createRedis are required; omitting createRedis will cause runtime error.","wrong":"const q = new (require('relyq').RedisJsonQ)({ prefix: 'myq' })","symbol":"Queue object","correct":"const q = new RedisJsonQ({ prefix: 'myq', createRedis: () => require('redis').createClient() })"}],"quickstart":{"code":"const redis = require('redis');\nconst RedisJsonQ = require('relyq').RedisJsonQ;\n\nconst q = new RedisJsonQ({\n  prefix: 'myqueue',\n  createRedis: () => redis.createClient()\n});\n\n// Push a task\nq.push({ id: 'task1', data: 'hello' }, (err, len) => {\n  if (err) console.error(err);\n  else console.log('Queue length:', len);\n});\n\n// Process tasks\nq.bprocess(5, (err, task) => {\n  if (err) return console.error(err);\n  if (!task) return console.log('No task');\n  console.log('Processing:', task);\n  // On success\n  q.finish(task, (err) => {\n    if (err) console.error(err);\n    else console.log('Finished');\n  });\n});","lang":"javascript","description":"Shows creation of a RedisJsonQ queue, pushing a task, and blocking process with finish."},"warnings":[{"fix":"Use new Q({ createRedis: () => redis.createClient() }) instead of new Q(redis, opts).","message":"Passing redis client directly to constructor is deprecated; use createRedis option.","severity":"deprecated","affected_versions":">=0.12.0"},{"fix":"Always provide both prefix and createRedis in options object.","message":"Prefix and createRedis are required; omitting them causes silent failure or error.","severity":"gotcha","affected_versions":">=0.12.0"},{"fix":"Pass objects with optional 'id' field; strings or numbers will be coerced but may cause errors.","message":"Task IDs are auto-generated with uuid.v4() if missing; tasks must be objects.","severity":"gotcha","affected_versions":"all"},{"fix":"Listen for 'error' event on the queue instance instead of globally.","message":"Removed .on('error') listener for unhandled errors; errors now emitted on queue object.","severity":"breaking","affected_versions":">=0.11.0"}],"env_vars":null,"search_vec":"'2015':47 'altern':51 'back':5 'backend':40 'bee':55 'bee-queu':54 'block':31 'built':13 'bull':52 'cadenc':50 'cleanup':33 'crash':29 'defer':35 'distribut':65 'done':21 'ensur':23 'fail':20 'featur':30 'four':15 'javascript':57 'kue':53 'latest':45 'like':43 'lost':27 'low':48 'machin':11 'mainten':49 'never':26 'option':34 'pluggabl':38 'pop':32 'queue':8,17,56,60,63,64 'redi':4,66 'redis-back':3 'redisjsonq':44 'releas':46 'reliabl':6 'relyq':1 'simpl':16 'state':10 'storag':39 'subclass':42 'support':36 'task':7,24,62 'task-queu':61 'todo':18 'v0.13.0':12 'via':41 'work':59 'work-queu':58","created_at":"2026-06-07T17:00:22.882849+00:00","updated_at":"2026-06-07T17:00:22.882849+00:00","problems":[{"fix":"Ensure createRedis returns a valid Redis client: createRedis: () => redis.createClient()","cause":"Queue not instantiated because createRedis returned undefined or null.","error":"TypeError: Cannot read property 'push' of undefined"},{"fix":"Add prefix: 'myqueue' to options object.","cause":"Missing 'prefix' option in queue constructor.","error":"Error: prefix is required"},{"fix":"Wrap data in an object: q.push({ id: '1', data: 'value' }, callback)","cause":"Attempted to push a non-object (e.g., string) into queue.","error":"TypeError: task.push is not a function"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/Rafflecopter/node-relyq","github":"git://github.com/Rafflecopter/node-relyq","docs":null,"changelog":null,"pypi":null,"npm":"relyq","openapi_spec":null,"status_page":null,"smithery":null,"categories":["devops"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}