NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1892 most downloaded on PyPI
Provider package apache-airflow-providers-fab for Apache Airflow
Last release 5 days ago
29 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 53 of 54 stable releases
2 versions withdrawn
withdrawn after publishing
3 years old
127 releases · first in 2023
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)One column per month.
Release Date: 2025-08-11
Create HITL specific permission for core-API (#54043)
fix: Add FAB configs for cookie security (#53542)
Fig 'Config' menu item missing in 'FabAuthManager' (#53944)
Bump the fab-ui-package-updates group across 1 directory with 3 updates (#53941)
Add UI for human in the loop operators (#53035)
Bump the fab-ui-package-updates group across 1 directory with 4 updates (#53503)
Create HITL specific permission for core-API (#54043)
fix: Add FAB configs for cookie security (#53542)
Fig 'Config' menu item missing in 'FabAuthManager' (#53944)
Bump the fab-ui-package-updates group across 1 directory with 3 updates (#53941)
Add UI for human in the loop operators (#53035)
Bump the fab-ui-package-updates group across 1 directory with 4 updates (#53503)
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)Release Date: 2025-08-02
Remove 'MENU' from 'ResourceMethod' in auth manager (#52731)
Fix FAB provider in unreachable code (#53436)
Add Python 3.13 support for Airflow. (#46891)
Cleanup mypy ignore for fab provider in init_jinja_globals (#53328)
Remove type ignore across codebase after mypy upgrade (#53243)
Remove upper-binding for "python-requires" (#52980)
Remove unused batch methods from auth manager (#52883)
Temporarily switch to use >=,< pattern instead of '~=' (#52967)
Bump the fab-ui-package-updates group across 1 directory with 7 updates (#52807)
Remove extra slash from endpoint URL (#53755)
Fix spelling of GitHub brand name (#53735)
Clarify FAB auth provider versioning and webserver_config.py deprecation for Airflow 3.x (#53606)
Remove 'MENU' from 'ResourceMethod' in auth manager (#52731)
Fix FAB provider in unreachable code (#53436)
Add Python 3.13 support for Airflow. (#46891)
Cleanup mypy ignore for fab provider in init_jinja_globals (#53328)
Remove type ignore across codebase after mypy upgrade (#53243)
Remove upper-binding for "python-requires" (#52980)
Remove unused batch methods from auth manager (#52883)
Temporarily switch to use >=,< pattern instead of '~=' (#52967)
Bump the fab-ui-package-updates group across 1 directory with 7 updates (#52807)
Remove extra slash from endpoint URL (#53755)
Fix spelling of GitHub brand name (#53735)
Clarify FAB auth provider versioning and webserver_config.py deprecation for Airflow 3.x (#53606)
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)Release Date: 2025-07-06
[AIP-68] Support pluginv2 views (#52582)
Set prefix to generate correctly the FAB Auth Manager API ref (#52329)
Fix airflow pin for fab provider (#52351)
Sanitize Username (#52419)
Drop support for Python 3.9 (#52072)
Bump the fab-ui-package-updates group across 1 directory with 4 updates (#52108)
Enable LDAP users to generate an Airflow token with 'FabAuthManager' (#52295)
[AIP-68] Support pluginv2 views (#52582)
Set prefix to generate correctly the FAB Auth Manager API ref (#52329)
Fix airflow pin for fab provider (#52351)
Sanitize Username (#52419)
Drop support for Python 3.9 (#52072)
Bump the fab-ui-package-updates group across 1 directory with 4 updates (#52108)
Enable LDAP users to generate an Airflow token with 'FabAuthManager' (#52295)
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)Release Date: 2025-06-24
Fix: allow users with specific DAG permissions to access DAGs when no specific DAG is requested (#51462)
Fix fab asset compilation hashing script (#51446)
Fix default setting for hash algorithm for FAB password hash (#51858)
Add back security api in FAB auth manager (#51578)
Bump @babel/eslint-parser from 7.27.1 to 7.27.5 in /providers/fab/src/airflow/providers/fab/www in the fab-ui-package-updates group across 1 directory (#51375)
Fix docstring in 'FabAuthManager' (#51892)
Fix: allow users with specific DAG permissions to access DAGs when no specific DAG is requested (#51462)
Fix fab asset compilation hashing script (#51446)
Fix default setting for hash algorithm for FAB password hash (#51858)
Add back security api in FAB auth manager (#51578)
Bump @babel/eslint-parser from 7.27.1 to 7.27.5 in /providers/fab/src/airflow/providers/fab/www in the fab-ui-package-updates group across 1 directory (#51375)
Fix docstring in 'FabAuthManager' (#51892)
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)Release Date: 2025-06-07
Add 'airflow db-manager' CLI for managing external databases (#50657)
Add support for unknown OIDC providers (#50921)
Move enable_swagger_ui config to api (#50896)
Move secret_key config to api section (#50839)
Move webserver config to fab provider (#50774)
Move webserver config options to api (#50693)
Bump the fab-ui-package-updates group across 1 directory with 4 updates (#51312)
Remove unused entries from 'DagAccessEntity' (#51174)
Bump moment-timezone from 0.5.48 to 0.6.0 in /providers/fab/src/airflow/providers/fab/www in the fab-ui-package-updates group across 1 directory (#51087)
Bump webpack from 5.99.8 to 5.99.9 in /providers/fab/src/airflow/providers/fab/www in the fab-ui-package-updates group across 1 directory (#50847)
Bump the fab-ui-package-updates group across 1 directory with 2 updates (#50783)
Change v1 to v2 in generated OpenAPI schema files (#50705)
Add 'airflow db-manager' CLI for managing external databases (#50657)
Add support for unknown OIDC providers (#50921)
Move enable_swagger_ui config to api (#50896)
Move secret_key config to api section (#50839)
Move webserver config to fab provider (#50774)
Move webserver config options to api (#50693)
Bump the fab-ui-package-updates group across 1 directory with 4 updates (#51312)
Remove unused entries from 'DagAccessEntity' (#51174)
Bump moment-timezone from 0.5.48 to 0.6.0 in /providers/fab/src/airflow/providers/fab/www in the fab-ui-package-updates group across 1 directory (#51087)
Bump webpack from 5.99.8 to 5.99.9 in /providers/fab/src/airflow/providers/fab/www in the fab-ui-package-updates group across 1 directory (#50847)
Bump the fab-ui-package-updates group across 1 directory with 2 updates (#50783)
Change v1 to v2 in generated OpenAPI schema files (#50705)
Nothing published for this version
- Add back ProxyFix Middleware for flask app builder
Release Date: 2025-05-18
Add back ProxyFix Middleware for flask app builder (#49942)
Move access_denied_message webserver config to fab (#50208)
Move webserver expose_hostname config to fab (#50269)
Bump the fab-ui-package-updates group across 1 directory with 4 updates (#50312)
Bump the fab-ui-package-updates group across 1 directory with 4 updates (#50035)
Upgrade 'flask-appbuilder' to 4.6.3 in FAB provider (#50513)
docs: Update oauth keycloak example with new security manager (#50284)
docs: conditionally render section‐move links in sections‐and‐options include (#50582)
Add back ProxyFix Middleware for flask app builder (#49942)
Move access_denied_message webserver config to fab (#50208)
Move webserver expose_hostname config to fab (#50269)
Bump the fab-ui-package-updates group across 1 directory with 4 updates (#50312)
Bump the fab-ui-package-updates group across 1 directory with 4 updates (#50035)
Upgrade 'flask-appbuilder' to 4.6.3 in FAB provider (#50513)
docs: Update oauth keycloak example with new security manager (#50284)
docs: conditionally render section‐move links in sections‐and‐options include (#50582)
Bump stylelint to remove vulnerable sub-dependency
New Features """"""""""""
PythonVirtualenvDecorator to Taskflow API (#14761)Taskgroup decorator (#15034)SubprocessHook for running commands from operators (#13423)WeekDayBranchOperator (#13997)worker_pod_pending_timeout support (#15263)template_fields_renderers additions (#15130)AirflowSkipException on exit code 99 (by default, configurable) (#13421) (#14963)airflow jobs check CLI command to check health of jobs (Scheduler etc) (#14519)DateTimeBranchOperator to BranchDateTimeOperator (#14720)Improvements """"""""""""
DbApiHook (#15581)apply_default to subclasses of BaseOperator (#15667)KubernetesExecutor pod templates to allow access to IAM permissions (#15669)airflow db check-migrations (#15662)secret_key when Webserver > 1 (#15546)JSONFormatter (#15414)on_failure_callback when SIGTERM is received (#15172)worker_refresh_interval to 6000 seconds (#14970)[celery] default_queue config to [operators] default_queue to re-use between executors (#14699)Bug Fixes """""""""
updateTaskInstancesState API endpoint when dry_run not passed (#15889)drawDagStatsForDag in dags.html (#13884)NotPreviouslySkippedDep (#13933)KubernetesExecutor (#14795)KubernetesPodOperator (#15388)dag.partial_subset (#13700) (#15308)pod_id for KubernetesPodOperator (#15445)pod_id ends with hyphen in KubernetesPodOperator (#15443)pool_slots > 1 (#15426)sync-perm to work correctly when update_fab_perms = False (#14847)GCSObjectsWtihPrefixExistenceSensor (#14179)CeleryKubernetesExecutor bug (#13247)StackdriverTaskHandler (#13784)func.sum may return Decimal that break rest APIs (#15585)AlreadyExists exception when the execution_date is same (#15174)sync_metadata inside DagFileProcessorManager (#15121)docker-py update to resolve docker op issues (#15731)user_id from API schema (#15117)airflow info work with pipes (#14528)CollectionInfo in all Collections that have total_entries (#14366)task_instance_mutation_hook when importing airflow.models.dagrun (#15851)Doc only changes """"""""""""""""
markdownlint and yamllint config files (#15682)git_sync_template.yaml (#13197)Misc/Internal """""""""""""
logging.exception redundancy (#14823)stylelint to remove vulnerable sub-dependency (#15784)ssri from 6.0.1 to 6.0.2 in /airflow/www (#15437)datepicker for task instance detail view (#15284)tableau extra (#13595)cached_property on Python 3.8 where possible (#14606)flynt. (#13732)jquery ready instead of vanilla js (#15258)Webpack entries (#14551)Remove extra/needless deprecation warnings from airflow.contrib module
TypeError when Serializing & sorting iterable properties of DAGs (#15395)on_load trigger for folder-based plugins (#15208)kubernetes cleanup-pods subcommand will only clean up Airflow-created Pods (#15204)pod_template_file in KubernetesExecutor (#15197)executor_config breaks Graph View in UI (#15199)dagrun.schedule_delay metric (#15105)executor_config is passed (#14323)Lax for cookie_samesite when empty string is passed (#14183)dag.cli() KeyError (#13647)[kubernetes] enable_tcp_keepalive for new installs to True (#15338)libyaml C library when available. (#14577)airflow dags show command display TaskGroups (#14269)extra connection field. (#12944)Release Date: 2025-04-29
Add read config permission to viewer role in 'FabAuthManager' (#49581)
Fix infinite redirect in FAB AuthManager caused by mistakenly setting token cookie as secure (#49724)
Remove some lingering subdag references (#49663)
Bump stylelint (#49638)
Bump the fab-ui-package-updates group across 1 directory with 2 updates (#49511)
Remove old dynamic attr accessing re dag resource in FAB provider (#49669)
Adding flask app configuration docs to FAB provider (#49492)
Add note in FAB migration doc (#49423)
Add read config permission to viewer role in 'FabAuthManager' (#49581)
Fix infinite redirect in FAB AuthManager caused by mistakenly setting token cookie as secure (#49724)
Remove some lingering subdag references (#49663)
Bump stylelint (#49638)
Bump the fab-ui-package-updates group across 1 directory with 2 updates (#49511)
Remove old dynamic attr accessing re dag resource in FAB provider (#49669)
Adding flask app configuration docs to FAB provider (#49492)
Add note in FAB migration doc (#49423)
Nothing published for this version
Nothing published for this version
Fix Deprecation for configuration.getsection
sql_alchemy_conn_secret (#13260)DROP CONSTRAINT in MySQL during airflow db upgrade (#13239)sync-perm (#13377)datatables.net from 1.10.21 to 1.10.22 in /airflow/www (#13143)datatables.net JS to 1.10.23 (#13253)dompurify from 2.0.12 to 2.2.6 in /airflow/www (#13164)cattrs version (#13223)python-daemon limit for python 3.8+ to fix daemon crash (#13540)worker_concurrency to 16 (#13612)dag_id is None (#13619)continue_token for cleanup list pods (#13563)max_tis_per_query to 0 now correctly removes the limit (#13512)BaseBranchOperator will push to xcom by default (#13704) (#13763)configuration.getsection (#13804)Website.can_read access to default roles. (#13923)FileTaskHandler (#14001)v1/config endpoint respect webserver expose_config setting (#14020)min_file_process_interval to decrease CPU Usage (#13664)os.fork & CeleryExecutor (#13265)example_kubernetes_executor example dag (#13216)flask-swagger, funcsigs (#13178)queued_by_job_id & external_executor_id Columns to TI View (#13266)json-merge-patch an optional library and unpin it (#13175)setup.py to better reflect changes in providers (#13314)pyjwt and Add integration tests for Apache Pinot (#13195)setup.cfg (#13409)__eq__ methods in models Dag and BaseOperator (#13449)contextdecorator (#13455)mysql-connector-python to allow 8.0.22 (#13370)NotFound response for DELETE methods in OpenAPI YAML (#13550)[core] lazy_load_plugins is False (#13578)colorlog dependency (#13176)python3-openid dependency (#13714)__repr__ for Executors (#13753)conn_type is missing (#13778)get_connnection REST endpoint (#13885)airflow_local_settings.py to fix an error message (#13927)TriggerDagRunOperator (#13964)start_date (REST API) (#13959)OperationalError (#14032)rbac UI (#13569)Release Date: 2025-04-19
Fix fab auth manager login (#49292)
Bump eslint-config-prettier (#49077)
remove superfluous else block (#49199)
Change default page_size from 100 to 50 (#49243)
Make sure all openapi schemes have distinct names (#49290)
Remove 'STATE_COLORS' from Airflow Local Setting (#49228)
AIP-38: remove 'default_ui_timezone' (#49176)
Remove FAB entry from 'NOTICE' (#49063)
refactor: remove 'navbar_logo_text_color' (#49161)
Fix fab auth manager login (#49292)
Bump eslint-config-prettier (#49077)
remove superfluous else block (#49199)
Change default page_size from 100 to 50 (#49243)
Make sure all openapi schemes have distinct names (#49290)
Remove 'STATE_COLORS' from Airflow Local Setting (#49228)
AIP-38: remove 'default_ui_timezone' (#49176)
Remove FAB entry from 'NOTICE' (#49063)
refactor: remove 'navbar_logo_text_color' (#49161)
Nothing published for this version
We’ve tried to make as few breaking changes as possible and to provide deprecation path in the code, especially in the case of anything called in the…
The full changelog is about 3,000 lines long (already excluding everything backported to 1.10), so for now I’ll simply share some of the major features in 2.0.0 compared to 1.10.14:
(Known in 2.0.0alphas as Functional DAGs.)
DAGs are now much much nicer to author especially when using PythonOperator. Dependencies are handled more clearly and XCom is nicer to use
A quick teaser of what DAGs can now look like:
from airflow.decorators import dag, task
from airflow.utils.dates import days_ago
@dag(default_args={'owner': 'airflow'}, schedule_interval=None, start_date=days_ago(2))
def tutorial_taskflow_api_etl():
@task
def extract():
return {"1001": 301.27, "1002": 433.21, "1003": 502.22}
@task
def transform(order_data_dict: dict) -> dict:
total_order_value = 0
for value in order_data_dict.values():
total_order_value += value
return {"total_order_value": total_order_value}
@task()
def load(total_order_value: float):
print("Total order value is: %.2f" % total_order_value)
order_data = extract()
order_summary = transform(order_data)
load(order_summary["total_order_value"])
tutorial_etl_dag = tutorial_taskflow_api_etl()
We now have a fully supported, no-longer-experimental API with a comprehensive OpenAPI specification
Read more here:
REST API Documentation.
As part of AIP-15 (Scheduler HA+performance) and other work Kamil did, we significantly improved the performance of the Airflow Scheduler. It now starts tasks much, MUCH quicker.
Over at Astronomer.io we’ve benchmarked the scheduler—it’s fast (we had to triple check the numbers as we don’t quite believe them at first!)
It’s now possible and supported to run more than a single scheduler instance. This is super useful for both resiliency (in case a scheduler goes down) and scheduling performance.
To fully use this feature you need Postgres 9.6+ or MySQL 8+ (MySQL 5, and MariaDB won’t work with more than one scheduler I’m afraid).
There’s no config or other set up required to run more than one scheduler—just start up a scheduler somewhere else (ensuring it has access to the DAG files) and it will cooperate with your existing schedulers through the database.
For more information, read the Scheduler HA documentation.
SubDAGs were commonly used for grouping tasks in the UI, but they had many drawbacks in their execution behaviour (primarirly that they only executed a single task in parallel!) To improve this experience, we’ve introduced “Task Groups”: a method for organizing tasks which provides the same grouping behaviour as a subdag without any of the execution-time drawbacks.
SubDAGs will still work for now, but we think that any previous use of SubDAGs can now be replaced with task groups. If you find an example where this isn’t the case, please let us know by opening an issue on GitHub
For more information, check out the Task Group documentation.
We’ve given the Airflow UI a visual refresh and updated some of the styling. Check out the UI section of the docs for screenshots.
We have also added an option to auto-refresh task states in Graph View so you no longer need to continuously press the refresh button :).
If you make heavy use of sensors in your Airflow cluster, you might find that sensor execution takes up a significant proportion of your cluster even with “reschedule” mode. To improve this, we’ve added a new mode called “Smart Sensors”.
This feature is in “early-access”: it’s been well-tested by AirBnB and is “stable”/usable, but we reserve the right to make backwards-incompatible changes to it in a future release (if we have to. We’ll try very hard not to!)
For Airflow 2.0, we have re-architected the KubernetesExecutor in a fashion that is simultaneously faster, easier to understand, and more flexible for Airflow users. Users will now be able to access the full Kubernetes API to create a .yaml pod_template_file instead of specifying parameters in their airflow.cfg.
We have also replaced the executor_config dictionary with the pod_override parameter, which takes a Kubernetes V1Pod object for a 1:1 setting override. These changes have removed over three thousand lines of code from the KubernetesExecutor, which makes it run faster and creates fewer potential errors.
Airflow 2.0 is not a monolithic “one to rule them all” package. We’ve split Airflow into core and 61 (for now) provider packages. Each provider package is for either a particular external service (Google, Amazon, Microsoft, Snowflake), a database (Postgres, MySQL), or a protocol (HTTP/FTP). Now you can create a custom Airflow installation from “building” blocks and choose only what you need, plus add whatever other requirements you might have. Some of the common providers are installed automatically (ftp, http, imap, sqlite) as they are commonly used. Other providers are automatically installed when you choose appropriate extras when installing Airflow.
The provider architecture should make it much easier to get a fully customized, yet consistent runtime with the right set of Python dependencies.
But that’s not all: you can write your own custom providers and add things like custom connection types, customizations of the Connection Forms, and extra links to your operators in a manageable way. You can build your own provider and install it as a Python package and have your customizations visible right in the Airflow UI.
Security
As part of Airflow 2.0 effort, there has been a conscious focus on Security and reducing areas of exposure. This is represented across different functional areas in different forms. For example, in the new REST API, all operations now require authorization. Similarly, in the configuration settings, the Fernet key is now required to be specified.
Configuration in the form of the airflow.cfg file has been rationalized further in distinct sections, specifically around “core”. Additionally, a significant amount of configuration options have been deprecated or moved to individual component-specific configuration files, such as the pod-template-file for Kubernetes execution-related configuration.
We’ve tried to make as few breaking changes as possible and to provide deprecation path in the code, especially in the case of anything called in the DAG. That said, please read through UPDATING.md to check what might affect you. For example: We re-organized the layout of operators (they now all live under airflow.providers.*) but the old names should continue to work - you’ll just notice a lot of DeprecationWarnings that need to be fixed up.
Release Date: 2025-04-14
Warning
The new version of the Fab provider is only compatible with Airflow 3. It is impossible to use apache-airflow-providers-fab >= 2.0 with Airflow 2.X. If you use Airflow 2.X, please use apache-airflow-providers-fab 1.X.
Warning
All deprecated classes, parameters and features have been removed from the Fab provider package. The following breaking changes were introduced:
Removed is_authorized_dataset method from FabAuthManager . Use is_authorized_asset instead
Removed the authentication type AUTH_OID
Removed get_readable_dags method from the security manager override
Removed get_editable_dags method from the security manager override
Removed get_accessible_dags method from the security manager override
Removed get_accessible_dag_ids method from the security manager override
Removed prefixed_dag_id method from the security manager override
Removed init_role method from the security manager override
Prepare FAB provider to set next version as major version (#43939)
Remove deprecations from fab provider (#44198)
Rename 'get_permitted_dag_ids' and 'filter_permitted_dag_ids' to 'get_authorized_dag_ids' and 'filter_authorized_dag_ids' (#47640)
Set simple auth manager as default (#47691)
Set up JWT token authentication in Fast APIs (#42634)
AIP-79 Support Airflow 2.x plugins in fast api. Embed a minimal version of the Flask application in fastapi application (#44464)
AIP 84 - Add auth for asset alias (#47241)
AIP-81 | AIP-84 | Include Token Generation Endpoints in FAB (#47043)
AIP-84 Add Auth for DAG Versioning (#47553)
AIP-84 Add Auth for backfill (#47482)
Expose security views in Flask application in FAB provider (#46203)
Fix and simplify 'get_permitted_dag_ids' in auth manager (#47458)
Get rid of google-re2 as dependency (#47493)
Introduce 'filter_authorized_menu_items' to filter menu items based on permissions (#47681)
Remove links to x/twitter.com (#47801)
Warning
The new version of the Fab provider is only compatible with Airflow 3. It is impossible to use apache-airflow-providers-fab >= 2.0 with Airflow 2.X. If you use Airflow 2.X, please use apache-airflow-providers-fab 1.X.
Warning
All deprecated classes, parameters and features have been removed from the Fab provider package. The following breaking changes were introduced:
Removed is_authorized_dataset method from FabAuthManager. Use is_authorized_asset instead
Removed the authentication type AUTH_OID
Removed get_readable_dags method from the security manager override
Removed get_editable_dags method from the security manager override
Removed get_accessible_dags method from the security manager override
Removed get_accessible_dag_ids method from the security manager override
Removed prefixed_dag_id method from the security manager override
Removed init_role method from the security manager override
Prepare FAB provider to set next version as major version (#43939)
Remove deprecations from fab provider (#44198)
Rename 'get_permitted_dag_ids' and 'filter_permitted_dag_ids' to 'get_authorized_dag_ids' and 'filter_authorized_dag_ids' (#47640)
Set simple auth manager as default (#47691)
Set up JWT token authentication in Fast APIs (#42634)
AIP-79 Support Airflow 2.x plugins in fast api. Embed a minimal version of the Flask application in fastapi application (#44464)
AIP 84 - Add auth for asset alias (#47241)
AIP-81 | AIP-84 | Include Token Generation Endpoints in FAB (#47043)
AIP-84 Add Auth for DAG Versioning (#47553)
AIP-84 Add Auth for backfill (#47482)
Expose security views in Flask application in FAB provider (#46203)
Fix and simplify 'get_permitted_dag_ids' in auth manager (#47458)
Get rid of google-re2 as dependency (#47493)
Introduce 'filter_authorized_menu_items' to filter menu items based on permissions (#47681)
Remove links to x/twitter.com (#47801)
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
- [providers-fab/v1-5] Use different default algorithms for different werkzeug versions
Release Date: 2025-02-08
[providers-fab/v1-5] Use different default algorithms for different werkzeug versions (#46384) (#46392)
[providers-fab/v1-5] Upgrade to FAB 4.5.3 (#45874) (#45918)
Nothing published for this version
This is probably missing some important items, but most of it should be captured
This is probably missing some important items, but most of it should be captured
from __future__ imports to prevent regressionmysqlclient lib instead of mysql-pythonRelease Date: 2025-01-03
Correctly import isabs from os.path (#45178)
Invalidate user session on password reset (#45139)
Nothing published for this version
Bugfix around XCom table creation timestamp issue
Bugfix around XCom table creation timestamp issue
Release Date: 2024-11-18
fab_auth_manager: allow get_user method to return the user authenticated via Kerberos (#43662)
fab_auth_manager: allow get_user method to return the user authenticated via Kerberos (#43662)
Nothing published for this version
v1.5.0 is a huge release. Tons of important features.
v1.5.0 is a huge release. Tons of important features.
Make sure to run airflow upgradedb after you upgrade
Improvements:
airflow upgradedb to get your database up to date as you upgrade AirflowRelease Date: 2024-11-05
feat(providers/fab): Use asset in common provider (#43112)
fix revoke Dag stale permission on airflow < 2.10 (#42844)
fix(providers/fab): alias is_authorized_dataset to is_authorized_asset (#43469)
fix: Change CustomSecurityManager method name (#43034)
Upgrade Flask-AppBuilder to 4.5.2 (#43309)
Upgrade Flask-AppBuilder to 4.5.1 (#43251)
Move user and roles schemas to fab provider (#42869)
Move the session auth backend to FAB auth manager (#42878)
Add logging to the migration commands (#43516)
DOC fix documentation error in 'apache-airflow-providers-fab/access-control.rst' (#43495)
Rename dataset as asset in UI (#43073)
feat(providers/fab): Use asset in common provider (#43112)
fix revoke Dag stale permission on airflow < 2.10 (#42844)
fix(providers/fab): alias is_authorized_dataset to is_authorized_asset (#43469)
fix: Change CustomSecurityManager method name (#43034)
Upgrade Flask-AppBuilder to 4.5.2 (#43309)
Upgrade Flask-AppBuilder to 4.5.1 (#43251)
Move user and roles schemas to fab provider (#42869)
Move the session auth backend to FAB auth manager (#42878)
Add logging to the migration commands (#43516)
DOC fix documentation error in 'apache-airflow-providers-fab/access-control.rst' (#43495)
Rename dataset as asset in UI (#43073)
Nothing published for this version
Nothing published for this version
Nothing published for this version
- Update Rest API tests to no longer rely on FAB auth manager. Move tests specific to FAB permissions to FAB provider
Release Date: 2024-10-14
Update Rest API tests to no longer rely on FAB auth manager. Move tests specific to FAB permissions to FAB provider (#42523)
Rename dataset related python variable names to asset (#41348)
Simplify expression for get_permitted_dag_ids query (#42484)
Update Rest API tests to no longer rely on FAB auth manager. Move tests specific to FAB permissions to FAB provider (#42523)
Rename dataset related python variable names to asset (#41348)
Simplify expression for get_permitted_dag_ids query (#42484)
Nothing published for this version
Python3 compatibility improvements
Release Date: 2024-09-24
Add FAB migration commands (#41804)
Separate FAB migration from Core Airflow migration (#41437)
Deprecated kerberos auth removed (#41693)
Deprecated configuration removed (#42129)
Move 'is_active' user property to FAB auth manager (#42042)
Move 'register_views' to auth manager interface (#41777)
Revert "Provider fab auth manager deprecated methods removed (#41720)" (#41960)
Provider fab auth manager deprecated methods removed (#41720)
Make kerberos an optional and devel dependency for impala and fab (#41616)
Add FAB migration commands (#41804)
Separate FAB migration from Core Airflow migration (#41437)
Deprecated kerberos auth removed (#41693)
Deprecated configuration removed (#42129)
Move 'is_active' user property to FAB auth manager (#42042)
Move 'register_views' to auth manager interface (#41777)
Revert "Provider fab auth manager deprecated methods removed (#41720)" (#41960)
Provider fab auth manager deprecated methods removed (#41720)
Make kerberos an optional and devel dependency for impala and fab (#41616)
Nothing published for this version
- Feature: Allow set Dag Run resource into Dag Level permission
Release Date: 2024-08-22
Feature: Allow set Dag Run resource into Dag Level permission (#40703)
Remove deprecated SubDags (#41390)
Feature: Allow set Dag Run resource into Dag Level permission (#40703)
Remove deprecated SubDags (#41390)
Nothing published for this version
- Bug fix: sync perm command not able to use custom security manager
Release Date: 2024-07-31
Bug fix: sync perm command not able to use custom security manager (#41020)
Bump version checked by FAB provider on logout CSRF protection to 2.10.0 (#40784)
AIP-44 make database isolation mode work in Breeze (#40894)
Bug fix: sync perm command not able to use custom security manager (#41020)
Bump version checked by FAB provider on logout CSRF protection to 2.10.0 (#40784)
AIP-44 make database isolation mode work in Breeze (#40894)
Nothing published for this version
- Add backward compatibility to CSRF protection of '/logout' method
Release Date: 2024-07-12
Add backward compatibility to CSRF protection of '/logout' method (#40479)
Add backward compatibility to CSRF protection of '/logout' method (#40479)
Nothing published for this version
- fix: sqa deprecations for airflow providers
Release Date: 2024-06-27
Add CSRF protection to "/logout" (#40145)
implement per-provider tests with lowest-direct dependency resolution (#39946)
Upgrade to FAB 4.5.0 (#39851)
fix: sqa deprecations for airflow providers (#39293)
Add '[webserver]update_fab_perms' to deprecated configs (#40317)
Nothing published for this version
- Faster 'airflow_version' imports
Release Date: 2024-05-30
Faster 'airflow_version' imports (#39552)
Simplify 'airflow_version' imports (#39497)
Simplify action name retrieval in FAB auth manager (#39358)
Add 'jmespath' as an explicit dependency (#39350)
Faster 'airflow_version' imports (#39552)
Simplify 'airflow_version' imports (#39497)
Simplify action name retrieval in FAB auth manager (#39358)
Add 'jmespath' as an explicit dependency (#39350)
Nothing published for this version
This release of provider is only available for Airflow 2.7+ as explained in the Apache Airflow providers support policy .
Release Date: 2024-05-06
Note
This release of provider is only available for Airflow 2.7+ as explained in the Apache Airflow providers support policy .
Remove plugins permissions from Viewer role (#39254)
Update 'is_authorized_custom_view' from auth manager to handle custom actions (#39167)
Bump minimum Airflow version in providers to Airflow 2.7.0 (#39240)
Nothing published for this version
- Remove button for reset my password when we have reset password
Release Date: 2024-04-21
Remove button for reset my password when we have reset password (#38957)
Remove button for reset my password when we have reset password (#38957)
Nothing published for this version
- Rename 'allowed_filter_attrs' to 'allowed_sort_attrs'
Release Date: 2024-04-13
Rename 'allowed_filter_attrs' to 'allowed_sort_attrs' (#38626)
Fix azure authentication when no email is set (#38872)
Rename 'allowed_filter_attrs' to 'allowed_sort_attrs' (#38626)
Fix azure authentication when no email is set (#38872)
Nothing published for this version
First stable release for the provider
Release Date: 2024-04-03
First stable release for the provider
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →