Celery is one of the most popular async task frameworks in the python ecosystem. And if you are also running Django, then celery is often considering the defacto task system to pair it with.

If you’re running Celery in production, you will eventually need basic operational visibility for your tasks and workers. You’ll need to know if your workers are alive, what they are currently running and whether any tasks are currently stuck or queues are backed up. These are very common observability needs and any real project will need to come up with a solution to producing this kind of visibility.

Most teams solve the with Flower, a separate frontend and event consumer application in the celery ecosystem. This works but it also introduces a separate process and a separate interface. This comes with non-zero operational complexity since you now have another surface that needs to be exposed and hardened.

That gap is what led me to build dj-celery-panel. The idea is straightforward: surface Celery’s existing observability directly inside Django admin. The project exposes worker status, task state, and queue visibility using the same APIs Celery already provides, but presents them in an admin-native interface. There is no longer any other process that needs to run in order to get celery visibility for any project.

The project started as something I built for my own use. Open sourcing it felt like the natural next step. If it turns out to be useful to other Django teams, I will continue to refine it. If it remains a small, focused tool, that is fine as well. Not every piece of software needs to be more than that.

dj-celery-panel is released and usable today. If you are running Django with Celery and find yourself repeatedly reaching for a separate UI just to understand what your workers are doing, this may fit naturally into your workflow.

The project is available here:

Future Changes

dj-celery-panel has an architecture composed of swappable backends. This makes it completely customizable and extensible even at a per page level. I am looking toward creating more backends to support more interesting setups.