{"full_name":"apache/airflow","owner":"apache","name":"airflow","url":"https://github.com/apache/airflow","description":"Apache Airflow - A platform to programmatically author, schedule, and monitor workflows","homepage":"https://airflow.apache.org/","topics":[],"language":"Python","license":"Apache-2.0","avatar":"https://avatars.githubusercontent.com/u/47359?v=4","created_at":"2015-04-13T18:04:58Z","pushed_at":"2026-11-10T08:50:52Z","metrics":{"stars":47434,"forks":18334,"watchers":784,"issues":15443,"prs":55454,"releases":128,"issues_open":null,"issues_closed":null,"prs_open":null,"prs_closed":null,"prs_merged":null,"discussions":5022},"growth":{"day":{"stars":14,"forks":9,"base_day":"2026-11-09"},"week":{"stars":84,"forks":36,"base_day":"2026-11-03"},"month":{"stars":377,"forks":370,"base_day":"2026-10-11"}},"history":{"dates":["2026-10-07","2026-10-08","2026-10-09","2026-10-10","2026-10-11","2026-10-12","2026-10-13","2026-10-14","2026-10-15","2026-10-16","2026-10-17","2026-10-18","2026-10-19","2026-10-20","2026-10-21","2026-10-22","2026-10-23","2026-10-24","2026-10-25","2026-10-26","2026-10-27","2026-10-28","2026-10-29","2026-10-30","2026-10-31","2026-11-01","2026-11-02","2026-11-03","2026-11-04","2026-11-09","2026-11-10"],"stars":[47012,47019,47035,47041,47057,47071,47090,47124,47130,47139,47148,47163,47176,47183,47192,47200,47221,47236,47242,47257,47269,47267,47282,47290,47301,47309,47327,47350,47353,47420,47434],"forks":[17932,17936,17944,17947,17964,17971,17976,17983,17987,17989,18012,18022,18030,18037,18048,18053,18083,18100,18112,18094,18114,18126,18160,18177,18202,18218,18241,18298,18283,18325,18334],"watchers":[794,794,795,796,797,796,797,797,796,797,798,798,798,798,798,797,799,799,799,794,793,788,786,786,787,787,787,786,786,784,784],"issues_open":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"prs_open":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"boards":{},"same_owner":[{"full_name":"apache/age","name":"age","boards":{}},{"full_name":"apache/answer","name":"answer","boards":{}},{"full_name":"apache/apisix","name":"apisix","boards":{}},{"full_name":"apache/arrow","name":"arrow","boards":{}},{"full_name":"apache/brpc","name":"brpc","boards":{}},{"full_name":"apache/comdev-site","name":"comdev-site","boards":{}},{"full_name":"apache/datafusion","name":"datafusion","boards":{}},{"full_name":"apache/dolphinscheduler","name":"dolphinscheduler","boards":{}},{"full_name":"apache/doris","name":"doris","boards":{}},{"full_name":"apache/dubbo","name":"dubbo","boards":{}},{"full_name":"apache/dubbo-go","name":"dubbo-go","boards":{}},{"full_name":"apache/echarts","name":"echarts","boards":{}},{"full_name":"apache/hadoop","name":"hadoop","boards":{}},{"full_name":"apache/hbase","name":"hbase","boards":{}},{"full_name":"apache/iceberg","name":"iceberg","boards":{}},{"full_name":"apache/incubator-kie-examples","name":"incubator-kie-examples","boards":{}},{"full_name":"apache/jmeter","name":"jmeter","boards":{}},{"full_name":"apache/maka","name":"maka","boards":{}},{"full_name":"apache/mxnet","name":"mxnet","boards":{}},{"full_name":"apache/nifi","name":"nifi","boards":{}}],"issues":[{"number":62500,"title":"[GSOC 2026] Airflow Contribution & Verification Agent Skills","comments":68,"created_at":"2026-02-26T03:24:50Z"},{"number":21867,"title":"Retry for TaskGroup","comments":50,"created_at":"2022-02-28T11:42:08Z"},{"number":30264,"title":"Running tasks marked as skipped on DagRun timeout","comments":38,"created_at":"2023-03-23T21:27:17Z"},{"number":43176,"title":"Explore and add static checks for DAGs for early detection of common issues","comments":34,"created_at":"2024-10-18T20:03:00Z"},{"number":49508,"title":"DAG Runs from a single DAG can prevent scheduler from seeing other DAG's runs","comments":33,"created_at":"2025-04-21T16:29:27Z"},{"number":10388,"title":"Windows support for Airflow","comments":31,"created_at":"2020-08-18T21:35:20Z"},{"number":52712,"title":"AIP-82: Add common messaging system providers","comments":29,"created_at":"2025-07-02T13:54:26Z"},{"number":19251,"title":"Add a way to skip the secret_backend","comments":29,"created_at":"2021-10-27T13:07:55Z"}],"discussions":[{"number":76535,"title":"Custom worker images to lower the number of kubernetespodoperator tasks","comments":1,"category":"Q&A","created_at":"2026-11-05T09:57:00Z"},{"number":76421,"title":"Task retries after approval expiry: reconciling a committed export without authorising a new one","comments":1,"category":"Q&A","created_at":"2026-11-04T08:13:02Z"},{"number":76373,"title":"Pre-flight SQL query syntax validation and partition guard in Common SQL provider","comments":0,"category":"General","created_at":"2026-11-03T14:04:45Z"},{"number":76275,"title":"Discussion: Should Airflow provide a compatibility option for Psycopg 3 client-side parameter binding?","comments":1,"category":"Q&A","created_at":"2026-11-02T06:01:20Z"},{"number":75995,"title":"Public architecture graph of apache/airflow @ 37b6b04e — 769 files, 11 651 imports, no embeddings","comments":0,"category":"Show and tell","created_at":"2026-10-29T22:24:55Z"},{"number":75981,"title":"Event-based-Trigger","comments":1,"category":"Ideas","created_at":"2026-10-29T16:18:45Z"},{"number":75395,"title":"Request: reduce the amount of time used on Apache shared runners","comments":11,"category":"General","created_at":"2026-10-22T09:57:52Z"},{"number":74808,"title":"Apache Airflow Scheduler creates DAG Runs before their scheduled execution time — tasks stuck with \"Execution date is in the future\"","comments":2,"category":"Q&A","created_at":"2026-10-15T15:54:32Z"}],"latest_release":{"name":"Apache Airflow 3.4.0","tag":"3.4.0","published_at":"2026-11-06T13:08:22Z","body":"📦 PyPI: https://pypi.org/project/apache-airflow/3.4.0/\r\n📚 Docs: https://airflow.apache.org/docs/apache-airflow/3.4.0/\r\n🛠 Release Notes: https://airflow.apache.org/docs/apache-airflow/3.4.0/release_notes.html\r\n🐳 Docker Image: \"docker pull apache/airflow:3.4.0\"\r\n🚏 Constraints: https://github.com/apache/airflow/tree/constraints-3.4.0\r\n\r\n## Significant Changes\r\n\r\n### Task Loops (#73005, #74222, #74275, #74345)\r\n\r\n\r\nAirflow 3.4.0 introduces Task Loops (AIP-111): a decorated task group can be repeated a number of\r\ntimes decided at runtime using ``.loop()``. A conditional loop works like a ``do ... while`` loop -\r\nthe body runs at least once and an ``until`` condition decides when to stop, bounded by\r\n``max_iterations``. Each iteration can use the previous iteration's result and iterations run one\r\nafter another (tasks within an iteration can still run in parallel). Retried attempts are kept\r\nunder a per-attempt UUID so each iteration's data is preserved and can be cleared selectively.\r\n\r\nFor detailed usage instructions, see :doc:`/authoring-and-scheduling/loops`.\r\n\r\n.. note::\r\n  Downgrading to any version earlier than 3.4.0 can be slow, depending on the number of\r\n  XCom rows that have been written after upgrading. Upgrading was tested on a\r\n  300m row XCom table, so please don't worry about upgrade time (we made sure\r\n  that the XCom *data* didn't get touched or read during migration to keep it\r\n  fast).\r\n\r\n  This is because this release contains a migration that starts storing new XCom\r\n  rows in an xcom_v2 table, and in order to downgrade we have to move those over\r\n  to the old table, and there is no way of doing this without copying the\r\n  written xcom values.\r\n\r\n  The downgrade refuses to continue when it finds data it cannot map back\r\n  safely. Each migration commits separately, so the later 3.4.0 migrations\r\n  have already been reversed at that point: fix the data and re-run the\r\n  downgrade, or run ``airflow db migrate`` to return to 3.4.\r\n\r\n  On MySQL a failure after those checks leaves the schema partly downgraded,\r\n  as MySQL cannot roll back DDL. Taking a backup before attempting the\r\n  downgrade on MySQL is advised, so it can be restored in that case.\r\n\r\n\r\n### Dag Importer for non-Python Dags (#72369, #73728, #73853, #74020, #74084, #74333, #74586)\r\n\r\nAirflow 3.4.0 can author an entire Dag - schedule, tasks, and dependencies - in a language other\r\nthan Python. AIP-85 adds a pluggable Dag Importer in the Task SDK that teaches the Dag processor to\r\nrecognize source formats beyond ``.py``: each format registers an importer, the processor runs the\r\nmatching language runtime, and the resulting Dags surface in Airflow like Python Dags. The formats\r\nthat land on it are the TypeScript, Go, and Java language SDKs and a native YAML Dag format (a\r\n``.yaml`` file with a ``$schema`` marker, validated against a schema and built into real operators,\r\nwith explicit templating). The Dag Importer framework and the language SDKs are experimental in 3.4\r\nand their APIs may change.\r\n\r\nFor detailed usage instructions, see :doc:`/administration-and-deployment/dag-importers`.\r\n\r\n### Unify executor workload queues under ``BaseExecutor.executor_queues`` (#63491)\r\n\r\nExecutor workload state is now stored on the unified ``BaseExecutor.executor_queues`` mapping keyed\r\nby ``WorkloadType`` and scheduled through ``trigger_workloads``. The previous per-type attributes\r\nand entrypoints (``queued_tasks``, ``queued_callbacks``, ``supports_callbacks``, ``trigger_tasks``,\r\n``order_queued_tasks_by_priority``) and the Airflow 3.3 connection-test surface are folded into\r\nthis mapping and kept as backward-compatible shims that emit ``RemovedInAirflow4Warning`` (to be\r\nremoved in Airflow 4.0). Out-of-tree executors should declare ``supported_workload_types`` and\r\nimplement ``trigger_workloads``. Connection tests are now admitted under the same per-heartbeat\r\nbudget as tasks and prioritized ahead of them. See\r\n`#63491 <https://github.com/apache/airflow/pull/63491"},"readme":true,"readme_zh":false,"news":[],"stale":false,"snapshot_at":"2026-11-10T09:35:25Z","history_start":"2026-09-06"}