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: trueWhen 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.
| Framework | Mount config |
|---|---|
| Express | app.use("/ops/bullstudio", bullstudio(config)) |
| Fastify | app.register(bullstudio(config), { prefix: "/ops/bullstudio" }) |
| Hono | app.route("/ops/bullstudio", bullstudio(config)) |
| Next.js | bullstudio({ mountPath: "/ops/bullstudio", ...config }) |
The UI and private dashboard API live under the same mount path.