mrkeyoor.com_
Tue 15 Sept 23:58 UTC
Automationevaluationupdated 25 Aug 2026

airflow review

Apache Airflow schedules and monitors workflows whose steps and dependencies are written in Python. It is meant for recurring, mostly stable jobs such as data pipelines and model training, where teams need retries, history, a UI, and a shared scheduler instead of a pile of cron entries.

+60stars / 7d
Verdict

Our Airflow run installed 151 packages and built in 26 seconds, but its test command stopped after 7 seconds on an unrecognized pytest option, so established data teams should expect a capable scheduler with a serious development environment. Use it when scheduled Python DAGs, backfills, provider integrations, and operational history justify running shared infrastructure. Pick a smaller orchestrator for a young pipeline estate, and use a stream processor for continuous events.

We ran it

Lab card: what happened when we ran airflowScreenshot of airflow (airflow.apache.org)
Install✓ · 205s151 packages · 190 MB
Build✓ · 26s
Tests✗ · 7sran, no count parsed
Known vulns0(pip-audit)
Repo13808 files~1,810,357 lines of source · 184.6 MB · 52 CI workflows · Dockerfile

Answers from our run

Does airflow build from source?

Dependencies installed in 205 seconds (151 packages), and the build succeeded in 26 seconds. We cloned commit d4aa209 into a clean Debian container with 3 CPUs and no project-specific setup.

Do airflow's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Does airflow have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use airflow?

Teams processing continuous event streams: the README says Airflow is not a streaming system and recommends handling stream data in batches.

What are the alternatives to airflow?

Prefect, Dagster, Argo Workflows. Our Airflow run installed 151 packages and built in 26 seconds, but its test command stopped after 7 seconds on an unrecognized pytest option, so established data teams should expect a capable scheduler with a serious development environment.

Setup2/5Source install worked, but tests stopped and production needs several services
Docs5/5Direct limits, version matrix, constraints, tutorials, and deployment guides
Community5/546,606 stars, current pushes, and same-day issue activity
Maturity5/5Versioned core, provider releases, migrations, and long-lived operations

Discussed on

  1. hnApache Airflow: programmatically author, schedule, monitor workflows6 points

Who it’s for

Data and platform teams running scheduled pipelines across databases, cloud services, and compute systems.
Python teams that want workflow definitions reviewed and versioned with application code.
Operators who need a web UI, backfills, retries, and several execution choices for recurring jobs.
Organizations willing to run a metadata database and treat the scheduler as production infrastructure.

Who it’s NOT for

Teams processing continuous event streams: the README says Airflow is not a streaming system and recommends handling stream data in batches.
Workflows whose graph changes radically on every run: Airflow says it works best when DAG structure is mostly static and slowly changing.
Jobs that pass large payloads between steps: the project recommends external storage and limits XCom to metadata-sized communication.
Windows-only operators: native Windows is unsupported, with WSL2 or Linux containers offered instead, and Linux is the supported production platform.
Small teams wanting a dependency-free cron replacement: even our source install pulled 151 packages, while production also needs a supported database and an executor choice.

Setup reality

Our run at commit d4aa209 installed 151 packages in 205 seconds and used 190 MB. The build finished in 26 seconds, but pytest failed after 7 seconds with exit 4 because --asyncio-mode=strict was unrecognized. The log does not establish why that option was unavailable. Pip-audit found 0 known vulnerabilities.

A useful deployment needs more than the Python package. You choose and configure a supported metadata database, an executor, task connections, and credentials for every external system a DAG touches. Airflow publishes constraints for repeatable installs because its README warns that an unconstrained pip install can sometimes produce an unusable environment.

Linux is the supported production platform. SQLite is for local development and tests, not production, while Windows users need WSL2 or Linux containers. The repository contains 52 CI workflow files and a Dockerfile, which fits a project with several release lines, provider packages, and deployment paths.

Airflow 3.3.1 is built for scheduled DAGs, not event streams

Airflow 3.3.1 turns a Python definition into a scheduled graph of tasks, then records each run in a metadata database. The scheduler decides when work is ready, an executor sends it to workers, and the web interface shows failures, retries, dependencies, and backfills. That division is useful when a pipeline has to be understood by people other than its first author. A DAG can live beside normal code, go through review, and keep an operational history that cron does not provide.

The boundary matters. Airflow's README says it works best when a DAG is mostly static and changes slowly between runs. It is not a streaming engine, even if teams use it to pull records from streams in batches. Tasks should be idempotent, and XCom is for passing metadata rather than large datasets. A competent team should walk away if the job is a continuous event loop or if every run invents a new graph. Those shapes fight the product instead of using it.

