{"id":48688,"library":"nestjs-simple-queue","title":"NestJS Simple Queue","description":"Version 3.2.3. Lightweight in-process job queue for NestJS with no external dependencies like Redis. Supports retries, prioritization, delayed jobs, per-queue rate limiting, deduplication, and dead letter queues. Ships TypeScript types, requires Node.js 20+ and @nestjs/event-emitter as a peer dep. Released under MIT, maintained actively as of 2025. Differentiator: predictable single-process job handling without Redis, ideal for small-to-medium NestJS apps that need background tasks without operational overhead.","status":"active","version":"3.2.3","language":"javascript","source_language":"en","source_url":"https://github.com/Doompy/nestjs-simple-queue","tags":["javascript","nestjs","nest","nestjs queue","queue","job queue","background job","scheduler","background jobs","typescript"],"install":[{"cmd":"npm install nestjs-simple-queue","lang":"bash","label":"npm"},{"cmd":"yarn add nestjs-simple-queue","lang":"bash","label":"yarn"},{"cmd":"pnpm add nestjs-simple-queue","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Core NestJS framework peer dependency","package":"@nestjs/common","optional":false},{"reason":"Required for event-based lifecycle hooks (start, success, failure)","package":"@nestjs/event-emitter","optional":false}],"imports":[{"note":"Named export only; default export does not exist.","wrong":"import QueueModule from 'nestjs-simple-queue'","symbol":"QueueModule","correct":"import { QueueModule } from 'nestjs-simple-queue'"},{"note":"CommonJS require works but TypeScript projects should use ESM imports.","wrong":"const QueueService = require('nestjs-simple-queue').QueueService","symbol":"QueueService","correct":"import { QueueService } from 'nestjs-simple-queue'"},{"note":"Decorator for processor methods; must be used inside @Injectable() classes.","wrong":"","symbol":"QueueJob","correct":"import { QueueJob } from 'nestjs-simple-queue'"},{"note":"Alternative decorator for entire classes; use either QueueJob on methods or QueueProcessor on class with method-level decorators.","wrong":"","symbol":"QueueProcessor","correct":"import { QueueProcessor } from 'nestjs-simple-queue'"}],"quickstart":{"code":"import { Module, Injectable } from '@nestjs/common';\nimport { QueueModule, QueueService, QueueJob } from 'nestjs-simple-queue';\n\n@Injectable()\nclass EmailProcessor {\n  @QueueJob('send-email')\n  async sendEmail(payload: { to: string; subject: string }) {\n    console.log(`Email sent to ${payload.to}`);\n  }\n}\n\n@Module({\n  imports: [\n    QueueModule.forRoot({ concurrency: 3 }),\n    QueueModule.forProcessors([EmailProcessor]),\n  ],\n})\nexport class AppModule {}\n\n// In a service:\n@Injectable()\nexport class MyService {\n  constructor(private readonly queue: QueueService) {}\n  async doSomething() {\n    await this.queue.add('send-email', { to: 'user@example.com', subject: 'Hi' });\n  }\n}","lang":"typescript","description":"Defines a queue processor class with @QueueJob decorator, registers it via QueueModule.forProcessors, then injects QueueService to enqueue jobs."},"warnings":[{"fix":"Use retryStrategy instead of retryLimit in the options object passed to forRoot().","message":"Breaking change in v3: QueueModule.forRoot() options structure changed. The option 'retryLimit' has been renamed to 'retryStrategy'.","severity":"breaking","affected_versions":">=3.0.0"},{"fix":"Use @QueueJob('job-name') on individual methods instead of @QueueProcessor() on the class.","message":"QueueProcessor decorator is soft-deprecated in v3.2; QueueJob on methods is preferred.","severity":"deprecated","affected_versions":">=3.2.0"},{"fix":"Add @nestjs/event-emitter to your package.json dependencies.","message":"The library requires @nestjs/event-emitter as a peer dependency, but developers often forget to install it.","severity":"gotcha","affected_versions":">=3.0.0"},{"fix":"Enable file-based persistence by setting { persist: { enabled: true, path: './queue-data.json' } } in forRoot().","message":"In-memory jobs are lost on process restart unless persistence is enabled via the 'persist' option.","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"search_vec":"'20':40 '2025':54 '3.2.3':5 'activ':51 'app':71 'background':74,87,90 'dead':32 'dedupl':30 'delay':23 'dep':46 'depend':17 'differenti':55 'extern':16 'handl':61 'ideal':64 'in-process':7 'javascript':79 'job':10,24,60,85,88,91 'letter':33 'lightweight':6 'like':18 'limit':29 'maintain':50 'medium':69 'mit':49 'need':73 'nest':81 'nestj':1,13,70,80,82 'nestjs/event-emitter':42 'node.js':39 'oper':77 'overhead':78 'peer':45 'per':26 'per-queu':25 'predict':56 'priorit':22 'process':9,59 'queue':3,11,27,34,83,84,86 'rate':28 'redi':19,63 'releas':47 'requir':38 'retri':21 'schedul':89 'ship':35 'simpl':2 'singl':58 'single-process':57 'small':67 'small-to-medium':66 'support':20 'task':75 'type':37 'typescript':36,92 'version':4 'without':62,76","created_at":"2026-06-07T16:57:55.948162+00:00","updated_at":"2026-06-07T16:57:55.948162+00:00","problems":[{"fix":"npm install @nestjs/event-emitter","cause":"Missing peer dependency","error":"Cannot find module '@nestjs/event-emitter'"},{"fix":"Ensure QueueModule.forRoot() is imported in the module where QueueService is used.","cause":"QueueService not properly injected (likely missing QueueModule.forRoot())","error":"QueueService.add is not a function"},{"fix":"Add @Injectable() decorator to the processor class.","cause":"Processor class not marked with @Injectable()","error":"TypeError: Class constructor MyProcessor cannot be invoked without 'new'"}],"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/Doompy/nestjs-simple-queue#readme","github":"https://github.com/Doompy/nestjs-simple-queue","docs":null,"changelog":null,"pypi":null,"npm":"nestjs-simple-queue","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}}