Latest in branch 3
3.2.2
Released 29 May 2026
(2 days ago)
SoftwareApache Airflow
Version3
Environment
requirements
Python 3.10-3.14
PostgreSQL 13-17
MySQL 8.0/8.4
SQLite ≥3.15 (dev)
Linux/macOS
Debian Bookworm (CI)
Kubernetes 1.30-1.35
≥4GB RAM
Initial release3.0.0
22 Apr 2025
(1 year ago)
Latest release3.2.2
29 May 2026
(2 days ago)
Limited MaintenanceTBD
(Supported)
EOL/TerminatedTBD
(Supported)
Release noteshttps://github.com/apache/airflow/releases/tag/3.2.2
Source codehttps://github.com/apache/airflow/tree/3.2.2
Downloadhttps://github.com/apache/airflow/releases/tag/3.2.2
Apache Airflow 3 ReleasesView full list

What Is New in Apache Airflow 3

Apache Airflow 3.0 is the most significant release in the project's history. It introduces a service-oriented architecture, a fully rewritten React UI, native DAG versioning, first-class Asset support, event-driven scheduling, and a new Task Execution API that lets tasks run anywhere -- in any language -- with full isolation from the metadata database.

Category Highlights
New Features Task Execution API & Task SDK (AIP-72); Edge Executor (AIP-69); React UI rewrite (AIP-38, AIP-84); DAG Versioning (AIP-65, AIP-66); Data Assets & @asset decorator (AIP-74, AIP-75); External Event Scheduling via pluggable message bus (AIP-82); Scheduler-managed backfills with UI (AIP-78); Non-data-interval DAG support for ML inference runs (AIP-83)
Improvements Split CLI with new airflowctl provider package (AIP-81); New API Server (FastAPI-based); Asset-based DAG triggering replaces legacy Dataset model; Scheduler-native backfill management; Improved task isolation via Task SDK
Breaking Changes Direct metadata DB access from task code removed; schedule=None and catchup=False are new defaults; schedule_interval and timetable parameters removed; several context variables removed (conf, execution_date, etc.); fail_stop renamed to fail_fast; .airflowignore now uses glob syntax
Deprecations / Removals SubDAGs removed (use Task Groups); SLAs removed (Deadline Alerts planned); EmailOperator moved to SMTP provider; dummy trigger rule renamed to always; none_failed_or_skipped renamed; XCom pickling removed

What does the new Task Execution API mean for how Airflow runs tasks?

The Task Execution API (AIP-72) fundamentally changes Airflow's execution model: tasks no longer need direct access to the metadata database or the Airflow process tree -- they communicate with the scheduler via a dedicated API server instead.

In practice, this means worker processes are now fully decoupled from the core Airflow stack. The new Task SDK provides a language-agnostic contract for task execution, which opens the door to tasks written in languages other than Python. This also improves security posture considerably -- a compromised worker can no longer directly query or modify the Airflow DB.

Watch out for the hard removal of direct DB access from task code. If your tasks use internal Airflow models (e.g. DagRun, TaskInstance queries from within a task), those calls will fail on Airflow 3. The recommended migration path is to replace them with REST API calls.

# Airflow 2 -- direct DB access (no longer supported in Airflow 3)
from airflow.models import DagRun
runs = DagRun.find(dag_id="my_dag")  # BREAKS in Airflow 3

# Airflow 3 -- use the REST API instead
import requests
resp = requests.get(
    "http://airflow-api/api/v1/dags/my_dag/dagRuns",
    headers={"Authorization": "Bearer <token>"}
)

How does DAG versioning work in Airflow 3 and why does it matter?

Airflow 3 introduces native DAG versioning (AIP-65, AIP-66): every structural change to a DAG is now tracked and stored, and users can inspect the full version history directly from the new UI.

This matters if you have ever wondered why a historical DAG run shows a task that no longer exists, or struggled to reproduce failures from weeks ago when the DAG code had since changed. With versioning, the serialized DAG structure is associated with each run, giving you a reliable audit trail.

Most teams will also notice that the brand-new React UI (AIP-38, AIP-84), built on FastAPI, delivers noticeably improved Grid, Graph, and Asset views. The legacy Jinja/Flask-AppBuilder UI is gone -- this is the UI going forward.

How has data-aware scheduling changed with Assets in Airflow 3?

