NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1072 most downloaded on PyPI
Programmatically author, schedule and monitor data pipelines
Last release 3 days ago
17 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
4 versions withdrawn
withdrawn after publishing
9 years old
300 releases · first in 2017
Nothing published for this version
Fix masking of non-sensitive environment variables
swagger-ui-dist via npm package (#28788)UIAlert should_show when AUTH_ROLE_PUBLIC set (#28781)external_task_ids of ExternalTaskSensor (#28692)DetachedInstanceError when finding zombies in Dag Parsing process (#28198)divs to fix dagid copy nit on dag.html (#28643)setNote endpoints under TaskInstance in OpenAPI (#28566)CronTriggerTimetable (#28532)ensure_ascii=False in trigger dag run API (#28451)ti._try_number for deferred and up_for_reschedule tasks (#26993)callModal from dag.js (#28410)monkeypatching via environment variable (#28283)LazyXComAccess (#28191)@dag decorator are reported in dag file (#28153)dagbag_size metric decreases when files are deleted (#28135)airflow.api.auth.backend.session to backend sessions in compose (#28094)next_dagruns_to_examine, add MySQL index hint (#27821)dnspython after eventlet got fixed (#29004)dnspython to < 2.3.0 until eventlet incompatibility is solved (#28962)SQLAlchemy to below 2.0 (#28725)json5 from 1.0.1 to 1.0.2 in /airflow/www (#28715)Enums (#28627)Connection.get_extra type (#28594)conf.get* from the right source location (#28543)purge_inactive_dag_warnings (#28481)test_task_command to Pytest and unquarantine tests in it (#28247)0.2.0 to 0.2.2 in /airflow/www (#28080)subgraph logic (#27987)map_index (#27904)LocalTaskJob (#27381)One column per quarter.
Nothing published for this version
Nothing published for this version
Deprecate use of core get_kube_client in PodManager
TaskRunner: notify of component start and finish (#27855)AirflowModelViews(Variables/Connection) (#24079, #27994, #27923)Is /not Null filter for value is None on webui (#26584)one_done trigger rule (#26146)TI.xcom_pull() with explicit task_ids and map_indexes (#27699)urlsplit (#27389)branch_task_ids into SkipMixin (#27434).first() to .scalar() (#27323)howtos about sensors (#27333)extra__conn_type__ prefix required for UI behaviors (#26995)crashloopbackoff when using hostname_callable (#24999)__future__.annotations automatically by isort (#26383)V1Pod in task callback (#27609)taskInstance errors and split into two tables (#26575)autoregistered DAGs if there are any import errors (#26398)from airflow import version lazy import (#26239)is_mapped attribute (#27881)airflow/callbacks/* airflow/cli/* (#27721)airflow/api_connexion/* directory (#27718)airflow/listener/* directory (#27731)airflow/lineage/* directory (#27732)airflow/api/* directory (#27716)minimatch from 3.0.4 to 3.0.8 in /airflow/www (#27688)1.4.1 to 1.4.2 in /airflow/www (#27697)BaseTrigger.run (#27416)2022.10.1 (#27383)memray files to gitignore / dockerignore (#27001)sphinx-autoapi (#26743)RTIF.delete_old_records() (#26667)pyupgrade edge cases (#26384)docker-compose.yaml (#26726)In order to make airflow dags test more useful as a testing and debugging tool, we no longer run a backfill job and instead run a "local task runner". Users can still backfill their DAGs using the airflow dags backfill command.
KubernetesPodOperator no longer considers any core kubernetes config params, so this section now only applies to kubernetes executor. Renaming it reduces potential for confusion.
ExternalTaskSensor no longer hangs indefinitely when failed_states is set, an execute_date_fn is used, and some but not all of the dependent tasks fail. Instead, an AirflowException is thrown as soon as any of the dependent tasks fail. Any code handling this failure in addition to timeouts should move to caching the AirflowException BaseClass and not only the AirflowSensorTimeout subclass.
The old option will continue to work but will issue deprecation warnings, and will be removed entirely in Airflow 3.
TaskRunner: notify of component start and finish (#27855)
Add DagRun state change to the Listener plugin system(#27113)
Metric for raw task return codes (#27155)
Add logic for XComArg to pull specific map indexes (#27771)
Clear TaskGroup (#26658, #28003)
Add critical section query duration metric (#27700)
Add: #23880 :: Audit log for AirflowModelViews(Variables/Connection) (#24079, #27994, #27923)
Add postgres 15 support (#27444)
Expand tasks in mapped group at run time (#27491)
reset commits, clean submodules (#27560)
scheduler_job, add metric for scheduler loop timer (#27605)
Allow datasets to be used in taskflow (#27540)
Add expanded_ti_count to ti context (#27680)
Add user comment to task instance and dag run (#26457, #27849, #27867)
Enable copying DagRun JSON to clipboard (#27639)
Implement extra controls for SLAs (#27557)
add dag parsed time in DAG view (#27573)
Add max_wait for exponential_backoff in BaseSensor (#27597)
Expand tasks in mapped group at parse time (#27158)
Add disable retry flag on backfill (#23829)
Adding sensor decorator (#22562)
Api endpoint update ti (#26165)
Filtering datasets by recent update events (#26942)
Support Is /not Null filter for value is None on webui (#26584)
Add search to datasets list (#26893)
Split out and handle 'params' in mapped operator (#26100)
Add authoring API for TaskGroup mapping (#26844)
Add one_done trigger rule (#26146)
Create a more efficient airflow dag test command that also has better local logging (#26400)
Support add/remove permissions to roles commands (#26338)
Auto tail file logs in Web UI (#26169)
Add triggerer info to task instance in API (#26249)
Flag to deserialize value on custom XCom backend (#26343)
Allow depth-first execution (#27827)
UI: Update offset height if data changes (#27865)
Improve TriggerRuleDep typing and readability (#27810)
Make views requiring session, keyword only args (#27790)
Optimize TI.xcom_pull() with explicit task_ids and map_indexes (#27699)
Allow hyphens in pod id used by k8s executor (#27737)
optimise task instances filtering (#27102)
Use context managers to simplify log serve management (#27756)
Fix formatting leftovers (#27750)
Improve task deadlock messaging (#27734)
Improve "sensor timeout" messaging (#27733)
Replace urlparse with urlsplit (#27389)
Align TaskGroup semantics to AbstractOperator (#27723)
Add new files to parsing queue on every loop of dag processing (#27060)
Make Kubernetes Executor & Scheduler resilient to error during PMH execution (#27611)
Separate dataset deps into individual graphs (#27356)
Use log.exception where more economical than log.error (#27517)
Move validation branch_task_ids into SkipMixin (#27434)
Coerce LazyXComAccess to list when pushed to XCom (#27251)
Update cluster-policies.rst docs (#27362)
Add warning if connection type already registered within the provider (#27520)
Activate debug logging in commands with --verbose option (#27447)
Add classic examples for Python Operators (#27403)
change .first() to .scalar() (#27323)
Improve reset_dag_run description (#26755)
Add examples and howtos about sensors (#27333)
Make grid view widths adjustable (#27273)
Sorting plugins custom menu links by category before name (#27152)
Simplify DagRun.verify_integrity (#26894)
Add mapped task group info to serialization (#27027)
Correct the JSON style used for Run config in Grid View (#27119)
No extra__conn_type__ prefix required for UI behaviors (#26995)
Improve dataset update blurb (#26878)
Rename kubernetes config section to kubernetes_executor (#26873)
decode params for dataset searches (#26941)
Get rid of the DAGRun details page & rely completely on Grid (#26837)
Fix scheduler crashloopbackoff when using hostname_callable (#24999)
Reduce log verbosity in KubernetesExecutor. (#26582)
Don't iterate tis list twice for no reason (#26740)
Clearer code for PodGenerator.deserialize_model_file (#26641)
Don't import kubernetes unless you have a V1Pod (#26496)
Add updated_at column to DagRun and Ti tables (#26252)
Move the deserialization of custom XCom Backend to 2.4.0 (#26392)
Avoid calculating all elements when one item is needed (#26377)
Add __future__.annotations automatically by isort (#26383)
Handle list when serializing expand_kwargs (#26369)
Apply PEP-563 (Postponed Evaluation of Annotations) to core airflow (#26290)
Add more weekday operator and sensor examples #26071 (#26098)
Align TaskGroup semantics to AbstractOperator (#27723)
Gracefully handle whole config sections being renamed (#28008)
Add allow list for imports during deserialization (#27887)
Soft delete datasets that are no longer referenced in DAG schedules or task outlets (#27828)
Redirect to home view when there are no valid tags in the URL (#25715)
Refresh next run datasets info in dags view (#27839)
Make MappedTaskGroup depend on its expand inputs (#27876)
Make DagRun state updates for paused DAGs faster (#27725)
Don't explicitly set include_examples to False on task run command (#27813)
Fix menu border color (#27789)
Fix backfill queued task getting reset to scheduled state. (#23720)
Fix clearing child dag mapped tasks from parent dag (#27501)
Handle json encoding of V1Pod in task callback (#27609)
Fix ExternalTaskSensor can't check zipped dag (#27056)
Avoid re-fetching DAG run in TriggerDagRunOperator (#27635)
Continue on exception when retrieving metadata (#27665)
External task sensor fail fix (#27190)
Add the default None when pop actions (#27537)
Display parameter values from serialized dag in trigger dag view. (#27482, #27944)
Move TriggerDagRun conf check to execute (#27035)
Resolve trigger assignment race condition (#27072)
Update google_analytics.html (#27226)
Fix some bug in web ui dags list page (auto-refresh & jump search null state) (#27141)
Fixed broken URL for docker-compose.yaml (#26721)
Fix xcom arg.py .zip bug (#26636)
Fix 404 taskInstance errors and split into two tables (#26575)
Fix browser warning of improper thread usage (#26551)
template rendering issue fix (#26390)
Clear autoregistered DAGs if there are any import errors (#26398)
Fix from airflow import version lazy import (#26239)
allow scroll in triggered dag runs modal (#27965)
Remove is_mapped attribute (#27881)
Simplify FAB table resetting (#27869)
Fix old-style typing in Base Sensor (#27871)
Switch (back) to late imports (#27730)
Completed D400 for multiple folders (#27748)
simplify notes accordion test (#27757)
completed D400 for airflow/callbacks/* airflow/cli/* (#27721)
Completed D400 for airflow/api_connexion/* directory (#27718)
Completed D400 for airflow/listener/* directory (#27731)
Completed D400 for airflow/lineage/* directory (#27732)
Update API & Python Client versions (#27642)
Completed D400 & D401 for airflow/api/* directory (#27716)
Completed D400 for multiple folders (#27722)
Bump minimatch from 3.0.4 to 3.0.8 in /airflow/www (#27688)
Bump loader-utils from 1.4.1 to 1.4.2 ``in ``/airflow/www (#27697)
Disable nested task mapping for now (#27681)
bump alembic minimum version (#27629)
remove unused code.html (#27585)
Enable python string normalization everywhere (#27588)
Upgrade dependencies in order to avoid backtracking (#27531)
Strengthen a bit and clarify importance of triaging issues (#27262)
Deduplicate type hints (#27508)
Add stub 'yield' to BaseTrigger.run (#27416)
Remove upper-bound limit to dask (#27415)
Limit Dask to under 2022.10.1 (#27383)
Update old style typing (#26872)
Enable string normalization for docs (#27269)
Slightly faster up/downgrade tests (#26939)
Deprecate use of core get_kube_client in PodManager (#26848)
Add memray files to gitignore / dockerignore (#27001)
Bump sphinx and sphinx-autoapi (#26743)
Simplify RTIF.delete_old_records() (#26667)
migrate last react files to typescript (#26112)
Work around pyupgrade edge cases (#26384)
Document dag_file_processor_timeouts metric as deprecated (#27067)
Drop support for PostgreSQL 10 (#27594)
Update index.rst (#27529)
Add note about pushing the lazy XCom proxy to XCom (#27250)
Fix BaseOperator link (#27441)
[docs] best-practices add use variable with template example. (#27316)
docs for custom view using plugin (#27244)
Update graph view and grid view on overview page (#26909)
Documentation fixes (#26819)
make consistency on markup title string level (#26696)
Add documentation to dag test function (#26713)
Fix broken URL for docker-compose.yaml (#26726)
Add a note against use of top level code in timetable (#26649)
Fix example_datasets dag names (#26495)
Update docs: zip-like effect is now possible in task mapping (#26435)
changing to task decorator in docs from classic operator use (#25711)
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix double logging with some task logging handler
SLAMiss is nullable and not always given back when pulling task instances (#27423)_ when searching for DAGs (#27448)dag/task ids from BaseExecutor (#27550)RotatingFilehandler used in DagProcessor non-caching (#27223)executor.job_id to BackfillJob.id for backfills (#27020)1.4.0 to 1.4.1 in /airflow/www (#27552)TCP_KEEPALIVE etc warnings (#26981)KubernetesExecutor overwrites container args (#27450)BaseOperator links (#27441)Dag Run start. (#27111)kerberos environment variables to the docs (#27028)Nothing published for this version
Add missing AUTOINC/SERIAL for FAB tables
airflow dags reserialize (#27030)state_color_mapping jinja global (#26822)airflow tasks test (#26806)sphinx and sphinx-autoapi (#26743)RTIF.delete_old_records() (#26667)4.1.4 (#26393)docker-compose.yaml (#26726)Nothing published for this version
Resolve deprecation warning re Table.exists()
Table.exists() (#26616)templates_dict to task decorator (#26390)scheduled during backfill (#26205)json_provider_class on Flask app so it uses our encoder (#26554)cacheable (#26498)base_template (#26439)non-sensitive-only option for expose_config (#26507)example_datasets dag names (#26495)Nothing published for this version
Remove remaining deprecated classes and replace them with PEP562
@task.short_circuit TaskFlow decorator (#25752)execution_date_or_run_id optional in tasks test command (#26114)DagProcessors parsing files from different locations. (#25935)ExternalPythonOperator (#25780)dags test (#26111)expand_kwargs() against a literal list (#25925)output property to MappedOperator (#25604)TaskGroup in ExternalTaskSensor (#24902)@task.kubernetes taskflow decorator (#25663)schedule param (#25410)CronTriggerTimetable (#23662)XComArg.zip(*xcom_args) (#25176)sla_miss metric (#23402)map() semantic (#25085)expand_kwargs() (#24989)DagWarning model, and a check for missing pools (#23317)ExternalTaskMarker operator (#23964)SlaCallbackRequest if the DAG is scheduled (#26089)Operator.output more (#25617)hacky double-rendering prevention in mapped task (#25924)DAG(schedule=...) improvements (#25648)operator_name dupe in serialized JSON (#25819)task_group_to_grid (#25654)CronTriggerTimetable (#25503)/grid endpoint (#25481)@task.branch decorator (#25242)audit_log route (#25415)getTasks from Grid view (#25359)@dag arguments (#25044)SchedulerJob and TaskInstance (#24912)getfqdn with more resilient version (#24981)NBSP characters by whitespaces (#24797)airflow db upgrade (#24518)expand() error vague so it's not misleading (#24018)[webserver]analytics_tool (#24032)dttm searchable field in audit log (#23794)execute_in_subprocess (#23286)func.count to count rows (#23657)sql_alchemy_conn for celery result backend when result_backend is not set (#24496)AirflowDagCycleException message (#26204)TaskInstance.task not defined before handle_failure (#26040)DAGs and Datasets menu links based on role permission (#26183)TaskGroup tooltip via function docstring (#26028)DagRun.start_date not set during backfill with --reset-dagruns True (#26135)mapped_task is SKIPPED (#25995)TaskInstance related endpoints to avoid API errors (#26076)BranchDateTimeOperator to be timezone-awreness-insensitive (#25944)list-mapped-task-instance (#25965)iter_mapped_dependants (#25793)/ in variable get endpoint (#25774)XComArg fails to resolve (#25661)json arg help in airflow variables set command (#25726)ti_state on find_zombies query (#25725)axios errors (#25703)dag_owner_attributes table (#25579)expand_kwargs() input type before unmapping (#25355)ExternalTaskSensor not working with dynamic task (#25215)MappedOperator members in sync with BaseOperator (#24034)ERD schema for the MetaData DB (#26217)PEP562 (#26167)dag_edges and task_group_to_dict to corresponding util modules (#26212)ORM after forking to run a DAG processor (#26216)PEP-562 getattr (#26153)BaseSerialization.serialize "public" to other classes. (#26142)moment-timezone from 0.5.34 to 0.5.35 in /airflow/www (#26080)CamelCase to generated operations types (#25887)SkipMixin (#25864)undici from 5.8.0 to 5.9.1 in /airflow/www (#25801)_BranchPythonDecoratedOperator (#25783)filename_template deprecation message (#25749)ParamSpec to replace ... in Callable (#25658)elasticsearch test config to avoid warning on deprecated template (#25520)terser from 4.8.0 to 4.8.1 in /airflow/ui (#25178)typescript types from rest API docs (#25123)typescript (#25089)typescript. (#25096)ts (#25267)ts. (#25074)ti if it returns None (#25047)js file structure (#25003)moment from 2.29.3 to 2.29.4 in /airflow/www (#24885)xcom_push flag from BashOperator (#24824)typescript (#24715)charts.css to chart.css (#24531)grid.css to chart.css (#24529)set_new_process_group utility (#24371)moto version (#24222)[github_enterprise] from ref docs (#24033)f-strings in logging calls (#23597)JPype1 (#23847)Celery Flower (#25986)MySQL Charset problems (#25938)Trigger Rules (#25840)task_instance_mutation_hook usage (#25607)task-generated mapping example (#23424)2.2.0 (#24413)Nothing published for this version
Nothing published for this version
Disable attrs state management on MappedOperator
attrs state management on MappedOperator (#24772)pod_override to JSON before pickling executor_config (#24356)pid check (#24636)airflow db reset when dangling tables exist (#25441)disable_verify_ssl behaviour (#25023)task_instance.state in critical section query (#25673)TaskCallbackRequest (#25471)__repr__ to ParamsDict class (#25305)TimeSensorAsync target_time to utc on call time (#25221)updateNodeLabels after expandGroup (#25217)DagProcessorManager queue (#25147)invalidateQueries call (#25097)airflow/www/package.json: Add name, version fields. (#25065)IPv6 address (#24755) (#24846)%z for %(asctime)s to fix timezone for logs on UI (#24811)TriggerDagRunOperator.operator_extra_links is attr (#24676)prohibit_commit (#24366)external_executor_id in sql_engine_collation_for_ids docs (#25197)DR.task_instance_scheduling_decisions (#24774)resolve_xcom_backend function level documentation (#24965)Nothing published for this version
Fix deprecated log_id_template value
sensorinstance (#24638)ti.task.dag assignment back inside try/except block (#24533) (#24592)FSHook (#24470)stdout for airflow tasks test (#24362)DebugExecutor use ti.run() instead of ti._run_raw_task (#24357)URI constructor for MySQL connection (#24320)scheduleinterval nullable true added in openapi (#24253)return_code interface for task runner (#24093)op_kwargs (#23860)ExternalTaskSensor respects soft_fail if the external task enters a failed_state (#23647)StatD timing metric units (#21106)cache_ok flag to sqlalchemy TypeDecorators. (#24499)LOGGING_LEVEL=DEBUG (#23360)grid_data endpoint by 10x (#24284)TI.log_url fix for map_index (#24335)0080_2_0_2 - Replace null values before setting column not null (#24585)sql_alchemy_conn if old Postgres schemes used (#24569)log_template table (#24511)log_id_template value (#24506)task_instance (#24488)run_id for grid group summaries (#24327)get_hostname instead of socket.getfqdn (#24260)useTasks crash on error (#24152)use_task_execution_date with use_task_logical_date (#23983)REMOVED to finished states and success states (#23797)dbapi.get_pandas_df (#23452)schedule_interval match timetable (#23113)jsx files that affect run/task selection to tsx (#24509)Content-Type and chartset on grid_data endpoint (#24375)[core] parallelism config setting (#23768)extras and format Airflow Vars / Conns (#24735)get_current_context() chapter (#24482)log_id_template (#24455)MSSQL less than v2017 in code (#24095)3.6 compatibility objects/modules (#24048)api_connexion (#24050)4.1.2 (#24619)markdown-it-py (#19702)rich to latest version across the board. (#24186)TimedJSONWebSignatureSerializer (#24519)authlib/ oauth dependency (#24516)webpack 5 (#24485)typescript (#24337)nbf and aud claims for
maturity and audience of the requests. Also "filename" payload field is used to keep log name. (#24519)yarn test warnings (#24722)DagRun.verify_integrity (#24114)4.1.1 (#24399)Flask-WTF 0.15 (#24621)Nothing published for this version
Nothing published for this version
Nothing published for this version
Run the check_migration loop at least once
check_migration loop at least onceis_mapped field to Task response. (#23319)dag_tag to dag foreign key (#23444)--subdir argument value for standalone dag processor. (#23864)dag-processor command (#23886)__wrapped__ property to _TaskDecorator (#23830)sql is empty list in DbApiHook (#23816)_airflow_moved tables (#23635)Nothing published for this version
Nothing published for this version
Fix retrieval of deprecated non-config values
CeleryExecutor (#23690)dag-processor fetch metadata database config (#23575)reschedule to the serialized fields for the BaseSensorOperator (#23674)execution_timeout as timedelta (#23655)send_callback method for CeleryKubernetesExecutor and LocalKubernetesExecutor (#23617)PythonVirtualenvOperator templated_fields (#23559)root_dag_id too (#23536)KubernetesJobWatcher getting stuck on resource too old (#23521)moved table exists (#23491)core__sql_alchemy_conn__cmd (#23441)airflow dags show for mapped operator (#23339)ti.mark_success_url (#23330)<Time /> in Mapped Instance table (#23313)dag_processing.processor_timeouts to counters section (#23393)expand() and partial() (#23373)Nothing published for this version
fix all "high" npm vulnerabilities
requirements.txt in Python Operators (#17349)SmoothOperator (#22813)execution_timeout configurable (#22389)ti_deps rules (#22698)dag-processor cli command (#22305)ignore_first_depends_on_past for scheduled jobs (#22491)list-import-errors to airflow dags command (#22084)standalone_dag_processor config is True. (#21731)celery.task_timeout_error metric (#21602)db downgrade cli command (#21596)ALL_SKIPPED trigger rule (#21662)db clean CLI command for purging old data (#20838)celery_logging_level (#21506)ShortCircuitOperator configurability for respecting downstream trigger rules (#20044)dag_id_pattern parameter to the /dags endpoint (#18924)--skip-init to db reset command (#22989).airflowignore files (#21392) (#22051)has_access decorator by ~200ms (#22858)try_number in airflow vars (#22297)airflow dags list CLI command (#21991)is_zipfiles in refresh_dag (#21926)airflow dag subcommands (#21793)py DAG files are zipped during parsing (#21538)run_id (#20975)get_connection() (#21162)worker_enable_remote_control for celery (#21507)CgroupTaskRunner (#21481)SchedulerJob (#21181)airflow by 6x (#21438)template_fields (#21054)ShortCircuitOperator push XCom by returning python_callable result (#20071)Connection.get_hook parameter to make it the same as in SqlSensor and SqlOperator. (#19849)XCOM value in PythonOperator (#19378)hook_params in BaseSqlOperator (#18718)taskinstance REST API schema to include dag_run_id field (#19105)extra to be nullable in connection payload as per schema(REST API). (#23183)dag_id extraction for dag level access checks in web ui (#23015)CLI command (#22688)db reset (#22990)external_task_ids. (#22809)DagParam to hold falsy values (#22964)get_logs_with_metadata endpoint. (#22898)PoolSlotsAvailableDep statues (#22807)email_on_failure with render_template_as_native_obj (#22770)DagFileProcessorManager (#22685)ScheduleInterval spec (#22635)is_smart_sensor_compatible() (#22386)run_id k8s and elasticsearch compatibility with Airflow 2.1 (#22385)except_skip None on BranchPythonOperator (#20411)RefreshConfiguration workaround for K8s token refreshing (#20759)/connections/<connection> endpoint (#22227)queued_dttm when submitting task to directly to executor (#22259)bulk_write_to_db (#21757)request.referrer from views.py (#21751)DbApiHook use get_uri from Connection (#21764)dag_id, task_id etc to XCom.serialize_value (#19505)on_task_instance_running listener can get at task (#21157)@task_group (#20870)airflow trigger cli (#20781)@task_group as a whole (#20671)start_date if a task continues after deferral (#20062)execution_date label when get cleanup pods list (#20417)class_permission_name to mixin so it applies to all classes (#18749)catchup=False is used in example dags (#19396)towncrier now (#22003)rbac = True from docs (#22725)sql_alchemy_connect_args (#22045)db upgrade / db downgrade (#21879)postgres:// with postgresql:// (#21205)CeleryExecutor docs (#20783)DummyOperator with EmptyOperator (#22974)DummyOperator in favor of EmptyOperator (#22832)moment from 2.29.1 to 2.29.2 in /airflow/www (#22873)prismjs from 1.26.0 to 1.27.0 in /airflow/www (#22823)nanoid from 3.1.23 to 3.3.2 in /airflow/www (#22803)minimist from 1.2.5 to 1.2.6 in /airflow/www (#22798)Airflow.Base.metadata in FAB models (#22353)sql_alchemy_conn if old postgres scheme used (#22333)xcom.dagrun_id to xcom.dag_run_id (#21806)conn.extra (#21816)jsonschema to 5.0 (#21712)days_ago (#21653):type lines now sphinx-autoapi supports type hints (#20951)DagRun.run_id instead of execution_date when updating state of TIs (UI & REST API) (#18724)PodLauncher to PodManager (#20576)get_readable_dags and get_editable_dags, and get_accessible_dags. (#19961)__var and __type members (#19303)max_tis_per_query initialisation on SchedulerJob (#19020)init_role() from API (#18820)Nothing published for this version
Nothing published for this version
Nothing published for this version
Check and disallow a relative path for sqlite
--capacity parameter (#21753)order_by(TaskInstance.execution_date) (#21705)default_pool delete on web ui (#21658)typing-extensions to be installed with python 3.8+ #21566 (#21567)__eq__ check (#21442)max_active_runs=1 not scheduling runs when min_file_process_interval is high (#21413)ExternalTaskSensorLink to handle templated external_dag_id (#21192)clear_task_instances sets valid run state (#21116)X-Frame-Options header to DENY only if X_FRAME_ENABLED is set to true. (#19491)on_execute_callback to callbacks docs (#22362)to_delete to to_cancel in TriggerRunner (#20658)3.4.5 (#22596)Nothing published for this version
Nothing published for this version
Nothing published for this version
Deprecate some functions in the experimental API
dag_id index for job table (#20282)Dag.get_task_instances() (#20591)/rendered-k8s view (#21006)airflow dags backfill --reset-dagruns errors when run twice (#21062)TaskInstance.max_tries in refresh_from_task (#21018)airflow dags test <dag_id> <execution_dt> results in error when run twice (#21031)>=3.3.4 (#20628)5.2.3 (#19703)<1.1 to <1.2 (#20489)DAG.following_schedule() for TaskInstance.get_template_context() (#20486)multiple_outputs inference of dict typing (#19608)params keyword (#20640)Params (#20567)default_args usage in docs (#19803)@task (#18868)start_date values from docs (#19607)Nothing published for this version
Context class handles deprecation
snowflake-sqlalchemy v1.2.5 (#20245)importlib.resources API (#19091)DagProcessorAgent (#19935)httpx to <0.20.0 (#20218)alembic version (#20153)MarkupSafe (#20113)DagRun state is valid on assignment (#19898)KubernetesExecutor should default to template image if used (#19484)None state (#19487)DagFileProcessor.manage_slas (#19553)KubernetesExecutor pods (#19904)base_log_folder require updating other configs (#19793)KubernetesExecutor pod template docs (#19686)execution_date -> run_id (#19593).output operator property information in TaskFlow tutorial doc (#19214)@task (#18868)pod_template_file examples (#19691)Nothing published for this version
Nothing published for this version
Fix bug when checking for existence of a Variable
relativedelta is passed as schedule_interval (#19418)Params with set data type (#19267)None before calling .is_alive() (#19380)sqlite_default Connection has been hard-coded to /tmp, use gettempdir instead (#19255)schedule_interval (#19173)execution_date to check for existing DagRun for TriggerDagRunOperator (#18968)PoolSlotsAvailableDep (#18875)WTForms<3.0 (#19466)catchup=True (#19528)Nothing published for this version
Nothing published for this version
Fix Unexpected commit error in schedulerjob
Swagger2Specification._set_defaults classmethod (#19065)None (#19112)catchup=False behaviour (#19130, #19145)max_active_runs (#18897)ds, ts, etc. back to use logical date (#19088)None (#19034)backfill command before loading DAGs if missing args (#18994)task_fail violating NOT NULL (#18979)SchedulerJob._process_executor_events (#18975)XCom.delete error in Airflow 2.2.0 (#18956)Nothing published for this version
Nothing published for this version
Add deprecation notice for SubDagOperator
cwd for BashOperator (#17751)RESTARTING state (#16681)insert_args for support transfer replace (#15825)default_args for TaskGroup (#16557)kinit options [-f|-F] and [-a|-A] (#17816)DaskExecutor using Dask Worker Resources (#16829, #18720)processor_poll_interval to scheduler_idle_sleep_time (#18704)dagrun_conf (#18655)TaskInstanceModelView (#18438)Variable.update method and improving detection of variable key collisions (#18159)TaskInstance and TaskReschedule PK from execution_date to run_id (#17719)TaskGroup support in BaseOperator.chain() (#17456)template_ext attribute to show it in UI (#17985)robots.txt and X-Robots-Tag header (#17946)BranchDayOfWeekOperator, DayOfWeekSensor (#17940)none_failed_or_skipped by none_failed_min_one_success trigger rule (#17683)[core] store_dag_code & use DB to get Dag Code (#16342)task_concurrency to max_active_tis_per_dag (#17708)execution_date with run_id in airflow tasks run command (#16666)worker_log_server_port option to the logging section (#17621)SubDagOperator (#17488)template_fields_renderers (#17321)airflow celery stop to accept the pid file. (#17278)airflow_local_settings (#17195)AirflowException str when BashOperator fails. (#17151)SQLite or SequentialExecutor (#17133)init_containers defined in pod_override (#17537)airflow db init/upgrade migrations and setup in parallel. (#17078)chain() and cross_downstream() to support XComArgs (#16732)serve-logs and LocalExecutor (#16644)test_cycle to check_cycle (#16617)LocalExecutor (#16623)DbApiHook instance attribute (#16521, #17423)dag.sub_dag with dag.partial_subset (#16179)AirflowSensorTimeout as immediate failure without retrying (#12058)action_clear view (#15980)[core] dag_concurrency) settings for easier understanding (#16267, #18730)SKIPPED should not be logged again as SUCCESS (#14822)start_date for cleared tasks (#18708)AirflowDateTimePickerWidget a required field (#18602)retry_exponential_backoff divide by zero error when retry delay is zero (#17003){{ task.x }} attributes from within templates (#18516)sys.path (#18384)dag_tag rows that are now unused (#8231)wait_for_downstream dep (#18338)run_finished_callback for Debug Executor (#17983)XCom.get_one return full, not abbreviated values (#18274)XCom.set (#18240)_check_for_stalled_adopted_tasks method (#18208)StandardTaskRunner (#17967)self._error_file (#15947)DateTimeSensor (#17959)traceback.html (#17942)DagRunState enum query for MySQLdb driver (#17886)utf8mb3_general_ci collation for MySQL (#17729)TaskInstance does not work #17535 (#17548)DAG.cli() (#17105)None comparison in model_list template (#16893)cached_property module (#16710)Decimal (#16383)dag_id and empty subdir (#16513)dag.fileloc when using the @dag decorator (#16384)airflow/www/views.py (#15940)reschedule state (#17305, #18806)dagbag_size documentation (#18824)search_path set up instructions (#17600)AIRFLOW_GID from Docker images (#18747)sla_miss_callback section to the documentation (#18305)closer.lua script for downloading sources (#18179)DAG.is_active read-only in API (#17667)XCom.clear for data lifecycle management (#17589)pod_template_file (#16861)Jed and TP (#16671)flask-ouathlib to flask-oauthlib in Upgrading docs (#16320)Elasticsearch (#16275)dag_concurrency (#16177)default_pool slots (#15997)KubernetesExecutor git-sync pod template file (#15904)render_template_as_native_obj (#16534)POST to PATCH (#16511)BranchPythonOperator (#18623)boto3 to <1.19 (#18389)airflow.security.kerberos module (#18258)range(len()) to enumerate (#18174)main builds (#18035)tenacity (#17593)numpy dependency (#17594)mysql-connector-python to latest version (#17596)pandas an optional core dependency (#17575)airflow/utils/db.py (#17090)click to 8.x (#16779)dag.clear method (#16086)DAG_ACTIONS constant (#16232)_get_all_non_dag_permissions method (#16317)docutils to <0.17 until breaking behaviour is fixed (#16133)TaskInstance.log_filepath attribute (#15217)airflow/www/app.py (#15956)plyvel to google provider extra (#15812)find_permission_view_menu for get_permission wrapper (#16377)fab_logging_level to WARNING (#18783)CeleryKubernetesExecutor (#18441)Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix deprecation error message rather than silencing it
DagRun execution order from queued to running not being properly followed (#18061)max_active_runs not allowing moving of queued dagruns to running (#17945)LocalTaskJob causing error (#18119)colorlog version (6.x is incompatible) (#18099)create_dagrun overwrite explicit run_id (#17728)_check_for_stalled_adopted_tasks method (#18208)DagRunState enum query for MySQLdb driver (#17886)connection-types provider meta-datacloser.lua script for downloading sources (#18179)Nothing published for this version
Nothing published for this version
Fix task retries when they receive sigkill and have retries and properly handle sigterm
sigkill and have retries and properly handle sigterm (#16301)default_impersonation config (#17229)kubernetes cleanup-pods which fails on invalid label key (#17298)TaskInstance does not show queued_by_job_id & external_executor_id (#17179)SecretsMasker is not configured (#17101)__init_subclass__ in subclasses of BaseOperator (#17027)priority_weight during parsing (#16765)deps` and task_group`` during DAG Serialization (#16734)AttributeError: datetime.timezone object has no attribute name (#16599)UserModelView controls. (#17431)secret_key mis-configured (#17410)execution_date in task_instance.refresh_from_db (#16809)LocalTaskJob during task exit (#16289)SQLAlchemy<1.4 constraint (#16630)dnspython (#16698)FlaskAppBuilder 3.3.2+ (#17208)LocalExecutor (#16623)DagFileProcessor and DagFileProcessorProcess out of scheduler_job.py (#16581)Nothing published for this version
Only allow the webserver to request from the worker log server
CeleryKubernetesExecutor (#16700)token (#16474)LocalTaskJob (#16852)Nothing published for this version
Fix normalize-url vulnerability
PyPI (#16594)dag_run.conf is a dict (#15057)only_active parameter to /dags endpoint (#14306)filebeat 7 (#14625)passphrase and private_key to default sensitive field names (#16392)airflow task run without --local/--raw for KubeExecutor (#16108)log.exception when there is no exception (#16047)/ (#16018)Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →