# adonisjs-jobs

> Job processing for AdonisJS

Latest version **0.4.0** (published 2026-06-10) · MIT license · 0 weekly downloads

## Install

```sh
npm install adonisjs-jobs
pnpm add adonisjs-jobs
yarn add adonisjs-jobs
bun add adonisjs-jobs
```

## Health

**Score 50/100 (C)** — status: active.

Positive: esm support; no vulnerabilities.

Warnings: low downloads; no types; pre 1.0.

## Facts

| | |
|---|---|
| Version | 0.4.0 |
| Published | 2026-06-10 |
| First published | 2024-03-22 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM |
| Node | >=20.6.0 |
| Dependencies | 6 |
| Unpacked size | 35 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Georges KABBOUCHI |
| Maintainers | kabbouchi |
| Keywords | adonisjs, jobs, queue, background-jobs, redis, bullmq |

## Links

- npm: https://www.npmjs.com/package/adonisjs-jobs
- Homepage: https://github.com/KABBOUCHI/adonisjs-jobs#readme
- npm.io page: https://npm.io/package/adonisjs-jobs

## Dependencies (6)

- [bullmq](https://npm.io/package/bullmq.md) ^5.4.5
- [devalue](https://npm.io/package/devalue.md) ^5.6.2
- [@trpc/server](https://npm.io/package/@trpc/server.md) ^10.45.2
- [@queuedash/api](https://npm.io/package/@queuedash/api.md) ^2.1.0
- [@poppinss/utils](https://npm.io/package/@poppinss/utils.md) ^6.7.3
- [import-meta-resolve](https://npm.io/package/import-meta-resolve.md) ^4.1.0

## Alternatives

- [memory-cache](https://npm.io/package/memory-cache.md) — 795.0K weekly downloads
- [@httptoolkit/proxy-agent](https://npm.io/package/@httptoolkit/proxy-agent.md) — 11.2K weekly downloads
- [express-cache-controller](https://npm.io/package/express-cache-controller.md) — 5.3K weekly downloads
- [http-cache-middleware](https://npm.io/package/http-cache-middleware.md) — 4.5K weekly downloads
- [cache2](https://npm.io/package/cache2.md) — 1.5K weekly downloads

## Recent versions

- 0.4.0 (latest) — 2026-06-10
- 0.3.0 — 2026-06-03
- 0.2.0 — 2026-03-04
- 0.1.6 — 2026-02-19
- 0.1.5 — 2026-01-16
- 0.1.4 — 2026-01-12
- 0.1.3 — 2026-01-03
- 0.1.2 — 2025-12-22
- 0.1.1 — 2025-11-24
- 0.1.0 — 2025-11-24
- 0.0.26 — 2025-04-11
- 0.0.25 — 2025-04-10
- 0.0.24 — 2025-04-10
- 0.0.23 — 2025-03-25
- 0.0.22 — 2025-03-22
- … 21 more at https://npm.io/package/adonisjs-jobs/versions

## README

<div align="center">
  <h1><b>AdonisJS Jobs</b></h1>

  <p>Job processing for AdonisJS v6 using <a href="https://bullmq.io/" target="_blank">BullMQ</a></p>
</div>

## Getting Started

This package is available in the npm registry.

```bash
pnpm install adonisjs-jobs
```

Next, configure the package by running the following command.

```bash
node ace configure adonisjs-jobs
```

## Creating Jobs

You can create a new job by running the following command.

```sh
node ace jobs:make SendEmail
```

## Listening for Jobs

First, you need to start the jobs listener, you can spawn multiple listeners to process jobs concurrently.

```sh
node ace jobs:listen  # default queue from env `REDIS_QUEUE`

node ace jobs:listen --queue=high
node ace jobs:listen --queue=high --queue=medium
node ace jobs:listen --queue=high,medium,low

node ace jobs:listen --queue=high --concurrency=3
```

## Dispatching Jobs

Dispatching jobs is as simple as importing the job class and calling

```ts
import SendEmail from 'path/to/jobs/send_email.js'

await SendEmail.dispatch({ ... })

await SendEmail.dispatch({ ... }, { // for more job options check https://docs.bullmq.io/
  attempts: 3,
  delay: 1000,
})
```

## Import Aliases (optional)

update your `package.json` and `tsconfig.json` to use import aliases

`package.json`

```json
{
  "imports": {
    "#jobs/*": "./app/jobs/*.js"
  }
}
```

`tsconfig.json`

```json
{
  "compilerOptions": {
    "paths": {
      "#jobs/*": ["./app/jobs/*.js"]
    }
  }
}
```

```ts
import SendEmail from '#jobs/send_email.js'

await SendEmail.dispatch({ ... })
```

## Jobs Dashboard

You can view the jobs dashboard by adding the following route to your `start/routes.ts` file.

```ts
import router from '@adonisjs/core/services/router'

router.jobs() // default is /jobs

// or

router.jobs('/my-jobs-dashboard')
```

`router.jobs()` returns a route group, you can add middleware to the group

```ts
router.jobs().use(
  middleware.auth({
    guards: ['basicAuth'],
  })
)
```

## Tips

### Job Completion on Kubernetes

In Kubernetes, prevent job termination by adjusting `terminationGracePeriodSeconds` (default is 30s) to allow jobs to finish gracefully.

```yaml
spec:
  containers:
    - name: listen-jobs
      image: <IMAGE>
      command: ['node']
      args: ['ace', 'jobs:listen']
terminationGracePeriodSeconds: 1800
```

## Experimental Features

### Dispatch Closure

```ts
import { dispatch } from 'adonisjs-jobs/services/main'

await dispatch(async () => {
  const { default: User } = await import('#models/user')

  console.log(await User.query().count('*'))
})

await dispatch(async () => {
  const { default: mail } = await import('@adonisjs/mail/services/main')

  await mail.send((message) => {
    message
      .to('doe@example.org')
      .from('info@example.org')
      .subject('Verify your email address')
      .htmlView('emails/verify_email')
  })
})
```

## Alternative Ways to Run the Job Worker

Besides using `node ace jobs:listen`, you can also manually initialize and control the job worker in your code:

```ts
import { Worker } from 'adonisjs-jobs'
import app from '@adonisjs/core/services/app'

const worker = new Worker(app, {
  queues: ['default', 'mail'],
  concurrency: 1,
})

app.terminating(async () => {
  await worker.stop()
})

await worker.start()
```

---
_Source: https://npm.io/package/adonisjs-jobs · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
