Command & Control for Celery Workers
Project description
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 --frozenuv run pre-commit installnpm --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 fordb_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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81165f924d662271474dfe5cf1d23acfd3431273a8278016de510d01b69e1a98
|
|
| MD5 |
ef3845c7190788bd20600e72c29ee155
|
|
| BLAKE2b-256 |
a80893fbecb2174115152ac0c6e7fb1fd5de7b6945e1d2536a989296d5b99213
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d833f2a71816fb6b8a1001e576aa72eb3b4db0aae3a5e7b2e1329ead4adeebb
|
|
| MD5 |
af2d71411154468e51b093590e067d94
|
|
| BLAKE2b-256 |
0d6345bce40f0457e070005e866f67c30326c85800b0c361427b3ffd5e0a568f
|