{"id":45021,"library":"glide-mq","title":"glide-mq","description":"High-performance message queue for Node.js (v0.15.3) built on Valkey/Redis Streams with Rust NAPI bindings via valkey-glide, achieving 1 RTT per job through server-side function calls (FCALL). Actively maintained with weekly releases. Differentiators include AI-native primitives (cost tracking, token streaming, model failover, budget caps, human-in-the-loop suspend/resume, TPM rate limiting, vector search), hash-tag clustering for zero-config Valkey clusters, and up to 38% higher throughput than Bull/BullMQ. Ships TypeScript types, requires Node >=20, and has optional peer dependencies on OpenTelemetry and Express.","status":"active","version":"0.15.3","language":"javascript","source_language":"en","source_url":"https://github.com/avifenesh/glide-mq","tags":["javascript","queue","job","message","valkey","redis","streams","worker","task","typescript"],"install":[{"cmd":"npm install glide-mq","lang":"bash","label":"npm"},{"cmd":"yarn add glide-mq","lang":"bash","label":"yarn"},{"cmd":"pnpm add glide-mq","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Optional telemetry support for tracing queue operations","package":"@opentelemetry/api","optional":true},{"reason":"Optional peer dependency for dashboard/webhook endpoints (>=4.18)","package":"express","optional":true}],"imports":[{"note":"ESM-only since v0.15; CJS require is functional but deprecated. Use named import.","wrong":"const Queue = require('glide-mq').Queue","symbol":"Queue","correct":"import { Queue } from 'glide-mq'"},{"note":"Typical usage paired with Queue. Worker options must include 'connection'.","symbol":"Worker","correct":"import { Worker } from 'glide-mq'"},{"note":"glide-mq uses 'Flow' instead of BullMQ's 'FlowProducer'. Flow orchestrates parent-child DAGs.","wrong":"import { FlowProducer } from 'glide-mq'","symbol":"Flow","correct":"import { Flow } from 'glide-mq'"},{"note":"TypeScript users should import Job type for worker function parameter typing.","symbol":"type Job","correct":"import type { Job } from 'glide-mq'"},{"note":"Default export is the GlideMQ class (singleton), not commonly used; prefer named imports.","wrong":"import * as glideMq from 'glide-mq'","symbol":"default export","correct":"import glideMq from 'glide-mq'"}],"quickstart":{"code":"import { Queue, Worker } from 'glide-mq';\n\nconst connection = { addresses: [{ host: 'localhost', port: 6379 }] };\nconst queue = new Queue('tasks', { connection });\n\nawait queue.add('send-email', {\n  to: 'user@example.com',\n  subject: 'Welcome',\n});\n\nconst worker = new Worker(\n  'tasks',\n  async (job) => {\n    console.log(`Processing job ${job.id}: ${job.name}`);\n    await sendEmail(job.data.to, job.data.subject);\n    return { sent: true };\n  },\n  { connection, concurrency: 10 },\n);","lang":"typescript","description":"Creates a queue, adds a job, and processes it with a worker. Uses Redis/Valkey connection, sets concurrency to 10."},"warnings":[{"fix":"Use { addresses: [{ host: '...', port: 6379 }] } instead of { host: '...', port: 6379 }.","message":"In v0.14.x, 'connection' option required 'host' and 'port' as direct properties; v0.15 changed to nested 'addresses' array.","severity":"breaking","affected_versions":">=0.14.0 <0.15.0"},{"fix":"Change queue.add(name, data, opts) to queue.add(name, data, opts) as single options object.","message":"Prior to v0.13, Queue.add() used positional arguments for options. v0.13+ requires a single options object.","severity":"breaking","affected_versions":"<0.13.0"},{"fix":"Use { tokenLimiter: { maxTokens: 100000, duration: 60000 } } instead of { limiter: ... }.","message":"The 'limiter' option on Worker has been renamed to 'tokenLimiter' in v0.15.","severity":"deprecated","affected_versions":">=0.15.0"},{"fix":"Always use async (job) => { ... } as the processor.","message":"Worker must be instantiated with an async function; synchronous functions will hang or throw.","severity":"gotcha","affected_versions":">=0.1.0"},{"fix":"Use import { Flow } from 'glide-mq' instead of import { FlowProducer } from 'glide-mq'.","message":"In v0.12, Flow class was renamed from FlowProducer to Flow. Old name is removed in v0.13+.","severity":"breaking","affected_versions":">=0.12.0 <0.13.0"},{"fix":"Ensure queue names do not include '{' or '}' characters.","message":"When using Valkey clusters, all keys are hash-tagged with {queueName}, so queue names must not contain curly braces.","severity":"gotcha","affected_versions":">=0.1.0"}],"env_vars":null,"search_vec":"'1':25 '20':89 '38':79 'achiev':24 'activ':36 'ai':44 'ai-nat':43 'bind':19 'budget':53 'built':12 'bull/bullmq':83 'call':34 'cap':54 'cluster':69,75 'config':73 'cost':47 'depend':94 'differenti':41 'express':98 'failov':52 'fcall':35 'function':33 'glide':2,23 'glide-mq':1 'hash':67 'hash-tag':66 'high':5 'high-perform':4 'higher':80 'human':56 'human-in-the-loop':55 'includ':42 'javascript':99 'job':28,101 'limit':63 'loop':59 'maintain':37 'messag':7,102 'model':51 'mq':3 'napi':18 'nativ':45 'node':88 'node.js':10 'opentelemetri':96 'option':92 'peer':93 'per':27 'perform':6 'primit':46 'queue':8,100 'rate':62 'redi':104 'releas':40 'requir':87 'rtt':26 'rust':17 'search':65 'server':31 'server-sid':30 'ship':84 'side':32 'stream':15,50,105 'suspend/resume':60 'tag':68 'task':107 'throughput':81 'token':49 'tpm':61 'track':48 'type':86 'typescript':85,108 'v0.15.3':11 'valkey':22,74,103 'valkey-glid':21 'valkey/redis':14 'vector':64 'via':20 'week':39 'worker':106 'zero':72 'zero-config':71","created_at":"2026-06-07T12:52:58.625802+00:00","updated_at":"2026-06-07T12:52:58.625802+00:00","problems":[{"fix":"Set connection.addresses = [{ host: 'localhost', port: 6379 }].","cause":"Connection object is missing 'addresses' array or is empty.","error":"Error: No addresses provided in connection"},{"fix":"Use import { Worker } from 'glide-mq' (ESM) or const { Worker } = require('glide-mq') (CJS).","cause":"Using CommonJS require without .default, or wrong import syntax.","error":"TypeError: Worker is not a constructor"},{"fix":"Run npm install glide-mq and ensure Node >=20.","cause":"Package not installed or Node version <20 (glide-mq requires >=20).","error":"Error: Cannot find module 'glide-mq'"},{"fix":"Provide a valid string queueName as the first argument to Flow.add().","cause":"Flow.add() called with an empty or missing queue name.","error":"Error: Flow name must be a non-empty string"}],"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/avifenesh/glide-mq#readme","github":"https://github.com/avifenesh/glide-mq","docs":null,"changelog":null,"pypi":null,"npm":"glide-mq","openapi_spec":null,"status_page":null,"smithery":null,"categories":["ai-ml","testing"],"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}}