- Nov 5, 2025
- Parsed from source:Nov 5, 2025
- Detected by Releasebot:Nov 5, 2025
Apache Airflow 3.1.2
Airflow 3.1.2 lands with broad bug fixes and UI polish. From import fixes and DAG processing stability to improved logs, performance, and navigation, this release tightens reliability for day to day workflows. A solid stability and speed upgrade.
📦 PyPI: https://pypi.org/project/apache-airflow/3.1.2/
📚 Docs: https://airflow.apache.org/docs/apache-airflow/3.1.2/
🛠 Release Notes: https://airflow.apache.org/docs/apache-airflow/3.1.2/release_notes.html
🐳 Docker Image: "docker pull apache/airflow:3.1.2"
🚏 Constraints: https://github.com/apache/airflow/tree/constraints-3.1.2Significant Changes
Significant Changes
No significant changes.
Bug Fixes
Bug Fixes
- Fix import error when upgrading structlog to 25.5.0+ (#57335)
- Fix connection retrieval in DagProcessorManager for bundle initialization (#57459)
- Fix incorrect task instance counts displayed in task group headers (#55670)
- Fix task retry execution after tasks are killed by external signals (#55767)
- Fix triggerer errors after Airflow 2 to 3 migration (#55884)
- Fix tasks unable to access triggering_user_name context variable (#56193)
- Fix outlet event extra data being empty in task instance success listener callbacks (#57031)
- UI: Fix panel button spacing and alignment issues (#57062)
- UI: Fix broken grid view links for tasks with retries (#57097)
- Fix DAG processor crash when renaming DAG tag case on MySQL (#57113)
- Fix iteration errors when using ObjectStoragePath (#57156)
- Fix auto-refresh not working on Required Actions page (#57207)
- Fix DAG processor crash by ignoring callbacks from other bundles (#57330)
- Fix asset name text overflow in DAG list view (#57363)
- Fix memory leak caused by repeated SSL context creation in API client (#57374)
- Fix performance issues loading DAG list page with many DAGs (#57444)
- Fix text selection jumping unexpectedly in log viewer (#57453)
- Fix DAG documentation pane not scroll-able when content is too long (#57518)
- Fix incorrect macro listings in template reference documentation (#57529)
- Fix Human-In-The-Loop operators failing when using notifiers (#57551)
- Fix n+1 query issues in XCom API endpoints (#57554)
- Fix n+1 query issues in Event Logs API endpoint (#57558)
- Fix n+1 query to fetch tags in the dags list page (#57570)
- Optimize database query to prevent "Out of sort memory" errors with many DAG versions (#57042)
- Optimize DAG list query for users with limited access (#57460)
- Optimize dynamic DAG updates to avoid loading large serialized DAGs (#57592)
- Reduce serialized DAG size by optimizing callback serialization in default_args (#57397)
Miscellaneous
Miscellaneous
- UI: Improve global navigation visual design, interaction, and accessibility (#57565)
- UI: Add button to download all task logs at once (#56771)
- UI: Add timestamp column to XCom viewer and standardize task instance columns (#57447)
- UI: Improve highlighting of selected task instances and edges in grid view (#57560)
- Improve retry logic by migrating from retryhttp to tenacity library (#56762)
- Improve exception logging for task instance heartbeat failures (#57179)
- Add Content-Type header to Task SDK API requests (#57386)
- Log execution API server URL at task startup (#57409)
- Reduce log noise by changing "Connection not found" from error to debug level (#57548)
- Add task_display_name alias in event log API responses (#57609)
- Improve Pydantic model validation strictness in serialization (#57616)
- Fix systemd service files issues (#57231)
Doc Only Changes
Doc Only Changes
- Improve plugin system documentation for clarity and completeness (#57068)
- Improve clarity on api workers recommendation in docs (#57404)
- Fix instance_name in UI docs (#57523)
- Fix airflow macros list in template document (#57529)
- Nov 5, 2025
- Parsed from source:Nov 5, 2025
- Detected by Releasebot:Nov 4, 2025
- Modified by Releasebot:Nov 6, 2025
November 5, 2025
- Nov 5, 2025
- Parsed from source:Nov 5, 2025
- Detected by Releasebot:Nov 5, 2025
Airflow 3.1.2
Airflow release bundles a broad set of fixes across UI, DAG processing, and API stability to improve upgrade reliability and everyday ops. It resolves import errors, task and retry issues, performance bottlenecks, and UI glitches while tightening docs and log handling.
Significant Changes
No significant changes.
Bug Fixes
- Fix import error when upgrading structlog to 25.5.0+ (#57335)
- Fix connection retrieval in DagProcessorManager for bundle initialization (#57459)
- Fix incorrect task instance counts displayed in task group headers (#55670)
- Fix task retry execution after tasks are killed by external signals (#55767)
- Fix triggerer errors after Airflow 2 to 3 migration (#55884)
- Fix tasks unable to access triggering_user_name context variable (#56193)
- Fix outlet event extra data being empty in task instance success listener callbacks (#57031)
- UI: Fix panel button spacing and alignment issues (#57062)
- UI: Fix broken grid view links for tasks with retries (#57097)
- Fix DAG processor crash when renaming DAG tag case on MySQL (#57113)
- Fix iteration errors when using ObjectStoragePath (#57156)
- Fix auto-refresh not working on Required Actions page (#57207)
- Fix DAG processor crash by ignoring callbacks from other bundles (#57330)
- Fix asset name text overflow in DAG list view (#57363)
- Fix memory leak caused by repeated SSL context creation in API client (#57374)
- Fix performance issues loading DAG list page with many DAGs (#57444)
- Fix text selection jumping unexpectedly in log viewer (#57453)
- Fix DAG documentation pane not scroll-able when content is too long (#57518)
- Fix incorrect macro listings in template reference documentation (#57529)
- Fix Human-In-The-Loop operators failing when using notifiers (#57551)
- Fix n+1 query issues in XCom API endpoints (#57554)
- Fix n+1 query issues in Event Logs API endpoint (#57558)
- Fix n+1 query to fetch tags in the dags list page (#57570)
- Optimize database query to prevent “Out of sort memory” errors with many DAG versions (#57042)
- Optimize DAG list query for users with limited access (#57460)
- Optimize dynamic DAG updates to avoid loading large serialized DAGs (#57592)
- Reduce serialized DAG size by optimizing callback serialization in default_args (#57397)
Miscellaneous
- UI: Improve global navigation visual design, interaction, and accessibility (#57565)
- UI: Add button to download all task logs at once (#56771)
- UI: Add timestamp column to XCom viewer and standardize task instance columns (#57447)
- UI: Improve highlighting of selected task instances and edges in grid view (#57560)
- Improve retry logic by migrating from retryhttp to tenacity library (#56762)
- Improve exception logging for task instance heartbeat failures (#57179)
- Add Content-Type header to Task SDK API requests (#57386)
- Log execution API server URL at task startup (#57409)
- Reduce log noise by changing “Connection not found” from error to debug level (#57548)
- Add task_display_name alias in event log API responses (#57609)
- Improve Pydantic model validation strictness in serialization (#57616)
- Fix systemd service files issues (#57231)
Doc Only Changes
- Improve plugin system documentation for clarity and completeness (#57068)
- Improve clarity on api workers recommendation in docs (#57404)
- Fix instance_name in UI docs (#57523)
- Fix airflow macros list in template document (#57529)
- Oct 29, 2025
- Parsed from source:Oct 29, 2025
- Detected by Releasebot:Nov 4, 2025
October 29, 2025
- Oct 28, 2025
- Parsed from source:Oct 28, 2025
- Detected by Releasebot:Nov 4, 2025
Airflow 3.1.1
Patch release with extensive bug fixes across core, UI and docs. Airflow 3.1.1 resolves crashes, memory leaks, and misbehaving retries while strengthening API behavior, grid views, and translations for a more stable, snappier workflow experience.
Bug Fixes
- Fix execution failures with NULL dag_run.conf during upgrades from earlier versions (#56729)
- Fix memory leak in remote logging connection cache (#56695)
- Fix DAG processor crash with pre-import module optimization enabled (#56779)
- Fix scheduler crash with email notifications (#56431)
- Fix scheduler crash during 3.0 to 3.1 migration when retry_delay is None (#56236)
- Fix task retries executing wrong method after deferred state (#56737)
- Fix retry callbacks not executing for externally killed tasks (#56607)
- Fix custom timetable generate_run_id not called for manual triggers (#56699)
- Fix KeyError when accessing retry_delay on MappedOperator without explicit value (#56605)
- Fix task-sdk connection error handling to match airflow-core behavior (#56653)
- Fix topological sort for Grid View (#56963)
- Fix get_ti_count and get_task_states access in callback requests (#56860)
- Fix Connection or Variable access in Server context (#56602)
- Fix .airflowignore order precedence (#56832)
- Fix migration errors for Pydantic 2.12.0 compatibility (#56581)
- Fix: Correctly parse JSON for --dag_run_conf in airflow dags backfill CLI (#56599)
- UI: Fix note modal does not change markdown text after change (#56092)
- UI: Fix Grid for cleared runs when tasks were removed (#56297)
- UI: Fix log text selection contrast in light mode (#56893)
- UI: Fix Advanced Search button overlap in DAG List View (#56777)
- UI: Fix view for many DAG tags (#55604)
- UI: Fix asset name text overflow in DAGs list view (#55914)
- UI: Fix auto refresh when only 1 dag run is running (#56649)
- UI: Fix UI keeps poking pools API when no permission (#56626)
- UI: Fix multi-line drag selection in task log view (#56300)
- UI: Fix task named 'root' causes blue screen on hover (#56926)
- UI: Fix cron expression display for Day-of-Month and Day-of-Week conflicts (#56255)
- UI: Fix Grid view performance issues with SerializedDagModel query optimization (#56938)
- Fix: Gracefully handle FastAPI plugins with empty url_prefix (#55262)
- Fix: Allow mapped tasks to accept zero-length inputs on rerun (#56162)
- Fix: Enable API to clear task instances by specifying map indexes (#56945)
- Fix: Add max_retry_delay to MappedOperator model (#56951)
- Fix: Use name passed to @asset decorator when fetching the asset (#56611)
- UI: Add English as a fallback locale (#56934)
Miscellaneous
- Add Greek UI translation (#56724)
- Add Thai UI translation (#56946)
- Add Polish translations (#56825)
- Close German translation gaps for full UI translation (#56981)
- Fix Hebrew typo in translations (#56168)
- Improve DAG and task missing error handling in callbacks (#56725)
- Improve UI retry strategy on client errors (#56638)
- Improve get dag grid structure endpoint speed (#56937)
- Optimize grid structure query with DISTINCT for dag_version_id lookup (#56565)
- Add configurable timeout for Execution API requests (#56969)
- Prevent unnecessary kubernetes client imports in workers (#56692)
- Lazy import PodGenerator for deserialization (#56733)
- Serialize pydantic models in json mode for JSON serialization compatibility (#56939)
- Update authentication to handle JWT token in backend (#56677)
- Update bulk API permission check to handle action_on_existence (#56672)
- Migrate CreateAssetEventsBody to Pydantic v2 ConfigDict (#56772)
- Restore timetable active_runs_limit check (#56922)
- Add is_favorite to UI dags list (#56341)
- Add executor, hostname, and queue columns to TaskInstances page (#55922)
- Add resize function for DAG Documentation (#56344)
- Add optional pending dag runs check to auto refresh (#56648)
- Add auto refresh to backfill banner (#56774)
- UI: Add Expand/Collapse all to XComs page (#56285)
- UI: Update recent runs bar chart and improve responsiveness (#56314)
- UI: Update duration format to show milliseconds (#56961)
- UI: Modify min width for task names in grid view (#56952)
- UI: Use Task Display Name in Graph if existing (#56511)
- UI: Use Task Display Name in Grid if existing (#56410)
- UI: Use TI duration from database instead of UI calculated (#56329)
- UI: Make DAG Run ID visible in DAG Header Card (#56409)
- UI: Modify calendar cell colors (#56161)
- UI: Modify log highlight color (#56894)
- UI: Fix show appropriate time units in grid view (#56414)
- UI: Reduce default columns of DAG Run and Task Instance lists (#55968)
- UI: Add expand and collapse functionality for task groups (#56334)
- UI: Avoid using rem for icons for Safari compatibility (#56304)
- UI: Add ANSI support to log viewer (#56721)
- UI: Support Dynamic UI Alerts (#56259)
- UI: Disable Gantt view by default (#56242)
- UI: Use welcome on dashboard instead of airflow (#56074)
- UI: Improve clipboard button visibility with hover effect (#56484)
- UI: Allow sub-pages in React UI plugins (#56485)
- Include task instance id in log printed by supervisor (#56383)
- Emit log stream stopped warning as ndjson (#56480)
- Detect interactive terminal to set colored logging with override env variable support (#56157)
- Add back deprecation warning for sla_miss_callback (#56127)
- Move natsort dependency to airflow-core (#56582)
- Added missing babel dependency in Task SDK (#56592)
- Remove unused dagReports API endpoint (#56621)
Doc Only Changes
- Improve API sort documentation (#56617)
- Improve API doc for ordering query param (#55988)
- Add Audit Logs detailed documentation (#56719)
- Update serializer document to reflect latest changes in codebase (#56857)
- Update ASF logos in documentation to the new Oak logo (#56601)
- Enhance triggering_asset_event retrieval documentation in DAGs (#56957)
- Remove self-reference in best practices documentation (#56111)
- Fix supported Python versions in README (#56734)
Full Changelog: 3.1.0...3.1.1
Original source Report a problem - Oct 27, 2025
- Parsed from source:Oct 27, 2025
- Detected by Releasebot:Nov 4, 2025
Airflow 3.1.1
This release delivers broad stability with fixes for scheduler and DAG processing crashes, memory leaks, and migration edge cases, plus UI and API reliability improvements. It also enhances translations and performance for faster, smoother workflows.
Significant Changes
No significant changes.
Bug Fixes
- Fix execution failures with NULL dag_run.conf during upgrades from earlier versions (#56729)
- Fix memory leak in remote logging connection cache (#56695)
- Fix DAG processor crash with pre-import module optimization enabled (#56779)
- Fix scheduler crash with email notifications (#56431)
- Fix scheduler crash during 3.0 to 3.1 migration when retry_delay is None (#56236)
- Fix task retries executing wrong method after deferred state (#56737)
- Fix retry callbacks not executing for externally killed tasks (#56607)
- Fix custom timetable generate_run_id not called for manual triggers (#56699)
- Fix KeyError when accessing retry_delay on MappedOperator without explicit value (#56605)
- Fix task-sdk connection error handling to match airflow-core behavior (#56653)
- Fix topological sort for Grid View (#56963)
- Fix get_ti_count and get_task_states access in callback requests (#56860)
- Fix Connection or Variable access in Server context (#56602)
- Fix .airflowignore order precedence (#56832)
- Fix migration errors for Pydantic 2.12.0 compatibility (#56581)
- Fix: Correctly parse JSON for --dag_run_conf in airflow dags backfill CLI (#56599)
- UI: Fix note modal does not change markdown text after change (#56092)
- UI: Fix Grid for cleared runs when tasks were removed (#56297)
- UI: Fix log text selection contrast in light mode (#56893)
- UI: Fix Advanced Search button overlap in DAG List View (#56777)
- UI: Fix view for many DAG tags (#55604)
- UI: Fix asset name text overflow in DAGs list view (#55914)
- UI: Fix auto refresh when only 1 dag run is running (#56649)
- UI: Fix UI keeps poking pools API when no permission (#56626)
- UI: Fix multi-line drag selection in task log view (#56300)
- UI: Fix task named 'root' causes blue screen on hover (#56926)
- UI: Fix cron expression display for Day-of-Month and Day-of-Week conflicts (#56255)
- UI: Fix Grid view performance issues with SerializedDagModel query optimization (#56938)
- Fix: Gracefully handle FastAPI plugins with empty url_prefix (#55262)
- Fix: Allow mapped tasks to accept zero-length inputs on rerun (#56162)
- Fix: Enable API to clear task instances by specifying map indexes (#56945)
- Fix: Add max_retry_delay to MappedOperator model (#56951)
- Fix: Use name passed to @asset decorator when fetching the asset (#56611)
- UI: Add English as a fallback locale (#56934)
Miscellaneous
- Add Greek UI translation (#56724)
- Add Thai UI translation (#56946)
- Add Polish translations (#56825)
- Close German translation gaps for full UI translation (#56981)
- Fix Hebrew typo in translations (#56168)
- Improve DAG and task missing error handling in callbacks (#56725)
- Improve UI retry strategy on client errors (#56638)
- Improve get dag grid structure endpoint speed (#56937)
- Optimize grid structure query with DISTINCT for dag_version_id lookup (#56565)
- Add configurable timeout for Execution API requests (#56969)
- Prevent unnecessary kubernetes client imports in workers (#56692)
- Lazy import PodGenerator for deserialization (#56733)
- Serialize pydantic models in json mode for JSON serialization compatibility (#56939)
- Update authentication to handle JWT token in backend (#56677)
- Update bulk API permission check to handle action_on_existence (#56672)
- Migrate CreateAssetEventsBody to Pydantic v2 ConfigDict (#56772)
- Restore timetable active_runs_limit check (#56922)
- Add is_favorite to UI dags list (#56341)
- Add executor, hostname, and queue columns to TaskInstances page (#55922)
- Add resize function for DAG Documentation (#56344)
- Add optional pending dag runs check to auto refresh (#56648)
- Add auto refresh to backfill banner (#56774)
- UI: Add Expand/Collapse all to XComs page (#56285)
- UI: Update recent runs bar chart and improve responsiveness (#56314)
- UI: Update duration format to show milliseconds (#56961)
- UI: Modify min width for task names in grid view (#56952)
- UI: Use Task Display Name in Graph if existing (#56511)
- UI: Use Task Display Name in Grid if existing (#56410)
- UI: Use TI duration from database instead of UI calculated (#56329)
- UI: Make DAG Run ID visible in DAG Header Card (#56409)
- UI: Modify calendar cell colors (#56161)
- UI: Modify log highlight color (#56894)
- UI: Fix show appropriate time units in grid view (#56414)
- UI: Reduce default columns of DAG Run and Task Instance lists (#55968)
- UI: Add expand and collapse functionality for task groups (#56334)
- UI: Avoid using rem for icons for Safari compatibility (#56304)
- UI: Add ANSI support to log viewer (#56721)
- UI: Support Dynamic UI Alerts (#56259)
- UI: Disable Gantt view by default (#56242)
- UI: Use welcome on dashboard instead of airflow (#56074)
- UI: Improve clipboard button visibility with hover effect (#56484)
- UI: Allow sub-pages in React UI plugins (#56485)
- Include task instance id in log printed by supervisor (#56383)
- Emit log stream stopped warning as ndjson (#56480)
- Detect interactive terminal to set colored logging with override env variable support (#56157)
- Add back deprecation warning for sla_miss_callback (#56127)
- Move natsort dependency to airflow-core (#56582)
- Added missing babel dependency in Task SDK (#56592)
- Remove unused dagReports API endpoint (#56621)
Doc Only Changes
- Improve API sort documentation (#56617)
- Improve API doc for ordering query param (#55988)
- Add Audit Logs detailed documentation (#56719)
- Update serializer document to reflect latest changes in codebase (#56857)
- Update ASF logos in documentation to the new Oak logo (#56601)
- Enhance triggering_asset_event retrieval documentation in DAGs (#56957)
- Remove self-reference in best practices documentation (#56111)
- Fix supported Python versions in README (#56734)
- Sep 25, 2025
- Parsed from source:Sep 25, 2025
- Detected by Releasebot:Nov 4, 2025
September 25, 2025
Release
We’ve just released Apache Airflow 3.1.0 and Task SDK 1.1.0.
Original source Report a problem - Sep 25, 2025
- Parsed from source:Sep 25, 2025
- Detected by Releasebot:Nov 4, 2025
Apache Airflow 3.1.0: Human-Centered Workflows
Airflow 3.1.0 introduces Human-in-the-Loop workflows, 17-language internationalization, a React plugin system, deadline alerts, and major UI/UX improvements plus Python 3.13 support and a streaming DAG run wait endpoint. A milestone fueled by strong community momentum.
Apache Airflow 3.1.0 introduces Human-in-the-Loop workflows, 17-language internationalization, deadline alerts, and React plugin system for data orchestration teams.
We are thrilled to announce the release of Apache Airflow 3.1.0, an update that puts humans at the center of data workflows. This release introduces powerful new capabilities for human decision-making in automated processes, comprehensive internationalization support, and significant developer experience improvements.
Details:
📦 PyPI: https://pypi.org/project/apache-airflow/3.1.0/
📚 Core Airflow Docs: https://airflow.apache.org/docs/apache-airflow/3.1.0/
📚 Task SDK Docs: https://airflow.apache.org/docs/task-sdk/1.1.0/
🛠️ Release Notes: https://airflow.apache.org/docs/apache-airflow/3.1.0/release_notes.html
🪶 Sources: https://airflow.apache.org/docs/apache-airflow/3.1.0/installation/installing-from-sources.html
🚏 Constraints: https://github.com/apache/airflow/tree/constraints-3.1.0HITL (Human-in-the-Loop): When Automation Meets Human Judgment
This powerful capability bridges the gap between automated processes and human expertise, making Airflow invaluable for:
- AI/ML Model Validation: Pause inference pipelines for human review of model outputs
- Content Moderation: Route content through human reviewers before publication
- Approval Workflows: Require manager approval for sensitive operations
- Data Quality Gates: Allow data stewards to validate critical datasets
HITL tasks pause in a deferred state while presenting intuitive web forms in the Airflow UI. Users with appropriate roles can review context data, DAG parameters, and XCom values before making informed decisions.
Example Code:
from airflow.sdk import DAG from airflow.providers.standard.operators.hitl import HITLOperator with DAG("content_moderation", schedule="@daily") as dag: moderate_content = HITLOperator( task_id="review_content", message="Please review this content for publication", data_key="content_to_review" )📊 UI Enhancements & Performance
Calendar and Gantt Views Make Their Comeback
Remember those beloved Calendar and Gantt chart views from Airflow 2.x? They’re back, completely rebuilt for the modern React UI after being omitted from the 3.0 release.
The new Calendar view is genuinely interactive with filtering capabilities that make it easy to drill down into specific time periods and dag states.
The Gantt chart is now integrated directly into the grid view and renders much faster than the old version, giving you that timeline perspective without the performance headaches.Theme Updates That Actually Matter
We’ve refreshed the color palette using modern design principles, making the UI more consistent, professional and most of all taken a careful look at contrast ratios so the UI should be more accessible.Other Improvements
We’ve added a lot more filtering options across the pages!
Plus, you can now pin your favorite DAGs to keep them at the top of your list or to filter for them easily. It’s one of those small features that makes a huge difference when dealing with 100s of workflows.📊 UI Development Milestone
Airflow 3.1.0 features 5x more UI pull requests than the 2.10 release and 50% more than Airflow 3.0, demonstrating the community’s commitment to user experience excellence.
⏰ Deadline Alerts: Proactive Workflow Monitoring
Say goodbye to reactive monitoring. Deadline Alerts provide proactive notifications when DAG runs exceed time thresholds, helping ensure SLA compliance and timely completion of critical workflows.
Configure monitoring by specifying:- Reference point: DAG queued time, logical date, or fixed datetime
- Interval: Time threshold (positive or negative)
- Callback: Notifications via Airflow Notifiers or custom functions
Example Code:
from datetime import timedelta from airflow.sdk.definitions.deadline import DeadlineAlert, DeadlineReference, AsyncCallback from airflow.providers.slack.notifications.slack_webhook import SlackWebhookNotifier with DAG( "critical_etl", deadline=DeadlineAlert( reference=DeadlineReference.DAGRUN_QUEUED_AT, interval=timedelta(hours=2), callback=AsyncCallback( SlackWebhookNotifier, kwargs={"text": "🚨 Critical ETL missed deadline!"} ) ) ) as dag: # Your tasks herePerfect for monitoring daily ETLs, alerting before critical deadlines, or escalating resource-constrained workflows.
🌍 Going Global with 17 Languages
Airflow now speaks your team’s language. Literally. We have added comprehensive internationalization support for 17 languages, including Arabic, Chinese, French, German, Spanish and more. The interface detects your browser preferences automatically, but you can switch languages on the fly without refreshing the page.
For our Arabic and Hebrew users, we’ve built in proper right-to-left (RTL) support
The best part? We have made it straightforward for the community to contribute additional languages with clear contribution guidelines, so this is just the beginning of Airflow’s global reach.🎨 Build your Airflow, your way
The new React Plugin System (AIP-68) transforms how you extend Airflow’s interface. We have replaced the old Flask-based approach with a modern toolkit that lets you customize Airflow exactly how your team works.
Want to embed your company’s dashboard right in the Airflow UI? Build React applications or iframes that will render inside Airflow’s (nav bar, dashboard, details page, etc.). Want to link to your existing tools seamlessly? Create custom external links to your resources. Want to extend Airflow’s API server? Register FastAPI sub applications and middlewares that fit your specific processes.
The system includes:- External Views for linking to existing tools (external links or embedded iframes)
- React Applications support for rendering external react apps
- FastAPI Sub Applications to extend the API server
- Root Middlewares for intercepting API requests (even core ones)
We’ve already seen teams integrate everything from Wikipedia searches to data lineage visualizations to yes, someone building a snake game to play while waiting on dag runs!
🔧 Enhanced Developer and Authoring Experience
Task SDK Evolution
Airflow 3.1 advances the decoupling of the Task SDK from Airflow Core through improved DAG serialization. While complete separation arrives in 3.2.0, the foundation enables:
- Independent Upgrades: Reduced coordination need between Dag authors and Airflow Ops teams
- Forward Compatibility: Dag authors should now write Dags by importing from the airflow.sdk namespace for future-proofing. (Naturally, the old imports still work but issue a warning.)
- Deployment Flexibility: Better support for separated component deployment
Python 3.13 Support
Airflow 3.1.0 adds Python 3.13 support while removing Python 3.9 (end-of-life). The platform now supports Python 3.10, 3.11, 3.12, and 3.13.
Inference Execution
A new streaming API endpoint (/dags/{dag_id}/dagRuns/{dag_run_id}/wait) allows applications to watch DAG runs until completion, enabling responsive integration patterns for real-time workflows.
The below example use httpx to trigger a dag run, and emits the final dag run state after it finishes:import asyncio import json import httpx dag_id = "my-dag" async def create_and_wait(client): # Create a dag run... r = await client.post(f"https://my-airflow.example.com/api/v2/dags/{dag_id}/dagRuns") run_id = r.json()["dag_run_id"] async with client.stream("GET", f"https://my-airflow.example.com/api/v2/dags/{dag_id}/dagRuns/{run_id}/wait") as r: async for line in r.aiter_lines(): pass # You can do progress report here instead. print("Dag run state:", json.loads(line.strip())["state"]) async def main(): async with httpx.AsyncClient() as client: await create_and_wait(client) asyncio.run(main())🙏 Amazing Community
Apache Airflow 3.1.0 represents an extraordinary community effort, showcasing the vibrant ecosystem that drives this project forward with 163 contributors making this release possible across 1,400+ commits.Leading Contributors
Special thanks to our top 20 contributors who drove this release forward: Amogh Desai, Ash Berlin-Taylor, Brent Bovenzi, Bugra Ozturk, Daniel Standish, Elad Kalif, Ephraim Anierobi, GPK, Guan-Ming (Wesley) Chiu, Jarek Potiuk, Jens Scheffler, Karthikeyan Singaravelan, Kaxil Naik, LI,JHE-CHEN, Pierre Jeambrun, Shahar Epstein, Tzu-ping Chung, Vincent, Wei Lee, and Yeonguk Choo.
UI Excellence & Community Growth
The exceptional growth in UI contributions - 5x more pull requests than Airflow 2.10 and 50% more than Airflow 3.0 - reflects the dedicated efforts of our UI maintainers and an expanding community of 70 frontend contributors who have made user experience a cornerstone of this release.
Global Collaboration
The internationalization effort represents contributors from around the world, making Airflow truly accessible across 17 languages and diverse technical communities, demonstrating the truly global nature of the Airflow project.
Apache Airflow is a community-driven project. Special thanks to all contributors who made this release possible through code, documentation, testing, and feedback. The future of workflow orchestration is built together.
📝 Migration & Upgrade Notes
- Python Support: Ensure you’re running Python 3.10+ before upgrading. We recommend at least Python 3.12 for performance improvements from the Python core team – 3.13 if you can manage it is even better!
- Provider Updates: Update to the latest provider packages to take advantage of new features.
- Breaking Changes: Review the migration guide for configuration changes and removed features if you are upgrading directly from Airflow 2.x.
🔗 Get Involved
- Try the Release: Upgrade your development environment and explore the new features
- Join the Conversation: Connect with us on (Airflow Slack) and the (dev mailing list)
- Contribute: Check out our contribution guide.
- Provide Feedback: Share your experiences and suggestions on GitHub (https://github.com/apache/airflow)
Apache Airflow 3.1.0 marks a new chapter in making data orchestration more inclusive, intelligent, and human-centered. We can’t wait to see what you build with it!
Original source Report a problem - Aug 29, 2025
- Parsed from source:Aug 29, 2025
- Detected by Releasebot:Nov 4, 2025
August 29, 2025
- Aug 20, 2025
- Parsed from source:Aug 20, 2025
- Detected by Releasebot:Nov 4, 2025
August 20, 2025