Open-source workflow orchestrators compared

Apache Airflow, Dagster and Prefect are all Apache-2.0 at their core, but they differ in authoring model, operating footprint and what sits behind paid editions. This page shows which one fits which team.

On this page

Which open-source workflow orchestrators fit which teams

Choose Apache Airflow if your team already runs DAGs and needs the most established scheduler, Dagster if data assets and lineage should drive how pipelines are built, and Prefect if Python engineers want to wrap ordinary functions in flows with retries and event-based automations. Kestra suits teams that prefer YAML-defined workflows that react to events, but its license and edition terms were not available for this page, so confirm them with its maker before it goes on a shortlist. Any team still on Airflow 2 has a deadline: that line reached end of life on April 22, 2026, and gets no fixes. Plan the move to the 3.x line, where the current release is 3.3.2.

Airflow, Dagster and Prefect are all Apache-2.0 licensed at their core, so the open-source builds carry no license fee. The paid layers differ. Dagster+ adds role-based access control, SAML SSO, catalog search, column lineage, branch deployments, alerts and audit logs, all listed as Dagster+ features and absent from the free open-source Dagster. Prefect Cloud is the managed counterpart to self-hosted Prefect server, and Prefect's documentation says it adds RBAC, audit logs and SSO that the self-hosted server lacks. If SSO or audit logs are mandatory, price the managed tier or the internal identity work into your decision.

Self-hosting effort depends mostly on the metadata database and the components around the scheduler. Airflow's production guide recommends PostgreSQL or MySQL and warns that SQLite is for testing only. Dagster's open-source deployment runs one daemon for schedules and sensors, with code location servers limited to one replica each, and its storage defaults to SQLite. Prefect server also defaults to SQLite, and multi-server setups need PostgreSQL 14.9 or later, Redis and a load balancer. Run a proof of concept on your target database and identity setup before you commit.

Which orchestrator matches each team situation

This table maps five common team situations to the orchestrator that fits each one best, with the condition that makes the fit hold. Read the first column to find your situation, then check the condition before you rule out the alternatives. The main takeaway is that existing Airflow investment, Python-first authoring, and network isolation requirements each point to a different choice.

Team situationBest fitCondition and why
Existing Airflow estate with many DAGsApache Airflow (stay on Airflow 3)Fits when DAGs and operators already run in production. Airflow 2 reached end of life on April 22, 2026, so the migration to Airflow 3 (current patch 3.3.2) is the first task, not an optional upgrade. Airflow is Apache-2.0 with no paid edition from the project.
Python-first data team that wants asset-based lineageDagsterFits when pipelines are organized around tables and models rather than task sequences. Dagster declares assets as Python functions. Lineage, catalog search and column lineage are Dagster+ features, so confirm whether you need them in the open-source build or in the paid cloud.
Python flows with a self-hosted server and optional managed cloudPrefectFits when you want a self-hosted Prefect server with the option of Prefect Cloud later. The self-hosted server bundles the API, UI and state database, and needs PostgreSQL for production. RBAC, audit logs and SSO are documented as Prefect Cloud features, so plan for them if your audit requires them on-premises.
Team that prefers declarative YAML and event triggersKestraFits when workflows should be written as declarative definitions and started by events rather than Python code. Kestra is covered on this page as the YAML and event-driven option. Confirm its license, edition boundaries and self-hosting components directly with the project before you commit.
Platform team that must keep everything inside its own networkApache Airflow or self-hosted Dagster (open-source build)Fits when no orchestration control plane may leave your network. Both run self-hosted under open licenses. Dagster OSS documents Kubernetes with Helm, Docker and Amazon ECS deployments. Airflow needs PostgreSQL or MySQL for production, not SQLite. Confirm which paid-edition features your policy requires, since Dagster+ is a managed service.

Four orchestrators, their licenses and what each is built around

All four options belong to the same question: how to schedule, retry and observe data work in your own infrastructure. Airflow, Dagster and Prefect are Python-first and Apache-2.0 licensed, while Kestra centers on YAML and events. The cards below show what each is built around, where the paid layer sits, and the situation in which each is the stronger choice.

Apache Airflow

Airflow is an Apache Software Foundation project under Apache-2.0, and the project itself offers no paid edition. Its core model is the DAG, a directed graph of tasks defined in Python and run on a scheduler that supports more than one instance at a time. Airflow 2 reached end of life on April 22, 2026, so any inherited Airflow 2 estate needs an upgrade plan. Check that your metadata database is PostgreSQL or MySQL, since SQLite is for testing only. Choose Airflow when your team already runs Airflow 3 or has many existing DAGs to keep.

