Airflow Widgets is an experimental framework that lets data engineers extend the Airflow UI using pure Python. Instead of writing React per use-case, teams declare widgets (Markdown, tables, Mermaid diagrams) that are rendered dynamically inside the Airflow web UI.
Airflow exposes rich operational metadata, but the UI is largely static. Teams often rely on external docs, dashboards, or tribal knowledge during incidents.
Surface runbooks, lineage, and operational metrics directly inside Airflow—without forcing Python engineers to learn React.
Built an Airflow plugin that bridges Python → FastAPI → React. Python returns declarative widget specs; React renders them generically.
DAGs and task instances become self-documenting. Support engineers get context where failures happen: in the task instance view.
Airflow Widgets splits responsibilities across three layers: orchestration, widget definitions, and rendering.
At runtime, the panel reads Airflow props, calls the FastAPI route, receives widget JSON, and renders it.
Airflow loads DAGs and task instances and passes rich context to the plugin runtime.
/widgets-plugin/api/task/<dag>/<task> to fetch widget specs defined in Python.type → component (Markdown/Table/Mermaid) and displays them inside Airflow.Airflow Widgets is an experiment. The goal is to prove a possibility: the Airflow UI can be meaningfully extended using Python-first widget declarations, instead of requiring every feature to be written in React. It’s not production-hardened yet, but it’s a solid foundation for UI extensions owned by backend/data platform teams.
These examples mirror what operators see inside the Airflow task instance view. The content is declared in Python; the UI is rendered dynamically.

/public/projects/airflow-widgets/ and update the src paths above.If you like this idea, please ⭐ the repository and check out more projects on rahulrajasekharan.dev.