Skip to main content

Command & Control for Celery Workers

Project description

PyPI Python Docs

Celery Root

Docs: https://docs.celeryroot.eu

Celery Root is a control plane for Celery. It provides a Django-based UI, an event listener/collector, and helper utilities for inspecting tasks, workers, queues, and beat schedules. The Python package and distribution remain celery_root for compatibility.

Features

  • Task list with filtering, sorting, and detail views (args/kwargs/result/traceback).
  • Task relation graph visualization (chains, groups, chords, maps).
  • Worker fleet overview and per-worker drill-down.
  • Broker queue inspection and purge actions.
  • Beat schedule overview and editor.
  • Pluggable storage (SQLite by default).

Quickstart (demo)

Requirements: Python >= 3.13, uv, and Docker (for the demo broker/redis).

export CELERY_ROOT_WORKERS="your_app.celery:app,another_app.celery:app"

Start the supervisor + UI (standalone):

celery_root -A your_app.celery:app

Or run as a Celery subcommand:

celery -A your_app.celery:app celery_root

By default the UI binds to 127.0.0.1:8000.

Demo stack

Requirements: Python >= 3.10, uv, and Docker (for the demo broker/redis).

make demo-infra
make demo-worker-math
make demo-worker-text
make demo-root

Then open http://127.0.0.1:8000.

To enqueue demo tasks:

make demo-tasks

Installation (repo)

Celery Root is currently built and run from this repository.

make install

This runs:

  • uv sync --all-extras --dev --frozen
  • uv run pre-commit install
  • npm --prefix frontend/graph-ui install

Build the frontend assets:

celery_root -A demo.worker_math:app

Via Celery:

celery -A demo.worker_math:app celery_root

Optional dependencies

Celery Root ships optional components behind extras. Install only what you need.

  • web: Django-based UI.
  • mcp: MCP server (FastMCP + Uvicorn) and Django for ASGI integration.
  • prometheus: Prometheus metrics exporter.
  • otel: OpenTelemetry exporter.

Install with uv:

uv sync --extra web --extra prometheus

Or install all extras:

uv sync --all-extras

Editable install with pip:

pip install -e ".[web,prometheus]"

Configuration

Configuration is explicit via Pydantic models. Components are enabled when their config is provided (set to None to disable).

from pathlib import Path

from celery_root import (
    BeatConfig,
    CeleryRootConfig,
    DatabaseConfigSqlite,
    FrontendConfig,
    OpenTelemetryConfig,
    PrometheusConfig,
)

config = CeleryRootConfig(
    database=DatabaseConfigSqlite(db_path=Path("./celery_root.db")),
    beat=BeatConfig(),
    prometheus=PrometheusConfig(port=8001, prometheus_path="/metrics"),
    open_telemetry=OpenTelemetryConfig(endpoint="http://localhost:4317"),
    frontend=FrontendConfig(host="127.0.0.1", port=5555),
)

The web UI reads worker import paths from CELERY_ROOT_WORKERS (comma-separated). If you need to override settings before Django settings load:

from celery_root.config import set_settings

set_settings(config)

Beat Scheduler To manage schedules from the UI without Django, configure Celery beat to use the Root DB scheduler:

app.conf.beat_scheduler = "celery_root.components.beat.db_scheduler:DatabaseScheduler"
app.conf.beat_db_refresh_seconds = 5.0  # optional polling interval

Run one beat per broker/app (Celery beat can only talk to one broker at a time). The UI will read/write schedules in the Root DB.

Library usage

Start the supervisor from Python:

from celery_root import CeleryRoot

root = CeleryRoot("your_app.celery:app")
root.run()

Provide a logger if you want Celery Root to use your logging setup (subprocess logs are forwarded via a queue):

import logging

from celery_root import CeleryRoot

logger = logging.getLogger("celery_root")
logger.setLevel(logging.INFO)
logger.addHandler(logging.StreamHandler())

root = CeleryRoot("your_app.celery:app", logger=logger)
root.run()

MCP server (AI tools)

Celery Root ships with an optional MCP server that exposes read-only tools over HTTP. It is designed for MCP clients (Codex CLI, Claude Code, etc.) to inspect the Celery Root store safely without write access.

Configuration:

  • CELERY_ROOT_MCP_ENABLED: Enable the MCP server (1/true).
  • CELERY_ROOT_MCP_HOST: Host interface (default: 127.0.0.1).
  • CELERY_ROOT_MCP_PORT: Port (default: 9100).
  • CELERY_ROOT_MCP_PATH: Base path (default: /mcp/).
  • CELERY_ROOT_MCP_AUTH_KEY: Required auth token for clients.
  • CELERY_ROOT_MCP_READONLY_DB_URL: Deprecated (RPC-based access replaces direct DB reads).

Example:

export CELERY_ROOT_MCP_ENABLED=1
export CELERY_ROOT_MCP_AUTH_KEY="your-secret-token"

Tools:

  • fetch_schema: database schema (tables + columns).
  • db_info: backend metadata.
  • db_query: read-only SQL access to Celery Root tables (tasks, task_events, task_relations, workers, worker_events, broker_queue_events, schedules, schema_version).
  • stats: dashboard metrics plus task runtime aggregates.

Resources:

  • resource://celery-root/health: MCP health payload.
  • resource://celery-root/db-catalog: table catalog and example queries for db_query.

Start the supervisor (or MCP server) and open the Settings page to copy client snippets.

Development

Run checks locally:

uv run precommit
uv run mypy
uv run pytest

Project structure

  • celery_root/components/: optional components (web, metrics, beat).
  • celery_root/core/: engine + DB + logging internals.
  • demo/: demo workers and task scripts.
  • tests/: unit and integration tests.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

celery_root-0.4.1.tar.gz (1.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

celery_root-0.4.1-py3-none-any.whl (898.7 kB view details)

Uploaded Python 3

File details

Details for the file celery_root-0.4.1.tar.gz.

File metadata

  • Download URL: celery_root-0.4.1.tar.gz
  • Upload date:
  • Size: 1.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for celery_root-0.4.1.tar.gz
Algorithm Hash digest
SHA256 81165f924d662271474dfe5cf1d23acfd3431273a8278016de510d01b69e1a98
MD5 ef3845c7190788bd20600e72c29ee155
BLAKE2b-256 a80893fbecb2174115152ac0c6e7fb1fd5de7b6945e1d2536a989296d5b99213

See more details on using hashes here.

File details

Details for the file celery_root-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: celery_root-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 898.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for celery_root-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1d833f2a71816fb6b8a1001e576aa72eb3b4db0aae3a5e7b2e1329ead4adeebb
MD5 af2d71411154468e51b093590e067d94
BLAKE2b-256 0d6345bce40f0457e070005e866f67c30326c85800b0c361427b3ffd5e0a568f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page