Dagster

Dagster is Apache-2.0 licensed and organizes work around assets, which are logical units of data such as tables or models declared as Python functions. Its paid layer, Dagster+, adds role-based access control, SAML SSO, catalog search, column lineage, branch deployments, alerts and audit logs, none of which are in the free open-source build. Open-source Dagster can run on Kubernetes with Helm, Docker or Amazon ECS. Choose Dagster when your work is organized around data products and lineage matters more than task-level scheduling.

Prefect

Prefect is Apache-2.0 licensed and defines workflows as Python flows and tasks with built-in retries, caching and event-based automations. The self-hosted Prefect server bundles the API, UI and state database, while Prefect Cloud adds RBAC, audit logs and SSO that the self-hosted server does not include. Production self-hosting needs PostgreSQL, and multi-server setups also need Redis and a load balancer. Choose Prefect when your team writes Python-first pipelines and wants a lighter operational footprint for the core engine.

Kestra

Kestra is built around declarative YAML workflows and event-driven triggers rather than Python DAG code. Its license must be confirmed with the vendor before this page is published, and so must the feature split between its open-source build and any paid tier. Confirm the license terms, the event triggers you need and the supported database and storage backends in your own environment. Choose Kestra when platform teams want non-Python authors to build workflows and event-driven triggers are central to the design.

How the open-source workflow orchestrators differ on capability

This table sets Apache Airflow, Dagster and Prefect side by side on license, release line, authoring, scheduling, metadata storage, multi-instance operation, execution model, paid editions and prerequisites. Where the researched facts do not settle a cell, the cell names what to confirm with the vendor. Treat the metadata database, multi-instance and prerequisite rows as the main drivers of operating effort in your own infrastructure.

CapabilityApache AirflowDagsterPrefect
LicenseApache-2.0. The project offers no paid edition of its own.Apache-2.0 for open-source Dagster. Dagster+ is a separate paid cloud service.Apache-2.0 for the framework and self-hosted server. Prefect Cloud is a managed service.
Current release lineAirflow 3.3.2. Airflow 2 reached end of life on April 22, 2026.Dagster 1.13.26, released October 9, 2026.Prefect 3.8.8, released October 6, 2026. The 2.x line still received 2.20.26 on September 2, 2026.
Authoring modelCode-defined workflows. Confirm the DAG authoring details your team will use against the Airflow 3 upgrade guide.Asset-based. Data assets such as tables or models are declared as Python functions.Python workflows with scheduling, caching, retries and event-based automations. Confirm specifics with Prefect.
Scheduling and backfillsScheduler supported. Confirm backfill behavior and limits for your Airflow 3.3.2 setup.Schedules, sensors and run queuing are run by the daemon. Confirm backfill support in the version you deploy.Scheduling is a core feature. Confirm backfill behavior with Prefect before relying on it.
Metadata database optionsPostgreSQL 14 to 18 or MySQL 8.0, 8.4 and Innovation releases. MariaDB and production SQLite are not supported.Run, event log and schedule storage default to SQLite and can use PostgreSQL.Defaults to SQLite. PostgreSQL is recommended for production.
Multi-instance schedulingMore than one scheduler can run at once, coordinated through database row-level locks.Webserver can run multiple replicas, but the daemon is single and each code location server runs one replica.Multi-server deployments need PostgreSQL 14.9 or later, Redis for event messaging and a load balancer.
Executor or deployment modelLocalExecutor, CeleryExecutor, KubernetesExecutor, EdgeExecutor and AWS Batch and ECS executors. Several can run together since 2.10.0.Open-source options include Kubernetes with Helm, Docker and Amazon ECS. Run launcher, coordinator and executor are swappable.Self-hosted server bundles an API, a UI and a database. Confirm the worker and work pool model for your target platform.
What the paid edition addsNothing from the Apache project. Any paid support comes from other vendors, so confirm terms with each.Dagster+ adds RBAC, SAML SSO, catalog search, column lineage, branch deployments, alerts and audit logs.Prefect Cloud adds RBAC, audit logs and SSO. Per Prefect's pricing page, Team lists $100 per user per month and SSO, while Enterprise adds object-level RBAC and multiple workspaces.
Self-hosting prerequisitesPython 3.10 to 3.14, Kubernetes 1.30 to 1.35 if used, and at least 4 GB of RAM recommended.Confirm the supported Python and Kubernetes versions for the release you deploy. Plan a PostgreSQL instance for production storage.Python 3.11 or later, plus PostgreSQL, and Redis and a load balancer for multi-server setups.

