apache / apache/airflow

Improve filtering support in Airflow 3.x UI Views

Open
#53,040 13 comments 8 reactions 0 assignees View on GitHub
area:UI kind:feature kind:meta
Dominant language
Python
Stars
46.9k
Forks
17.8k
Avg merge
2d 10h
Merged PRs (30d)
483

Description

### Improve filtering support in Airflow 3.x UI Views

With the transition to the new UI architecture in Airflow 3.0, many filters that were previously available via Flask AppBuilder were lost. This issue tracks efforts to restore and expand filtering capabilities across core UI views.

Better filtering improves usability for users working with large DAG inventories, high-volume environments, or complex asset-based workflows.

## Goals

- Reintroduce parity filters from FAB-era views
- Leverage the modern REST API to expose new filters (e.g DAG version, duration)
- Ensure filtering UX is consistent across views (Dags, DAG Runs, Task Instances, Assets)
- Flag gaps in API support as needed

## Tracked Views & Proposed Filters

Each of the following should eventually have its own issue and PR(s):
- **Search - Dags**: Filter by import errors, DAG owner, stale DAGs, bundle name, timetable type, unscheduled DAGs (DAGs without a schedule set)
- **Search - DAG Runs**: Filter by logical date range, DAG version, duration range, cons keys, triggered by, consuming and producing assets
- **Search - Task Instances**: Filter by DAG ID, run ID, Operator type, duration, logical date, try number, queue, pool, mapped index
- **DAG View - Graph**: Filter by task state, task group, mapped index, duration threshold
- **DAG View - Code**: Text search, toggle file diff, filter to specific sections (task definitions)
- **DAG View - Runs Tab**: Filter by logical date range, run after range, confirm key/value, DAG version, bundle version, triggered by
- **DAG View - Tasks Tab**: Filter by operator type, retry count, trigger rule, mapped index
- **DAG View - Audit Log Tab**: Filter by event type, user, run ID, task ID, try number, map index
- **Task View - Task Instances Tab**: Filter by run ID, Operator type, duration, logical date, try number, queue, pool, mapped index, Dag Version
- **Task View - Audit Log Tab**: Filter by event type, user, run ID, task ID, try number, map index
- Update: View doesn't appear to be working at the moment, so skipping creating a child issue for it
- **Search - Assets**: Filter by Asset Group, Producing DAG / Task, last event timestamp, has events
- **Asset View**: Filter events by timestamp, DAG ID, task ID, map index, event type
- **Browse - Audit Log**: Filter by DAG ID, task ID, run ID, map index, try number, timestamp range
- **Browse - Xcoms**: Filter by DAG ID, task ID, run ID, logical date range, run after date range, key, partial value match

Contributor guide

Open the contributing guide

Research direction

No files, tests, or entry points are named. Start by splitting the tracked views into separate child issues and reviewing current UI and REST API support for one filter group; done should mean the requested filter is restored consistently and any API gap is explicitly recorded.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api, frontend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.