# Apache Airflow 3.2.1 — Apache Airflow 3.2.1 - Product: Apache Airflow (https://whatsnew.fyi/product/apache-airflow) - Vendor: Apache Software Foundation - Date: 2026-04-22 - Version: 3.2.1 - Original notes: https://github.com/apache/airflow/releases/tag/3.2.1 - Permalink: https://whatsnew.fyi/product/apache-airflow/releases/3.2.1 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **changed** — The /dags endpoint now requires additional permissions (DagAccessEntity.RUN, DagAccessEntity.HITL_DETAIL, and DagAccessEntity.TASK_INSTANCE) instead of only read access to DAGs - **changed** — Allow UI theme config with only CSS overrides, icon only, or empty {} to restore OSS defaults, making the tokens field optional in theme configuration - **fixed** — Fix DEFAULT_LOGGING_CONFIG to use right kwargs - **fixed** — Fix zip DAG import errors being cleared during bundle refresh - **fixed** — Fix dispose_orm() not disposing async engine on shutdown - **fixed** — Fix get_team_name_dep creating wasted async sessions when multi_team=False - **fixed** — Fix asset graph view leaking DAGs outside the user's permissions - **fixed** — Fix migration: add missing disable_sqlite_fkeys to migration 0108 - **fixed** — Fix heartbeat: add fast-path UPDATE to avoid row lock in the common case - **fixed** — Fix deactivated state not shown for stale DAGs in UI - **fixed** — Fix N+1 queries during DAG serialization with bulk prefetch - **fixed** — Fix serializer for empty string extra in connection - **fixed** — Fix menu positioning for dropdowns in connection forms in UI - **fixed** — Fix SearchBar value not syncing with defaultValue changes in UI - **fixed** — Fix SDK configuration to use $AIRFLOW_CONFIG env - **fixed** — Fix Session staying opened between yields - **fixed** — Fix Session leak from StreamingResponse API endpoints - **fixed** — Fix redirect loop when stale root-path _token cookie exists from older Airflow instance - **fixed** — Fix @task decorator to validate operator arg types at decoration time - **added** — Add write_to_os support for writing task logs to OpenSearch 📦 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 ``/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) ##### Improvements - Allow UI theme config with only CSS overrides, icon only, or empty ``{}`` to restore OSS defaults. The ``tokens`` field is now optional in the theme configuration. (#64552) ##### Bug Fixes - Fix ``DEFAULT_LOGGING_CONFIG`` to use right ``kwargs`` (#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_dep`` creating wasted async sessions when ``multi_team=False`` (#65275) (#65282) - Fix asset graph view leaking DAGs outside the user's permissions (#65273) (#65280) - Fix migration: add missing ``disable_sqlite_fkeys`` to migration 0108 (#65288) (#65290) - Fix heartbeat: add fast-path ``UPDATE`` to 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 ``dropdowns`` in connection forms (#65007) (#65085) (#65138) - UI: Fix ``SearchBar`` value not syncing with ``defaultValue`` changes (#65054) (#65140) - Fix SDK configuration to use ``$AIRFLOW_CONFIG`` env (#64936) (#65200) - Fix ``Session`` staying opened between yields (#65179) (#65195) - Fix ``Session`` leak from ``StreamingResponse`` API endpoints (#65162) (#65193) - Fix redirect loop when stale root-path ``_token`` cookie exists from older Airflow instance (#64955) (#65177) - Fix ``@task`` decorator to validate operator arg types at decoration time (#65041) (#65050) - Fix CLI error handling and exit codes for failed commands (#65052) (#65097) - Fix ``is_alive`` default to ``None`` in ``jobs list`` CLI (#65065) (#65091) - Fix missing ``dag_id`` in ``get_task_instance`` (#64957) (#64968) (#65067) - UI: Fix cancel ``debounce`` on 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 ``UPDATE``s inside ``disable_sqlite_fkeys`` in migration 0097 (#64876) (#64940) - Fix heartbeat to return 410 Gone when cleared ``TI`` exists 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 ``TypeError`` in ``GET /dags/{dag_id}/tasks`` when ``order_by`` field has ``None`` values (#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 import`` returning non-zero exit code on failure (#64416) (#64449) - Fix structlog positional formatting for single-dict arguments (#62849) (#64773) - UI: Fix external link ``target`` and add ``rel`` attributes (#64542) (#64772) - UI: Fix ``DagVersionSelect`` o _[Truncated at 4000 characters — full notes: https://github.com/apache/airflow/releases/tag/3.2.1]_