Airflow: 3.1.5 Release

Release date:
December 12, 2025
Previous version:
3.1.5rc1 (released December 12, 2025)
Magnitude:
0 Diff Delta
Contributors:
0 total committers
Data confidence:
Commits:

Top Contributors in 3.1.5

Could not determine top contributors for this release.

Directory Browser for 3.1.5

All files are compared to previous version, 3.1.5rc1. Click here to browse diffs between other versions.

Loading File Browser...

Release Notes Published

πŸ“¦ PyPI: https://pypi.org/project/apache-airflow/3.1.5/ πŸ“š Docs: https://airflow.apache.org/docs/apache-airflow/3.1.5/ πŸ“š Task SDK Docs: https://airflow.apache.org/docs/task-sdk/1.1.5/ πŸ›  Release Notes: https://airflow.apache.org/docs/apache-airflow/3.1.5/release_notes.html 🐳 Docker Image: "docker pull apache/airflow:3.1.5" 🚏 Constraints: https://github.com/apache/airflow/tree/constraints-3.1.5

Significant Changes

No significant changes.

Bug Fixes

Handle invalid token in JWTRefreshMiddleware (#56904) Fix inconsistent Dag hashes when template fields contain unordered dicts (#59091) (#59175) Fix assets used only as inlets being incorrectly orphaned (#58986) Fix exception when logging stdout with a custom %-format string (#58963) Fix backfill max_active_runs race condition with concurrent schedulers (#58935) Fix LocalExecutor memory spike by applying gc.freeze (#58934) Fix string to datetime pydantic conversion (#58916) Fix deadlines being incorrectly pruned for DAG runs with the same run_id (#58910) Fix handling of pre-AIP-39 DAG runs (#58773) Mask secrets properly when using deprecated import path (#58726) Preserve Asset.extra when using AssetAlias (#58712) Fix timeout_after in run_trigger method of TriggerRunner (#58703) Fix connection retrieval from secrets backend without conn_type (#58664) Fix task retry logic to respect retries for all exit codes (#58478) Respect default_args in DAG when set to a "falsy" value (#58396) Fix airflow config list output for multi-line values (#58378) Fix TriggerDagRunOperator stuck in deferred state with reset_dag_run=True (#58333) Fix HITLTrigger params serialization (#58297) Fix atomicity issue in SerializedDagModel.write_dag preventing orphaned DAG versions (#58281) Mask kwargs when illegal arguments are passed (#58283) Fix supervisor communications not reconnecting when using dag.test() (#58266) Fix supervisor communications and logs not reconnecting in task subprocesses (#58263) Make pool description optional when patching pools (#58169) Fix check_files.py script after source tarball was renamed (#58192) Fix db cleanup logging behavior and docstrings (#58523) Fix Asset URI normalization for user info without password (#58485) UI: Fix object rendering in Human-in-the-Loop (HITL) interface (#58611) UI: Fix "Consuming Tasks" section not in asset header (#58060) UI: Fix timezone string parsing to use dayjs correctly (#57880) UI: Ensure task instance endDate is not null (#58435) UI: Fix trigger parameter field showing as dict when param.value is null (#58899) UI: Remove unnecessary refresh state consumption for DAG header (#58692) UI: Fix mobile responsiveness of Dashboard sections (#58853) UI: Fix incorrect backfill duration calculation in Grid view (#58816) UI: Redact secrets in rendered templates to not expose them in UI (#58772) UI: Add fallback value of 1 for number of DAG runs in Grid view (#58735) UI: Update refresh token flow (#58649) UI: Fix 404 handling with fallback route for invalid URLs (#58629) UI: Fix excessive database queries in UI grid endpoint by adding query count guard (#57977, #58632) UI: Fix DAG documentation markdown display issue (#58627) UI: Fix duration chart duration format (#58564) UI: Fix TaskGroup nodes not being properly highlighted when selected in Graph view (#58559) UI: Fix tag filter with special characters (#58558) UI: Fix group task instance tab memory leak (#58557) UI: Fix popup automatically closing when DAG run completes (#58538) UI: Fix operator extra links not appearing on failed tasks (#58508) UI: Fix TypeError in parseStreamingLogContent for non-string data (#58399) UI: Fix Dag tag order (#58904)

Miscellaneous

Do not remove .pyc and .pyo files after building Python (#58947) Improve cross-distribution dependency management (#58472) Bump glob from 10.4.5 to 10.5.0 in simple auth manager UI (#58463) Bump glob in React core UI (#58461)

Doc Only Changes

Fix Chinese (Traditional) translations for trigger-related terminology (#58989) Close translation gaps in German (#58971) Add missing Polish translations (#58939) Clarify that Connection extra JSON masking is keyword-dependent (#58587) Add migration guide for Airflow 2 users accessing database in tasks (#57479) Update UIAlert import path and usage for v3 (#58891) Add clarifying documentation for TaskGroup parameters (#58880) Enhance asset extra field documentation (#58830) Update mask_secret documentation to use the latest import path (#58534) Improve disable_bundle_versioning configuration documentation (#58405) Fix documentation for installing from sources (#58373) Fix broken link on installing-from-sources page (#58324) Add missing DAG run table translations (#58572)