release notes
release notes
Published 4/22/2026
PatchContains breaking changes📦 PyPI: https://pypi.org/project/apache-airflow/3.2.1/ 📚 Docs: https://airflow.apache.org/docs/apache-airflow/3.2.1/ 🛠 Release Notes: https://airflow.apache.org/docs/apache-airflow/3.2.1/release_notes.html 🐳 Docker Image: "docker pull apache/airflow:3.2.1" 🚏 Constraints: https://github.com/apache/airflow/tree/constraints-3.2.1
/dags endpoint, as it now requires additional permissions (DagAccessEntity.RUN, DagAccessEntity.HITL_DETAIL, and DagAccessEntity.TASK_INSTANCE). This change was made because the endpoint returns aggregated data from these multiple entities. Please update your custom user roles to include read access for DAG Runs, Task Instances, and HITL Details if those users should still have access to the /dags endpoint. (#64822){} to restore OSS defaults. The tokens field is now optional in the theme configuration. (#64552)DEFAULT_LOGGING_CONFIG to use right kwargs (#65412) (#65424)dispose_orm() not disposing async engine on shutdown (#65274) (#65284)get_team_name_dep creating wasted async sessions when multi_team=False (#65275) (#65282)disable_sqlite_fkeys to migration 0108 (#65288) (#65290)UPDATE to avoid row lock in the common case (#65029) (#65137)dropdowns in connection forms (#65007) (#65085) (#65138)SearchBar value not syncing with defaultValue changes (#65054) (#65140)$AIRFLOW_CONFIG env (#64936) (#65200)Session staying opened between yields (#65179) (#65195)Session leak from StreamingResponse API endpoints (#65162) (#65193)_token cookie exists from older Airflow instance (#64955) (#65177)[@task](https://github.com/task) decorator to validate operator arg types at decoration time (#65041) (#65050)is_alive default to None in jobs list CLI (#65065) (#65091)dag_id in get_task_instance (#64957) (#64968) (#65067)debounce on clear to prevent stale search value (#64893) (#64907)CommsDecoder (#64894) (#64946)UPDATEs inside disable_sqlite_fkeys in migration 0097 (#64876) (#64940)TI exists in TIH (#61631) (#64693)SerializedDagModel (#64322) (#64738)TypeError in GET /dags/{dag_id}/tasks when order_by field has None values (#64384) (#64587)DagRun (#64752) (#64853)connections import returning non-zero exit code on failure (#64416) (#64449)target and add rel attributes (#64542) (#64772)DagVersionSelect options not filtered by selected DagRun (#64736) (#64771)start_date in example DAGs to avoid timezone conversion overflow (#63882) (#64758)AirflowPlugin not re-exported, causing mypy errors in plugins (#65132) (#65163)apache-airflow-providers-fab minimum version to prevent connexion import error on Python 3.13 (#65523) (#65524)TriggerCommsDecoder sync req-res cycle (#64882) (#65285)write_to_os support for writing task logs to OpenSearch (#64364) (#65201)airflow_local_settings.py (#64764) (#65003)release notes
Published 4/22/2026
PatchContains breaking changes📦 PyPI: https://pypi.org/project/apache-airflow/3.2.1/ 📚 Docs: https://airflow.apache.org/docs/apache-airflow/3.2.1/ 🛠 Release Notes: https://airflow.apache.org/docs/apache-airflow/3.2.1/release_notes.html 🐳 Docker Image: "docker pull apache/airflow:3.2.1" 🚏 Constraints: https://github.com/apache/airflow/tree/constraints-3.2.1
/dags endpoint, as it now requires additional permissions (DagAccessEntity.RUN, DagAccessEntity.HITL_DETAIL, and DagAccessEntity.TASK_INSTANCE). This change was made because the endpoint returns aggregated data from these multiple entities. Please update your custom user roles to include read access for DAG Runs, Task Instances, and HITL Details if those users should still have access to the /dags endpoint. (#64822){} to restore OSS defaults. The tokens field is now optional in the theme configuration. (#64552)DEFAULT_LOGGING_CONFIG to use right kwargs (#65412) (#65424)dispose_orm() not disposing async engine on shutdown (#65274) (#65284)get_team_name_dep creating wasted async sessions when multi_team=False (#65275) (#65282)disable_sqlite_fkeys to migration 0108 (#65288) (#65290)UPDATE to avoid row lock in the common case (#65029) (#65137)dropdowns in connection forms (#65007) (#65085) (#65138)SearchBar value not syncing with defaultValue changes (#65054) (#65140)$AIRFLOW_CONFIG env (#64936) (#65200)Session staying opened between yields (#65179) (#65195)Session leak from StreamingResponse API endpoints (#65162) (#65193)_token cookie exists from older Airflow instance (#64955) (#65177)[@task](https://github.com/task) decorator to validate operator arg types at decoration time (#65041) (#65050)is_alive default to None in jobs list CLI (#65065) (#65091)dag_id in get_task_instance (#64957) (#64968) (#65067)debounce on clear to prevent stale search value (#64893) (#64907)CommsDecoder (#64894) (#64946)UPDATEs inside disable_sqlite_fkeys in migration 0097 (#64876) (#64940)TI exists in TIH (#61631) (#64693)SerializedDagModel (#64322) (#64738)TypeError in GET /dags/{dag_id}/tasks when order_by field has None values (#64384) (#64587)DagRun (#64752) (#64853)connections import returning non-zero exit code on failure (#64416) (#64449)target and add rel attributes (#64542) (#64772)DagVersionSelect options not filtered by selected DagRun (#64736) (#64771)start_date in example DAGs to avoid timezone conversion overflow (#63882) (#64758)AirflowPlugin not re-exported, causing mypy errors in plugins (#65132) (#65163)apache-airflow-providers-fab minimum version to prevent connexion import error on Python 3.13 (#65523) (#65524)TriggerCommsDecoder sync req-res cycle (#64882) (#65285)write_to_os support for writing task logs to OpenSearch (#64364) (#65201)airflow_local_settings.py (#64764) (#65003)Apache Airflow - A platform to programmatically author, schedule, and monitor workflows