What happened when we ran it

Our sandbox run at commit d4aa209 installed 151 packages in 205 seconds, occupying 190 MB on disk. The source tree was much larger: 13,808 files, about 1,810,357 lines of source, and 184.6 MB checked out. On the same 3-CPU, 8 GB Debian container, the build completed in 26 seconds. Pip-audit reported 0 known vulnerabilities, which is a clean result for the exact environment we measured.

The test step failed after 7 seconds with exit 4. Pytest rejected --asyncio-mode=strict, naming /work/repo/pyproject.toml as its configuration file and /work/repo as the root. That is all the log tail proves. It does not identify which package supplied the option or why it was absent, so blaming a dependency mismatch would be guesswork. The practical finding is narrower: a successful install and build did not make the repository's default test invocation runnable in our fresh container.

The repository has 52 CI workflow files and a Dockerfile, but no top-level tests directory was detected by our scan. That signal fits Airflow's scale rather than implying it lacks tests: the project is split across core, providers, clients, deployment assets, and tooling. Contributors should follow the documented development environment instead of treating the PyPI quick start as a source-development recipe.

Repeatable installs depend on versioned constraint files

Airflow 3.3.0 supports Python 3.10 through 3.14, while its README gives a constraint URL tied to both the Airflow and Python versions. The maintainers explicitly warn that plain pip install apache-airflow may sometimes fail or create an unusable installation because Airflow sits between a library and an application. Only pip and uv are officially supported for installation. Poetry and pip-tools users are told to adapt the published constraints themselves.

That honesty is useful, but it means dependency resolution is part of operating Airflow. Provider packages add integrations on their own release tracks, and each deployment must pin a known set rather than casually upgrade the whole environment. The 3.3.1 release notes show why: the pandas 3 change affects how DataFrame XComs are named, and every component must be upgraded before pandas 3 reaches any of them. A rollback can strand XCom values written under the newer naming.

Production requires Linux and a real metadata database

PostgreSQL 14 through 18 and MySQL 8.0 or 8.4 appear in the 3.3.0 support matrix. SQLite 3.15.0 or newer is supported for development and tests, but the README says not to use it in production. Native Windows is also outside the supported path. Windows developers need WSL2 or Linux containers, and the project supports Linux distributions for production execution. MariaDB is neither tested nor recommended.

After the database comes the executor, worker capacity, secrets, logs, upgrades, and every connection used by a DAG. Airflow can delegate work to many external systems through providers, which is the main reason to accept this overhead. It should orchestrate large data jobs rather than carry their payloads between tasks. Teams that already run Kubernetes may prefer the official Helm path; smaller installations still need backup and migration discipline around the metadata database.

46,606 stars come with daily maintenance traffic

The repository had 46,606 stars and was pushed on 2026-08-25, the same day we checked it. GitHub reported 1,932 open issues and pull requests combined, and open bug reports were also updated that day. Apache Airflow 3.3.1 was released on 2026-08-12. The dates and active queue point to a heavily maintained project, while the queue size warns that users are buying into a large platform with many providers and upgrade paths.

Documentation is one of Airflow's strongest reasons to choose it. The README states its limits, lists supported databases and platforms, explains constraints, and points to separate guides for the core, provider packages, Docker images, and Helm chart. The release notes include migration consequences instead of a bare changelog. Airflow is the safe pick for an organization that needs a shared batch scheduler and can staff it. For a handful of simple jobs, its 151-package source install and production control plane are more machinery than the problem deserves.

Alternatives

ProjectWhat it isPick it when
Prefect gh↗A Python workflow orchestrator with a lighter path from local functions to managed or self-hosted execution.pick this instead when developers want ordinary Python control flow and less scheduler administration for a newer workflow estate.
DagsterA data orchestrator built around typed assets, lineage, and developer tooling.pick this instead when data assets and their dependencies are the main abstraction you want teams to manage.
Argo Workflows gh↗A Kubernetes-native workflow engine that runs container steps as cluster resources.pick this instead when every job already belongs in Kubernetes and Python-authored DAGs would add an unwanted control plane.

Sources

  1. Apache Airflow README
  2. Apache Airflow 3.3.1 release
  3. Apache Airflow issue and pull-request activity
  4. Apache Airflow documentation

More automation reviews

TikTokDownloader · goreleaser · obscura · ios_rule_script · background-agents · firstmate · the whole board →