What was called "Datasets" in Airflow 2.x has been elevated to a first-class concept called Assets in Airflow 3, with a new @asset decorator syntax and dedicated Asset-based execution paths (AIP-74, AIP-75).

External event scheduling (AIP-82) extends this further -- DAGs can now be triggered by events arriving via a pluggable message bus. The initial release ships with AWS SQS support. This is a significant step toward true event-driven orchestration without polling hacks.

from airflow.decorators import asset

@asset(uri="s3://my-bucket/processed/output.parquet")
def process_data():
    # task body -- Airflow tracks this as a producible Asset
    ...

The scheduler-managed backfill overhaul (AIP-78) is also worth noting: backfills are now a first-class scheduler concern with UI visibility and better diagnostics. In Airflow 2, backfills were a CLI-only affair with limited observability.

What are the most important breaking changes when upgrading to Airflow 3?

The scheduling API received a sweeping cleanup: schedule_interval and timetable DAG constructor arguments are removed entirely -- use schedule exclusively. The new defaults are schedule=None and catchup=False, which is a sensible production default but may silently change behaviour for DAGs that previously relied on implicit catchup.

Several task context variables have been removed, including conf, execution_date, and dag_run.external_trigger. The fail_stop DAG parameter is now fail_fast. The .airflowignore file now uses glob syntax by default rather than regex.

The removed features table captures the most impactful removals:

Removed Feature Replacement
SubDAGsTask Groups
SLAsDeadline Alerts (planned post-3.0)
EmailOperator (core)SMTP provider's EmailOperator
dummy trigger rulealways
none_failed_or_skipped trigger rulenone_failed_min_one_success
XCom picklingCustom XCom backend

The Airflow team provides two automated tools to ease the migration:

# Flag and auto-fix DAG-level breaking changes
ruff check --preview --select AIR30 --fix

# Identify removed or renamed config options
airflow config lint

The minimum supported version to upgrade from is Airflow 2.7. Anthropic strongly recommends reaching Airflow 2.10.x first to surface all deprecation warnings before jumping to 3.0.

Does Airflow 3 add anything specifically for ML and AI workloads?

Yes -- Airflow 3 introduces support for non-data-interval DAGs (AIP-83), which removes the uniqueness constraint on execution dates. This is directly targeted at ML use cases such as inference pipelines, hyperparameter tuning runs, and any workload that needs to trigger multiple identical runs without manufacturing artificial data intervals.

The Edge Executor (AIP-69) is an experimental addition that enables edge compute patterns -- running tasks on lightweight remote agents without standing up a full Airflow worker fleet. This is early-stage but worth watching for teams deploying to constrained or distributed environments.

In practice, the combination of the Task SDK's language-agnostic execution model plus non-data-interval scheduling means Airflow 3 is considerably more practical as an ML orchestration platform than its predecessors.

Frequently Asked Questions -- Apache Airflow 3

Can I upgrade directly from Airflow 2.6 to Airflow 3.0?
No. The minimum supported base for upgrading to Airflow 3.0 is Airflow 2.7. Anthropic recommends reaching Airflow 2.10.x first so you benefit from all deprecation warnings before migrating.

Is my existing DAG code compatible with Airflow 3 without changes?
Many Airflow 2 DAGs will work without changes, but any DAG using schedule_interval, timetable, SubDAGs, XCom pickling, direct DB access from task code, or removed context variables like execution_date will need to be updated before running on Airflow 3.

How do I find and fix breaking changes in my DAGs automatically?
Run ruff check --preview --select AIR30 --fix against your DAG files to flag and auto-fix the most common DAG-level breaking changes, then run airflow config lint to catch removed or renamed configuration options in your airflow.cfg.

What replaces the legacy Dataset-based scheduling in Airflow 3?
Datasets have been replaced by the Assets concept, which includes a new @asset decorator and dedicated asset-driven execution paths. Assets are a superset of the old Dataset model and support the same outlet/inlet patterns while adding the new @asset decorator syntax introduced in AIP-74 and AIP-75.

Is the Edge Executor production-ready in Airflow 3.0?
No, it is explicitly marked as experimental. It enables edge compute and event-driven orchestration patterns but should not be used in production workloads until it exits the experimental phase in a future release.

Does Airflow 3 still support Python 3.8?
No. Airflow 3.0 drops support for older Python versions. Check the official upgrade guide for the current minimum Python version requirement before planning your migration.

