GitHub - AgdirAS/rask.agdir.farm: Modern RabbitMQ management dashboard by Agdir Drift AS

3 min read Original article ↗

CI License: BSL Version Stars Last Commit Issues

Named after Ratatoskr, the Norse messenger squirrel.

A modern web UI for RabbitMQ management. All broker calls are proxied server-side — no direct browser-to-RabbitMQ exposure.

Maintained by Agdir Drift AS.


Quick Start (Docker)

The easiest way to run Rask — no Node.js required. Configure your RabbitMQ connection via the UI after starting.

Option 1 — RabbitMQ in another container (shared network)

docker network create rask-net

# attach your existing RabbitMQ container to the network, or start a new one:
docker run -d --name rabbitmq --network rask-net rabbitmq:4-management

docker run -d \
  --name rask \
  --network rask-net \
  -p 35672:35672 \
  -v rask-data:/app/data \
  ghcr.io/agdiras/rask.agdir.farm:latest

In the UI use http://rabbitmq:15672 as the management URL.

Option 2 — RabbitMQ on the host machine

docker run -d \
  --name rask \
  --add-host host.docker.internal:host-gateway \
  -p 35672:35672 \
  -v rask-data:/app/data \
  ghcr.io/agdiras/rask.agdir.farm:latest

In the UI use http://host.docker.internal:15672 as the management URL. (--add-host is only needed on Linux; Docker Desktop on Mac/Windows includes it automatically.)

Option 3 — Docker Compose (Rask + RabbitMQ together)

services:
  rask:
    image: ghcr.io/agdiras/rask.agdir.farm:latest
    ports:
      - "35672:35672"
    volumes:
      - rask-data:/app/data
    depends_on:
      rabbitmq:
        condition: service_healthy

  rabbitmq:
    image: rabbitmq:4-management
    ports:
      - "5672:5672"
      - "15672:15672"
    healthcheck:
      test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"]
      interval: 10s
      timeout: 5s
      retries: 10
      start_period: 30s

volumes:
  rask-data:

Save as compose.yml and run:

In the UI use http://rabbitmq:15672 as the management URL.


Setup (from source)

1. Install dependencies

2. Configure connection

3. Run the dev server

Open http://localhost:35672.


Environment Variables

Connection settings are managed through the UI (stored in SQLite). On first run a Localhost environment is created automatically.

For advanced use, copy .env.example to .env and adjust:

Variable Default Description
STORAGE_ENCRYPTION_KEY (unset) Encrypt the SQLite DB at rest (any string)

Architecture

Server-first, client islands. Pages default to Server Components. TanStack Query lives only in "use client" components that need polling or mutations. Layout and navigation are static server components. amqplib is server-only.

Browser (React)
  → Next.js API Routes (/api/*)
    → RabbitMQ Management HTTP API (port 15672)
    → RabbitMQ AMQP (port 5672)  ← server-only

Project Structure

app/
  layout.tsx              Root layout (fonts, providers)
  (app)/
    layout.tsx            App shell (sidebar + header)
    page.tsx              Overview
    queues/page.tsx       Queue list with live polling
    settings/page.tsx     Connection settings
  api/
    settings/route.ts     Read/write connection settings
    rabbitmq/
      queues/route.ts     Proxy → RabbitMQ /api/queues
      overview/route.ts   Proxy → RabbitMQ /api/overview

components/
  layout/
    sidebar.tsx           Navigation sidebar
    header.tsx            Connection status + theme toggle
  providers.tsx           QueryClientProvider + ThemeProvider
  ui/                     shadcn components

lib/
  types.ts                RabbitMQ entity types
  rabbitmq.ts             Management API client
  env.ts                  SQLite env storage + encryption
  utils.ts                cn() utility

docs/
  TODO.md                 Upcoming features
  PRICING.md              Pricing tiers

Development

pnpm dev      # Start dev server
pnpm build    # Production build
pnpm lint     # Lint

License & Pricing

Licensed under BSL 1.1 — free for individuals and teams under 10 users. See docs/PRICING.md for tiers.

Limits are not technically enforced — no license keys, no phone-home, no feature gates. If Rask is useful to your organization, please use the right plan.