How Airflow, Dagster and Prefect author pipelines

Airflow, Dagster and Prefect start from different questions. Airflow asks you to declare tasks and the dependencies between them in a DAG, and a run is the scheduler executing that graph on a cadence. Dagster asks you to declare the data units your pipeline produces, such as tables or models, as Python functions called assets, and it derives the execution order from what each asset depends on. Prefect asks you to write ordinary Python functions decorated as flows and tasks, then adds retries, caching and event-based automations around them. Which model fits depends on whether your team thinks in jobs, in datasets or in function calls.

The author and the reviewer are different people in practice, and the model shapes who can do both. Airflow DAGs are usually written by data engineers and reviewed by platform staff who care about scheduler load and dependency wiring. Dagster assets tend to be reviewed by analytics engineers who know the tables, which makes lineage easier to discuss in code review. Prefect flows read like application code, so software engineers can own them. For testability, check whether your team can call a single asset or task function with test inputs and assert on output without a running scheduler. Ask each vendor for its testing guide and run one of your own pipelines through it before you commit.

Kestra takes a different route: pipelines are defined in YAML and triggered by events, not written as Python. That lowers the barrier for operators who do not write code, but it also moves logic into configuration that your reviewers must read carefully. This page does not assess Kestra's authoring model in depth. Read its documentation on flow definitions, task types and triggers, and have an engineer write a small flow that includes a retry and a conditional branch so you can judge how readable and testable it is for your team.

How scheduling, backfills and upgrades change the operating load

Scheduler design and upgrade policy often drive more day-to-day operating load than authoring style does. Airflow can run more than one scheduler at the same time, using database row-level locks to coordinate, which supports performance and resiliency but means your metadata database sizing and connection limits need to be planned for that. Open-source Dagster takes a different shape: a single daemon operates schedules, sensors and run queuing, and each code location server runs as one replica. Plan for that daemon as a component you must monitor and restart quickly, and confirm with Dagster how it behaves during an outage. Self-hosted Prefect server runs as a single API and UI unless you build a multi-server setup, which needs PostgreSQL 14.9 or later, Redis for event messaging and a load balancer.

Backfills are where scheduler design meets cost. For each option, confirm in a proof of concept how a backfill over a large historical window is launched, throttled and resumed, how it competes with live schedules for workers and database connections, and whether a failed partition can be rerun without reprocessing the rest. Ask each vendor or project for the exact configuration keys and limits in the version you plan to run, since these change between releases and are not covered by a single supplied fact here. Add the backfill test to your maintenance window checklist so its load is measured before production.

Upgrade risk is the largest recurring cost. Airflow 2 reached end of life on April 22, 2026 and gets no fixes, so any remaining Airflow 2 estate needs a dated migration plan, and Airflow 3 is the line to target. Its upgrade guide should be read against your DAG code before scheduling the change. Prefect's server documentation notes that old clients work with new servers, but new clients can be incompatible with old servers as fields are added to the REST API. Upgrade the server first in staging, then roll clients, and pin worker versions during the window so a mixed fleet is never left running unplanned.

How to choose and pilot an orchestrator in your own infrastructure

