Bullstudio

Configuration

Configure dashboard access, queue visibility, branding, and mount paths.

This page covers embedded dashboard configuration. Standalone mode uses CLI flags and environment variables.

Complete example

bullstudio({
  queues: [emailQueueAdapter],
  readOnly: true,
  protection: {
    type: "session",
    username: "operator",
    password: process.env.BULLSTUDIO_PASSWORD!,
    sessionSecret: process.env.BULLSTUDIO_SESSION_SECRET!,
    tokenTtlSeconds: 60 * 60 * 8,
    cookieName: "queue_ops_session",
  },
  dashboardIdentity: {
    title: "Production Queues",
    logo: {
      src: "/assets/queue-logo.svg",
      alt: "Queue Ops",
    },
  },
  documentIdentity: {
    title: "Queue Ops",
    favicon: "/favicon.ico",
  },
});

Queue visibility

Choose which queues appear in an embedded dashboard. Pass queue adapters created with @bullstudio/bullmq-adapter or @bullstudio/bull-adapter.

queues: [
  createBullMqQueueAdapter(emailQueue, {
    key: "email",
    label: "Email",
  }),
]

Bullstudio only shows the queues you provide. It does not scan Redis in embedded mode.

Safe viewing

Use read-only mode when operators should inspect queues without changing jobs or queue state.

readOnly: true

When enabled, Bullstudio blocks mutating operations on the server. Operators can inspect queues and jobs, but cannot retry jobs, remove jobs, pause queues, or resume queues.

Auth

Protect embedded dashboards before exposing them outside your local machine. Configure credentials and session signing explicitly in production so they use your own secrets.

protection: {
  type: "session",
  username: process.env.BULLSTUDIO_USERNAME!,
  password: process.env.BULLSTUDIO_PASSWORD!,
  sessionSecret: process.env.BULLSTUDIO_SESSION_SECRET!,
}

Use session for Bullstudio's built-in login session. You can also set tokenTtlSeconds for the session lifetime and cookieName for the session cookie name.

Disable Bullstudio-owned auth only when the host app already protects the mount path.

protection: {
  type: "disabled",
}

Customization

Set the name and logo operators see inside the dashboard.

dashboardIdentity: {
  title: "Queue Ops",
  logo: {
    src: "/assets/queue-logo.svg",
    alt: "Queue Ops",
  },
}

Set the browser tab title and favicon separately when the dashboard should match your app or environment.

documentIdentity: {
  title: "Queue Ops",
  favicon: "/favicon.ico",
}

Where the dashboard lives

Mount Bullstudio under the URL where operators should open it. Each framework adapter wires that path differently.

FrameworkMount config
Expressapp.use("/ops/bullstudio", bullstudio(config))
Fastifyapp.register(bullstudio(config), { prefix: "/ops/bullstudio" })
Honoapp.route("/ops/bullstudio", bullstudio(config))
Next.jsbullstudio({ mountPath: "/ops/bullstudio", ...config })

The UI and private dashboard API live under the same mount path.

On this page