Back to home

Bulk Pause / Unpause Airflow DAGs from the UI

A custom React-based Airflow 3.1 plugin that lets platform and data teams pause or unpause dozens of DAGs directly from the UI, instead of clicking them one by one or dropping to the CLI.

Open source · 2025Airflow 3.1 · Platform UXView implementation on GitHub
Situation
Large Airflow environments often have hundreds of DAGs. Operations teams needed to pause groups of DAGs for maintenance or incident response, but the stock UI only supported toggling them one by one.
Task
Make DAG state management as easy as ticking checkboxes: select a group of DAGs in the UI and pause or unpause them in a single action, without requiring CLI access.
Action
Implemented a React-based Airflow UI plugin that lists DAGs with filters, name prefix search, and bulk actions. Under the hood, it talks to Airflow 3.1's REST API to toggle is_paused for many DAGs at once, with clear success and error feedback.
Result
Platform teams can now flip dozens of DAGs into maintenance mode in a few clicks. Operational work during incidents drops from minutes to seconds, and the UI keeps non-admin users away from risky CLI access.

High-level architecture

The plugin lives entirely inside Airflow: a React frontend mounted into the webserver, calling the official REST API to update DAG states in bulk.

1Step 1 – React UI in Airflow

The user selects multiple DAGs or a prefix from a custom React view in the Airflow webserver.

React UI in Airflow webserver
  • Mounted as an Airflow UI plugin panel
  • Uses familiar Airflow layout style with an extra “bulk control” view
  • Accepts name prefix and tag filters to target DAG groups
Bulk pause / unpause API layer
  • Uses Airflow 3.1 REST API endpoints for DAG state
  • Builds query params from prefix and tags
  • Returns number of DAGs affected and per-DAG results
Scheduler & metadata DB
  • Updates is_paused state in the metadata DB
  • Scheduler reacts: paused DAGs stop scheduling runs
  • UI refreshes to show the new state instantly

Demo: bulk pause / unpause request

This demo mimics the actual plugin form: choose an action, enter a name prefix and tags, and get back a JSON response summarising which DAGs would be affected. In the real deployment, the request hits a FastAPI layer in front of Airflow's REST API.

Pause / Unpause DAGs (demo)

UX: how a user actually uses it

The goal was to feel like a natural extension of the standard Airflow UI — no new concepts, just better controls for the same DAG list.

1. Navigate to bulk control view

From the DAGs page, the user opens the custom plugin tab (e.g. “Bulk DAG Control”), which shows a familiar layout with filters and bulk actions.

2. Choose a target group

They specify a name prefix like marketing_ and tags such as analytics, web to target a subset of DAGs.

3. Apply a bulk action

Clicking “pause” or “unpause” sends a single API request. The response returns a structured list of DAG IDs and status so the user knows exactly what changed.

4. Confirm via refreshed state

The plugin refreshes from the REST API and shows the new pause state for each DAG, so the user can visually confirm the change.

Tech stack

Apache Airflow 3.1React (UI plugin)TypeScript / JavaScriptFastAPI façadeAirflow REST APIPython

This plugin turns a common operational pain — pausing lots of DAGs at once — into a straightforward UI gesture. It's a good example of treating Airflow not just as a scheduler, but as a platform with ergonomic tooling.

Explore the Airflow UI plugins in air-labs