Open-source BullMQ dashboard. Drop-in for any Node or Bun backend.
概要
Open-source BullMQ dashboard. Drop-in for any Node or Bun backend.
README
Workbench
Open-source BullMQ dashboard. Drop-in for any Node or Bun backend.
Workbench is a modern dashboard for BullMQ. Runs jobs, flows, schedulers and metrics, all served from your own backend behind your own auth.
- Zero infrastructure — mounts as a route in your existing app, or run as a standalone Docker container
- Adapters for Hono, Elysia, Express, Fastify, Koa, NestJS, AdonisJS, Next.js, TanStack Start, Astro, Nuxt, Bun.serve, and h3
- Standalone image on GHCR (
ghcr.io//workbench-standalone) for Docker / Kubernetes deployments - MCP server for Cursor, Claude Desktop, Zed, and Continue.dev — drive your queues from your editor’s chat
- Flows & DAG view, metrics, schedulers, search
- Dark-mode UI, basic-auth-protected by default
- MIT licensed
Website: getworkbench.dev · Documentation
Migrating from bull-board?
Workbench is a drop-in alternative with thirteen first-party framework adapters, FlowProducer DAGs, error triage, and a keyboard-driven UI.
| bull-board | Workbench |
|---|---|
@bull-board/express |
@getworkbench/express |
@bull-board/fastify |
@getworkbench/fastify |
@bull-board/koa |
@getworkbench/koa |
@bull-board/nestjs |
@getworkbench/nestjs |
@bull-board/hono |
@getworkbench/hono |
@bull-board/h3 |
@getworkbench/h3 |
@bull-board/elysia |
@getworkbench/elysia |
Run npx @getworkbench/cli init to swap the mount in one command. Full comparison: getworkbench.dev/blog/workbench-vs-bull-board
Quick start
npx @getworkbench/cli init
The CLI detects your framework, installs the matching @getworkbench/ package, injects the mount (or scaffolds a route file for Next.js), writes .env.example entries, and optionally drops a docker-compose.yml for Redis.
Manual setup
Pick the adapter that matches your stack:
Visit http://localhost:PORT/jobs.
Configuration
| Option | Type | Description |
|---|---|---|
queues |
Queue[] |
BullMQ Queue instances to display. Required. |
auth |
{ username, password } |
Basic auth credentials. Strongly recommended in prod. |
title |
string |
Dashboard title. Default: "Workbench". |
logo |
string |
Logo URL to display in the nav. |
basePath |
string |
Override base path detection. Required for @getworkbench/elysia, @getworkbench/koa, @getworkbench/next, @getworkbench/tanstack-start, @getworkbench/astro, @getworkbench/nuxt, and @getworkbench/h3. |
readonly |
boolean |
Disable actions (retry, remove, promote). |
tags |
string[] |
Fields from job.data to extract as filterable tags. |
alerts |
AlertsOptions |
Self-hosted Slack/Discord/webhook alerting via BullMQ QueueEvents. |
Alerts
Alerts are on by default. Configure Slack, Discord, or webhook contact points and rules in the dashboard Alerts page — notifications are only sent after you set that up. The model follows Grafana-style contact points + rules (unlike Bull Board, which has no built-in alerting). See @getworkbench/core README for setup steps.
Packages
| Package | Description |
|---|---|
@getworkbench/core |
Core + API router + UI |
@getworkbench/hono |
Hono adapter |
@getworkbench/elysia |
Elysia adapter |
@getworkbench/express |
Express adapter |
@getworkbench/fastify |
Fastify adapter |
@getworkbench/koa |
Koa adapter |
@getworkbench/nestjs |
NestJS adapter |
@getworkbench/adonis |
AdonisJS adapter |
@getworkbench/next |
Next.js App Router adapter |
@getworkbench/tanstack-start |
TanStack Start adapter |
@getworkbench/astro |
Astro adapter |
@getworkbench/nuxt |
Nuxt (Nitro/h3) adapter |
@getworkbench/h3 |
h3 adapter (Nitro/SolidStart/Analog) |
@getworkbench/bun |
Bun.serve adapter |
@getworkbench/cli |
npx @getworkbench/cli init |
@getworkbench/mcp |
Model Context Protocol server — Cursor/Claude/Zed/Continue |
apps/standalone |
Standalone Bun server + Docker image (ghcr.io/pontusab/workbench-standalone) |
Hyper is distributed via a source-component registry, so its Workbench integration ships separately as a hyper add @getworkbench component in the pontusab/hyper repo.
Docker (standalone)
Run Workbench as its own container when you don’t want to embed it in an app server. See apps/standalone for env vars and local dev.
docker run --rm -p 3000:3000 \
-e REDIS_URL=redis://host.docker.internal:6379 \
-e QUEUE_NAMES=email,image \
ghcr.io/pontusab/workbench-standalone:latest
Tagged releases publish ghcr.io/pontusab/workbench-standalone: automatically.
FAQ
Is it BullMQ-only? Yes. Bull (legacy) is not supported.
What Node version? 18+ (or Bun 1.1+ for the Elysia and Bun.serve adapters).
What TypeScript version? Any TypeScript 4.x or 5.x for the non-Hono adapters (Express, Fastify, NestJS, Next.js, Elysia) and @getworkbench/core. @getworkbench/hono requires TypeScript 5.0+ because Hono 4’s own bundled .d.ts uses const type parameters introduced in TS 5.0.
Can I run it without auth? Yes, omit the auth option. Don’t do that in production.
Does it require a separate service? No for the embed path — it mounts as a route in your existing backend. Use the standalone Docker image when you want a separate container instead.
Development
bun i
bun run build
bun run typecheck
# end-to-end smoke test against every example
docker compose up -d redis
bun run smoke
See CONTRIBUTING.md.
License
MIT © Pontus Abrahamsson
インストール
npx @getworkbench/cli init