📦 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
Significant Changes
- Users who only have read access to DAGs will no longer be able to fetch data from the
/dagsendpoint, as it now requires additional permissions (DagAccessEntity.RUN,DagAccessEntity.HITL_DETAIL, andDagAccessEntity.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/dagsendpoint. (#64822)
Improvements
- Allow UI theme config with only CSS overrides, icon only, or empty
{}to restore OSS defaults. Thetokensfield is now optional in the theme configuration. (#64552)
Bug Fixes
- Fix
DEFAULT_LOGGING_CONFIGto use rightkwargs(#65412) (#65424) - Fix zip DAG import errors being cleared during bundle refresh (#63617) (#65296)
- Fix
dispose_orm()not disposing async engine on shutdown (#65274) (#65284) - Fix
get_team_name_depcreating wasted async sessions whenmulti_team=False(#65275) (#65282) - Fix asset graph view leaking DAGs outside the user's permissions (#65273) (#65280)
- Fix migration: add missing
disable_sqlite_fkeysto migration 0108 (#65288) (#65290) - Fix heartbeat: add fast-path
UPDATEto avoid row lock in the common case (#65029) (#65137) - UI: Fix deactivated state not shown for stale DAGs (#65214) (#65218)
- Fix N+1 queries during DAG serialization with bulk prefetch (#64929) (#65208)
- Fix serializer for empty string extra in connection (#65014) (#65215)
- UI: Fix menu positioning for
dropdownsin connection forms (#65007) (#65085) (#65138) - UI: Fix
SearchBarvalue not syncing withdefaultValuechanges (#65054) (#65140) - Fix SDK configuration to use
$AIRFLOW_CONFIGenv (#64936) (#65200) - Fix
Sessionstaying opened between yields (#65179) (#65195) - Fix
Sessionleak fromStreamingResponseAPI endpoints (#65162) (#65193) - Fix redirect loop when stale root-path
_tokencookie exists from older Airflow instance (#64955) (#65177) - Fix
@taskdecorator to validate operator arg types at decoration time (#65041) (#65050) - Fix CLI error handling and exit codes for failed commands (#65052) (#65097)
- Fix
is_alivedefault toNoneinjobs listCLI (#65065) (#65091) - Fix missing
dag_idinget_task_instance(#64957) (#64968) (#65067) - UI: Fix cancel
debounceon clear to prevent stale search value (#64893) (#64907) - Fix read out-of-order issue with send method in
CommsDecoder(#64894) (#64946) - Fix bulk connection delete banner (#64735) (#64961)
- Fix migrations: move
UPDATEs insidedisable_sqlite_fkeysin migration 0097 (#64876) (#64940) - Fix heartbeat to return 410 Gone when cleared
TIexists in TIH (#61631) (#64693) - Fix scheduler: skip asset-triggered Dags without
SerializedDagModel(#64322) (#64738) - Fix N+1 query pattern in task instance states and count endpoints (#60352) (#64695)
- Fix
TypeErrorinGET /dags/{dag_id}/taskswhenorder_byfield hasNonevalues (#64384) (#64587) - UI: Fix duplicate nav sidebar when iframe navigates away from auth pages (#63873) (#64854)
- UI: Fix Gantt view "Error invalid date" on running
DagRun(#64752) (#64853) - Fix
connections importreturning non-zero exit code on failure (#64416) (#64449) - Fix structlog positional formatting for single-dict arguments (#62849) (#64773)
- UI: Fix external link
targetand addrelattributes (#64542) (#64772) - UI: Fix
DagVersionSelectoptions not filtered by selectedDagRun(#64736) (#64771) - Fix spurious blank lines in filtered task log download (#64235) (#64640)
- Fix OTel metrics lost in forked task processes (#64703) (#64720)
- Fix
start_datein example DAGs to avoid timezone conversion overflow (#63882) (#64758) - Fix
AirflowPluginnot re-exported, causing mypy errors in plugins (#65132) (#65163) - Fix
apache-airflow-providers-fabminimum version to preventconnexionimport error on Python 3.13 (#65523) (#65524) - UI: Fix graph view not auto-refreshing task states during DAG run (#65518) (#65522)
Miscellaneous
- Lock
TriggerCommsDecodersync req-res cycle (#64882) (#65285) - Add
write_to_ossupport for writing task logs to OpenSearch (#64364) (#65201) - Restore OpenSearch log integration in
airflow_local_settings.py(#64764) (#65003)
Doc-only Changes
- Add missing Polish translations to reach 100% coverage (#65272)
- Add FAQ entry for API server memory growth with gunicorn worker recycling (#65036) (#65037)
- Remove outdated reference to Dag Dependencies view (#64787) (#64911)
- Add JWT authentication docs and strengthen security model (#64760) (#64849)
- Add missing Catalan translations to reach 100% coverage (#65078) (#65389)
- Add missing German translations to close translation gaps (#65332)