This sequence moves a team from an inventory of existing pipelines and skills to a tested pilot and a written scope, so the choice between Airflow, Dagner, Prefect and Kestra rests on evidence from your own environment rather than on feature lists alone.

  1. Inventory existing pipelines and team skills

    The data platform lead and two or three pipeline owners list every scheduled job, its upstream and downstream dependencies, its run frequency, and the languages and tools each job uses. Alongside that list, the team records which engineers can write Python, which know YAML-driven configuration, and who already operates Kubernetes. This step is complete when the inventory names each pipeline's owner, its failure impact, and the skills gap for each candidate orchestrator, so the shortlist is tested against real workloads rather than generic examples.

  2. Decide whether the paid managed layer is in scope

    The CIO or head of platform engineering decides, with the security lead, whether a managed control plane is acceptable for this data. Dagster's pricing page places role-based access control, SAML SSO, catalog search, column lineage, branch deployments, alerts and audit logs in Dagster+ rather than the open-source edition, and Prefect's Server documentation says RBAC, audit logs and SSO are Prefect Cloud features. Record the answer in writing. If the managed layer is out of scope, every access control and audit requirement must be met with the self-hosted build, which needs confirming in the pilot.

  3. Check metadata database and runtime prerequisites

    The platform engineer checks each candidate against the versions the vendors publish. Airflow 3.3.2 lists Python 3.10 to 3.14, PostgreSQL 14 to 18, MySQL 8.0, 8.4 and Innovation releases, and Kubernetes 1.30 to 1.35, and it does not support MariaDB as a metadata database. Prefect requires Python 3.11 or later, and its multi-server setup needs PostgreSQL 14.9 or later plus Redis and a load balancer. Confirm that your approved database engine, Python baseline and cluster version fall inside these ranges. The output is a pass or fail table per candidate, with any version gaps raised with the platform team before the pilot starts.

  4. Build the production database and scheduler topology

    The platform engineer stands up a non-production environment that matches the intended production shape, not a laptop setup. For Airflow this means PostgreSQL or MySQL in place of the SQLite default, which the production guide says is for testing only, and it means checking whether more than one scheduler is needed, since Airflow supports multiple schedulers through database row-level locks. For Dagster, check the single daemon and the one-replica limit on code location servers. For Prefect, confirm PostgreSQL in place of SQLite. The step closes when the environment starts, survives a restart of each component, and its backup and restore route has been written down.

  5. Pilot one representative pipeline with a backfill and failure path

    Two engineers, one who knows the business logic and one who will own the pipeline after handover, port a single representative pipeline to each shortlisted orchestrator. The pilot must include a scheduled run, a historical backfill over a fixed date range, and a deliberately induced failure with a retry and a rerun from the failed point. Compare how each tool expresses the asset or task graph, how it handles the backfill's concurrency and idempotency, and how a failed run is surfaced. The step is complete when each pilot has a short written log of what worked, what needed custom code, and where the team hit a wall.

  6. Compare run history, lineage and access control needs

    The security lead and the data governance owner check each pilot against the requirements gathered in step one. They look at how long run history is kept and where it is stored, whether lineage is produced by the orchestrator or must come from a catalog such as OpenMetadata or DataHub, and whether access control can be enforced with the open-source build or only in a paid tier. Mark every requirement as met in the open-source build, met only in a paid edition, or unconfirmed. The step is done when the matrix has no unconfirmed rows, or the unconfirmed rows are assigned to a named owner for follow-up with the vendor.

  7. Write the scope and request a quote

    The engagement lead writes a scope that names the chosen orchestrator and version, the number of pipelines in migration, the metadata database and cluster versions from step three, the managed or self-hosted decision from step two, the pilot acceptance criteria from steps five and six, and the items that remain unconfirmed. Ask for a written scope with deliverables and timelines agreed before work starts, since DeployOpen works on fixed scope. The quote should separate one-time work such as installation, hardening, migration and documentation from recurring work such as upgrades, patching and support, and it should state which party pays for any paid vendor licenses. DeployOpen does not publish prices, so the quote is derived from this written scope.

What buyers ask about cost, effort and self-hosting orchestrators

Does running Apache Airflow, Dagster or Prefect cost anything in license fees?

The core projects carry no license fee: Apache Airflow, Dagster and Prefect are all Apache-2.0 licensed, and Airflow has no paid edition from the project itself. Your cost is the infrastructure you run them on, the people who install, upgrade and monitor them, and any paid managed layer you choose. Dagster and Prefect offer paid cloud tiers, and Dagster lists RBAC, SAML SSO, column lineage and audit logs as Dagster+ features rather than part of open-source Dagster. Ask any vendor or partner to split a quote into one-time setup work and recurring support, upgrades and hosting.

What actually drives the effort to self-host an orchestrator?

Effort follows the metadata database, the executor and the number of teams and pipelines. Airflow's production guidance warns against the default SQLite backend and recommends PostgreSQL or MySQL, and its prerequisites list supported Python, PostgreSQL, MySQL and Kubernetes versions that you must track. Dagster's open-source deployment runs a webserver, a single daemon and code location servers, with storage that defaults to SQLite and can move to PostgreSQL. Prefect's self-hosted server needs PostgreSQL for production and, for multi-server setups, Redis and a load balancer. Each added executor, environment or high-availability requirement adds components you must operate.

Can a small platform team run one of these orchestrators on its own?

