What apache/airflow shipped
Written by FoxPlug from the repository's own releases; not affiliated with Apache Airflow. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/apache/airflow; Apache Airflow did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of October 5, 2026
What shipped
- An internal database-level concept of dynamic regions was introduced for task instances, letting the system tell a loop iteration apart from an iteration that was cleared and re-run with different task instances. Pull request #74275
- Loop definitions are now pinned and region coordinates are carried through task execution, so a task in a loop or mapped region is identified by its region instead of being confused with a plain mapped expansion. Pull request #74345
- User-facing documentation for the new Task Loops feature was added, explaining a new way for DAG authors to think about repeating work. Pull request #74274
- The scheduler no longer crashes when a queued run's DAG fails to deserialize; it logs and skips that run instead. Pull request #74499
- The KubernetesExecutor no longer leaves tasks with an invalid
executor_configstuck in queued until the scheduler times them out. Pull request #74512 - Clearing a DAG run or task instance with a queued-at deadline interval stored as JSON no longer raises a TypeError and an HTTP 500. Pull request #70370
- Airflow processes no longer load the task runner on every startup, since
mask_secretno longer imports the task runner module just to check an environment variable. Pull request #74496 - Airflow standalone now discovers new DAG files within seconds instead of taking up to five minutes. Pull request #74479
- The TypeScript SDK gained human-in-the-loop tasks with approval and humanInput, which wait in
awaiting_inputwithout holding a worker. Pull request #74484 - Cyclic TaskGroup dependencies are deprecated: they keep working, but users are warned that planned TaskGroup features need an unambiguous order between groups. Pull request #73746
Why it matters
This week the ground work for Task Loops landed across storage, execution and documentation, changing how a task instance is identified so loop passes and mapped expansions can no longer be confused with each other. Several fixes also target scheduler stability and compatibility, including skipping runs whose DAG cannot be deserialized instead of crashing, and not leaving invalid executor_config tasks stuck in queued. E2E coverage also grew for DAGs written in TypeScript, Java and Go, alongside new human-in-the-loop support in the TypeScript SDK.
Changelog entry
- Add the internal database-level concept of dynamic regions for task instances. Pull request #74275
- Pin loop definitions and carry region coordinates through task execution. Pull request #74345
- Add user-facing documentation for the new Task Loops feature. Pull request #74274
- Deprecate cyclic TaskGroup dependencies with a warning while they keep working. Pull request #73746
- Keep the scheduler running when a queued run's DAG fails to deserialize. Pull request #74499
- Fix KubernetesExecutor leaving invalid-config tasks stuck in queued. Pull request #74512
- Fix TypeError when clearing a DAG run with a queued-at deadline interval stored as JSON. Pull request #70370
- Stop loading the task runner on every Airflow process startup. Pull request #74496
- Make airflow standalone discover new DAG files within seconds. Pull request #74479
- Add human-in-the-loop tasks to native TypeScript DAGs. Pull request #74484
- Use the configured API port in the default execution API URL. Pull request #74478
- Let SandboxToolset be deep-copied again. Pull request #74525
Task Loops groundwork landed: task instances now carry region coordinates, docs for the new Task Loops feature are up, and cyclic TaskGroup dependencies are deprecated. Also: the scheduler skips DAGs it cannot deserialize instead of crashing. Fixes for KubernetesExecutor, deadlin
This week in Apache Airflow: the ground work for Task Loops landed, introducing the internal concept of dynamic regions for task instances and carrying region coordinates through task execution, with user-facing docs for the new feature. Cyclic TaskGroup dependencies are now deprecated so that each group has an unambiguous order. On the reliability side, the scheduler logs and skips a queued run whose DAG cannot be deserialized instead of crashing, and the KubernetesExecutor no longer leaves tasks with an invalid executor_config stuck in queued. Deadline intervals stored as JSON no longer break DAG run clearing. airflow standalone discovers new DAG files within seconds. E2E suites also gained native TypeScript, Java and Go DAG coverage, and the TypeScript SDK added human-in-the-loop tasks.
Week of September 28, 2026
What shipped
- Added airflowctl tasks state command to print the state of a single task instance, supporting run selection by run id or logical date with mapped task support. Pull request #71206
- Added API endpoint and UI Versions tab for comparing two stored DAG versions, reporting observed state differences between versions. Pull request #73322
- Go SDK now supports dag.If with Then and Else branches, enabling native DAGs to perform conditional branching based on function results. Pull request #74075
- Go SDK tasks can now be ordered with Before, After, and Label methods to express task dependencies without data edges. Pull request #74119
- Fixed OpenSearch remote log truncation by implementing continuous sliding-window pagination instead of single-page reads, handling task instances with over 1000 log lines. Pull request #73947
- SparkSubmitHook._mask_cmd() now masks secrets in linear time by replacing a pathological regex with a single-pass scanner, preventing worker stalls on long log lines. Pull request #71711
- Fixed Cloud SQL 409 operationInProgress errors during import/export operations by implementing polling with exponential backoff. Pull request #68361
- Executor providers now carry task attempt UUIDs through dispatch and result handling in Celery, Kubernetes, ECS, Batch and Lambda. Pull request #74021
- Added configurable request timeout for Airbyte API to handle the provider's move to httpx with its 5-second default timeout. Pull request #71092
- Tasks skipped by DAG run timeout now have
end_dateand duration set, preventing elapsed time from growing after task completion. Pull request #74128
Why it matters
This week adds significant functionality for DAG development and execution. The Go SDK gains conditional branching and task ordering capabilities, while the airflowctl command line interface expands to support task state queries. Multiple fixes address production issues with log handling, task retries, and async operations.
Changelog entry
- Airflowctl: Add tasks state command to print task instance state by run id or logical date Pull request #71206
- Go SDK: Add dag.If with Then and Else for conditional task branching Pull request #74075
- Go SDK: Add Before, After and Label for task ordering without data edges Pull request #74119
- OpenSearch: Fix remote log truncation with sliding-window pagination for logs exceeding 1000 lines Pull request #73947
- SparkSubmitHook: Improve _mask_cmd performance from regex backtracking to linear-time scanning Pull request #71711
- GCP: Add exponential backoff retry for Cloud SQL 409 operationInProgress errors Pull request #68361
- Executors: Carry task attempt UUIDs through Celery, Kubernetes, ECS, Batch and Lambda providers Pull request #74021
- Airbyte: Add configurable request timeout for httpx client Pull request #71092
- Scheduler: Set
end_dateand duration on tasks skipped by DAG run timeout Pull request #74128 - AWS: Bind SAML authentication response to browser that started login Pull request #73698
- OpenLineage: Skip creating empty hook lineage collector for events Pull request #74190
Week 40: airflowctl tasks state command, Go SDK branching and ordering, DAG version comparison UI, OpenSearch log pagination fix, and numerous async/executor improvements.
Apache Airflow week 40 ships: airflowctl tasks state command for task state queries, Go SDK conditional branching with dag.If and task ordering with Before/After/Label, DAG version comparison endpoint and UI tab, OpenSearch log pagination fix for large task logs, SparkSubmitHook performance improvement, Cloud SQL retry handling, and improvements to async hooks and executor providers.
Week of September 21, 2026
What shipped
- Bulk pause, drain and unpause actions added to the Dags list UI, allowing operators to schedule multiple DAGs at once instead of one by one. Pull request #73055
- Event logs API optimized to load only display names instead of all columns from joined tables, reducing query overhead. Pull request #73021
- Dag source API now eager-loads DagCode in a single query instead of issuing separate queries for the source and its language. Pull request #73752
- Task attempt UUIDs and try numbers are now kept aligned when retrying or clearing, fixing database inconsistencies. Pull request #73554
- New dedicated InfluxDB 3 sensor added to the InfluxDB provider. Pull request #73522
- Zip Dag discovery performance improved and member file names now preserved during safe mode processing. Pull request #73727
- EksHook token extraction replaced bash parameter expansion with POSIX-compliant tail for broader shell compatibility. Pull request #73690
- Keycloak middleware no longer reissues a JWT that was revoked during the request lifecycle. Pull request #73695
- FTPHook and FTPSHook now properly honor string passive mode extras, allowing active mode selection when 'false' is passed. Pull request #73694
- README quickstart and version table updated to reflect Airflow 3.3.2 release. Pull request #73770
Why it matters
This week includes UI improvements for bulk DAG operations, query optimizations for the REST API, fixes to connection handling across multiple providers, and better alignment of task metadata during retries. Operators managing multiple DAGs benefit from bulk actions, API users see faster responses, and task state tracking becomes more reliable.
Changelog entry
- UI: Added bulk pause, drain, and unpause actions to the DAGs list table Pull request #73055
- API: Event logs endpoints now load only required display name columns Pull request #73021
- API: DAG source endpoint eager-loads DagCode in a single query Pull request #73752
- Core: Task attempt UUIDs and try numbers now allocated together on retry Pull request #73554
- Providers: Added dedicated InfluxDB 3 sensor Pull request #73522
- Core: Improved zip DAG discovery performance and member file name preservation Pull request #73727
- Providers: EksHook now uses POSIX-compliant shell syntax for token extraction Pull request #73690
- Security: Keycloak middleware no longer reissues revoked JWTs Pull request #73695
- Providers: FTPHook and FTPSHook now properly handle string passive mode values Pull request #73694
- Docs: Updated README to reflect Airflow 3.3.2 release Pull request #73770
- Testing: Added unit tests for Google Cloud Tasks links Pull request #72846
- Helm: Added deprecation warnings for Kerberos init container settings in Chart 1.2x Pull request #73390
This week: bulk pause/drain/unpause for DAGs, optimized event logs API, aligned task UUIDs on retry, InfluxDB 3 sensor, and FTP passive mode fixes.
Apache Airflow updates this week focus on operational efficiency and data consistency. Operators can now bulk pause, drain, or unpause DAGs from the UI. The event logs API is faster with optimized queries. Task retries now maintain proper UUID and try number alignment. Plus, FTPHook passive mode and EksHook shell compatibility improvements.