# Redis + BullMQ dashboard recipe

URL: https://briq.cloud/cookbook/redis-bullmq

> Redis for BullMQ queues, plus a Bull Board UI to inspect jobs. Point your workers at REDIS_URL; the dashboard discovers the queues itself.

Tags: queue, cache, stack

## Run it

MCP:

```ts
briq_run({
  recipe: "redis-bullmq",
  params: {
    "queues": [
      "default"
    ],
    "size": "nano"
  },
  wait: true
})
```

REST:

```bash
curl -X POST https://api.briq.cloud/v1/briqs \
  -H "Authorization: Bearer $BRIQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recipe": "redis-bullmq",
    "params": {
      "queues": [
        "default"
      ],
      "size": "nano"
    },
    "wait": true
  }'
# → { "briqs": [{ "id": "bq_…", … }], "outputs": { "REDIS_URL": "…" }, … }

# ... when done, for each briq id
curl -X DELETE https://api.briq.cloud/v1/briqs/<id> \
  -H "Authorization: Bearer $BRIQ_API_KEY"
```

## Parameters

| Name | Type | Options | Default | What it does |
| --- | --- | --- | --- | --- |
| `queues` | string[] | — | ["default"] | — |
| `size` | enum | nano, small, medium | "nano" | — |

## Outputs

Returned by `briq_run` once the stack is healthy. Hosts resolve inside your team network; secrets are generated per run.

| Output | Value |
| --- | --- |
| `REDIS_URL` | `redis://redis.<stack>.internal:6379` |
| `BULL_BOARD_URL` | `http://bullboard.<stack>.internal:3000` |
| `QUEUES` | `default` |

## What it runs

| Briq | Image | Ports | Size | Volume |
| --- | --- | --- | --- | --- |
| redis | `redis:7-alpine` | 6379 | nano | — |
| bullboard | `ghcr.io/felixmosh/bull-board:9.10.1` | 3000 | nano | — |

## When to use it

* Your app runs BullMQ (or Bull) workers and you want the queues *and* a way to see them.
* The agent is building or debugging a job pipeline and needs to see waiting, active, failed and
  completed jobs.

Workers connect to `REDIS_URL`; Bull Board (`bullboard`) lists each queue once a worker touches it.

## Tips

* **An empty board** means nothing has been enqueued yet. `queues` only echoes the names back in
  the outputs.
* **Show the board**: `briq_run({ recipe: "redis-bullmq", expose: "private" })`, or
  `briq_expose` port 3000 of `bullboard` with `mode: "private"`.
* **Without the UI**: `briq_exec` on `redis` with `redis-cli llen bull:emails:wait`.
* **The prefix is `bull`.** For another one, run the Bull Board image yourself.
* **No volume**: Redis saves to its disk when it stops, so queues usually survive a stop; keep
  nothing there you cannot rebuild.