A small team can run a single orchestrator on its own when the workload is modest, the database and runtime are standard, and someone owns upgrades. The risk sits in the parts that are not optional: backups of the metadata database, patching the runtime, securing the UI and handling version changes. Prefect's documentation notes that new clients can be incompatible with old servers, so upgrade order matters. If your team cannot cover on-call for scheduler or database problems, plan for a retainer or a managed option before go-live rather than after the first incident.

How long does a pilot of a self-hosted orchestrator take?

No duration is fixed by the vendor documentation for a pilot, so treat any timeline as something to agree in writing. The length depends on how many pipelines you migrate, how many data sources need credentials and network access, whether you need SSO and RBAC from the start, and how much of your environment is in place. DeployOpen works on fixed-scope engagements, where scope, deliverables and timelines are agreed before work starts. Ask for a written scope with a named set of pipelines and exit criteria, and ask what changes the schedule.

What does your team need to provide during an orchestrator implementation?

Expect to provide access and decisions, not just budget. Typical inputs include cloud or data center accounts where the platform will run, network paths to data sources, a PostgreSQL or MySQL instance that meets the vendor's version list, identity provider details for SSO, and named owners who can approve pipeline changes and production access. Your security team should also confirm secrets handling, logging destinations and backup targets. Ask the implementation partner to list each input and owner in the written scope so gaps show up before work begins.

When is a paid managed orchestration layer worth pricing?

A paid managed layer is worth pricing when the features it adds solve a problem you already have, such as SSO and RBAC across many teams, audit logs for compliance evidence, or lineage across many assets. Dagster+ bundles RBAC, SAML SSO, catalog search, column lineage, branch deployments and audit logs, and Prefect Cloud adds RBAC, audit logs and SSO that self-hosted Prefect server does not include. Compare those features against what you would have to build and operate yourself, and ask each vendor for current pricing for your user count, since the figures on vendor pricing pages can change.

Do we need a migration plan if we still run Airflow 2 workloads?

Yes, plan the migration now. Airflow 2 reached end of life on April 22, 2026, and after that it receives no fixes or support, according to the Airflow version support table. Airflow 3 was first released on April 22, 2025, and the current patch release is 3.3.2. Airflow 3.0.0 also dropped the hybrid CeleryKubernetesExecutor and LocalKubernetesExecutor, so check your executor setup before upgrading. Inventory your DAGs, plugins and connections, test them on Airflow 3, and agree a cutover window with the teams that depend on them.

What does a fixed-scope engagement with DeployOpen cover?

A fixed-scope engagement covers the work named in a written scope: the platform to plan, implement, integrate, harden, back up, document and hand over, along with the deliverables and timelines agreed before work starts. DeployOpen plans, implements, customizes, integrates, hardens, backs up, upgrades, documents and supports self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks. Ongoing support, upgrades and continuous testing are available as retainers. DeployOpen does not publish a price list, so a quote follows from the written scope. Ask for the list of excluded items too.

How DeployOpen scopes orchestrator selection and implementation

DeployOpen plans and implements self-hosted orchestrators inside your own cloud accounts, data centers or air-gapped networks. Engagements start with a written scope that fixes deliverables and timelines before any work begins, so the orchestrator choice is tested against your actual pipelines, identity rules and hosting constraints.

How we scope

  • Inventory existing pipelines, schedules, backfill needs and the teams that author and operate them.
  • Confirm hosting target, database backend, identity requirements and which paid features your team actually needs.
  • Agree the orchestrator choice, deliverables and timeline in writing before implementation starts.

How we build

  • Deploy the chosen orchestrator with the production metadata database, scheduler or daemon layout and executor you have agreed.
  • Port representative pipelines, configure connections and secrets, and test scheduling, retries and backfills against your data.
  • Harden the deployment and run security testing on the orchestrator, its web interface and its integrations.

How we hand over

  • Document the architecture, upgrade path, backup and restore steps, and the operating runbook for your platform team.
  • Walk your engineers through authoring patterns and deployment workflows so they can extend pipelines without us.
  • Provide the written record of scope, configuration and test results for your own review and any compliance assessment.

How we support

  • Offer ongoing support, upgrades and continuous testing as a retainer if your team wants DeployOpen to keep operating the platform.
  • Plan version upgrades around the vendor's published support windows, which you should confirm for the release you choose.
  • Quote follows from the written scope, so ask for the cost of each deliverable, the recurring retainer and any licensing you will pay the vendor directly.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.