Releases In Branch 3

VersionRelease date
3.2.229 May 2026
(2 days ago)
3.2.2rc327 May 2026
(4 days ago)
3.2.2rc226 May 2026
(5 days ago)
3.2.2rc121 May 2026
(10 days ago)
3.2.122 Apr 2026
(1 month ago)
3.2.1rc321 Apr 2026
(1 month ago)
3.2.1rc218 Apr 2026
(1 month ago)
3.2.1rc116 Apr 2026
(1 month ago)
3.2.007 Apr 2026
(1 month ago)
3.2.0rc203 Apr 2026
(1 month ago)
3.2.0rc131 Mar 2026
(2 months ago)
3.2.0b224 Mar 2026
(2 months ago)
3.1.812 Mar 2026
(2 months ago)
3.1.8rc210 Mar 2026
(2 months ago)
3.1.8rc106 Mar 2026
(2 months ago)
3.2.0b103 Mar 2026
(2 months ago)
3.1.704 Feb 2026
(3 months ago)
3.1.7rc203 Feb 2026
(3 months ago)
3.1.7rc130 Jan 2026
(4 months ago)
3.1.613 Jan 2026
(4 months ago)
3.1.6rc108 Jan 2026
(4 months ago)
3.1.512 Dec 2025
(5 months ago)
3.1.5rc112 Dec 2025
(5 months ago)
3.1.410 Dec 2025
(5 months ago)
3.1.4rc208 Dec 2025
(5 months ago)
3.1.4rc104 Dec 2025
(5 months ago)
3.1.314 Nov 2025
(6 months ago)
3.1.3rc111 Nov 2025
(6 months ago)
3.1.205 Nov 2025
(6 months ago)
3.1.2rc204 Nov 2025
(6 months ago)
3.1.2rc131 Oct 2025
(7 months ago)
3.1.127 Oct 2025
(7 months ago)
3.1.1rc223 Oct 2025
(7 months ago)
3.1.1rc122 Oct 2025
(7 months ago)
3.1.025 Sep 2025
(8 months ago)
3.1.0rc223 Sep 2025
(8 months ago)
3.1.0rc119 Sep 2025
(8 months ago)
3.1.0b215 Sep 2025
(8 months ago)
3.1.0b109 Sep 2025
(8 months ago)
3.0.629 Aug 2025
(9 months ago)
3.0.6rc226 Aug 2025
(9 months ago)
3.0.6rc122 Aug 2025
(9 months ago)
3.0.520 Aug 2025
(9 months ago)
3.0.5rc318 Aug 2025
(9 months ago)
3.0.5rc214 Aug 2025
(9 months ago)
3.0.5rc113 Aug 2025
(9 months ago)
3.0.408 Aug 2025
(9 months ago)
3.0.4rc206 Aug 2025
(9 months ago)
3.0.4rc104 Aug 2025
(9 months ago)
3.0.314 Jul 2025
(10 months ago)
3.0.3rc611 Jul 2025
(10 months ago)
3.0.3rc510 Jul 2025
(10 months ago)
3.0.3rc407 Jul 2025
(10 months ago)
3.0.3rc304 Jul 2025
(10 months ago)
3.0.3rc204 Jul 2025
(10 months ago)
3.0.3rc103 Jul 2025
(10 months ago)
3.0.210 Jun 2025
(11 months ago)
3.0.2rc206 Jun 2025
(11 months ago)
3.0.2rc104 Jun 2025
(11 months ago)
3.0.112 May 2025
(1 year ago)
3.0.1rc107 May 2025
(1 year ago)
3.0.022 Apr 2025
(1 year ago)
3.0.0rc419 Apr 2025
(1 year ago)
3.0.0rc316 Apr 2025
(1 year ago)
3.0.0rc210 Apr 2025
(1 year ago)
3.0.0rc104 Apr 2025
(1 year ago)
3.0.0b420 Mar 2025
(1 year ago)
3.0.0b313 Mar 2025
(1 year ago)
3.0.0b206 Mar 2025
(1 year ago)
3.0.0b127 Feb 2025
(1 year ago)
3.0.0a420 Feb 2025
(1 year ago)
3.0.0a313 Feb 2025
(1 year ago)
3.0.0a207 Feb 2025
(1 year ago)
3.0.0a131 Jan 2025
(1 year ago)