
Dagster
A Python data orchestrator built around assets: you declare the tables, files and models that should exist, and Dagster works out what to run.
- What it is
- ETL & ELT pipelines,Workflow orchestration
- Type
- Open source
- Made by
- Prefect Technologies (acquired Dagster Labs, formerly Elementl, in 2026)
- License
- Apache 2.0; Dagster+ (the hosted service) is proprietary
- Facts checked
- 6 October 2026
What it is
In Dagster you write Python functions decorated with @asset. Each one produces a table, file or model, and its parameters name the assets it reads, so Dagster builds an asset graph of what depends on what. Running a function and storing its result is a materialization. Assets can be split into partitions, such as one per day or per region, so a backfill only reruns the slices you pick. Schedules, sensors (functions that check for new files or events and request runs) and declarative automation conditions such as “update whenever an upstream asset changes” decide when things run. Integrations load whole tools into the graph: each dbt model, Fivetran or Airbyte table and Sling replication becomes an asset with its own history.
A self-hosted deployment has three long-running services. The webserver serves the UI and a GraphQL API, the daemon evaluates schedules and sensors and takes runs off the queue, and code location servers load your definitions in their own processes. The run launcher starts each run as a subprocess, a Docker container, a Kubernetes Job or an ECS task, and runs, event logs and schedule state go to SQLite by default or PostgreSQL or MySQL in production. Dagster+ hosts the control plane for you: with Hybrid your code runs on an agent in your own cloud with no compute charge; with Serverless it runs on Dagster’s machines at $0.01 a minute. Plans start at $10 a month (Solo, one user) or $100 a month (Starter, up to three users), plus $0.040 or $0.035 per credit, where every asset materialization and every op run is one credit (prices checked October 6, 2026).
Why teams pick it
- The asset graph shows lineage, freshness and the last run of every table, which a list of task runs doesn’t
- Partitions and backfills are built in: rerun one day, one region or a whole range, as one run per partition or one run for the range
- Model-level dbt integration: each dbt model is its own asset and dbt tests become asset checks
- Assets are plain Python functions, so you can run and unit-test them locally before deploying
- The open-source core is Apache 2.0, and run launchers and storage are swappable, from a laptop with SQLite to Kubernetes with PostgreSQL
Watch out for
- Dagster+ bills per materialization: 100 hourly-partitioned assets make 72,000 credits a month, about $2,520 on Starter before any compute
- Prefect announced it was buying Dagster Labs in July 2026 and the founder left; Prefect says Dagster keeps its name and licence, but the long-term roadmap is now Prefect’s
- Self-hosting means running the webserver, a single daemon (it can’t be replicated) and a PostgreSQL or MySQL database
- Built for batch data pipelines in Python, not for one run that waits days on a person; that needs durable timers and signals like Temporal’s
- Large partition sets slow the UI; Dagster recommends at most 100,000 partitions per asset
Alternatives
What all etl & elt pipelines have in common →
dbtOpen sourceSQL `select` statements in git, built into warehouse tables in dependency order, with tests and docs alongside.
EstuaryCommercialA managed data-movement platform that captures changes from databases and SaaS sources into collections kept as JSON files in your own bucket, then keeps warehouses and other systems in sync, in real time or on a schedule.
FivetranCommercialManaged connectors that copy data from SaaS apps, databases and files into your warehouse or lake, billed by the rows that change each month.
MeltanoOpen sourceA command-line ELT tool that runs Singer taps and targets from a `meltano.yml` project kept in git.
OLakeOpen sourceAn open-source tool in Go that copies databases, Kafka topics and S3 files into Apache Iceberg tables (or plain Parquet), with full loads, incremental syncs and CDC, and no Kafka, Debezium, Spark or Flink in between.How it fits with other technologies
What Dagster uses
- Dagsterruns each model as its own asset fromdbt
- Dagstertriggers syncs and tracks tables fromFivetran
- Dagsterstores asset outputs as tables inSnowflake
- Dagsterkeeps runs and event logs inPostgreSQL
- Dagsterlaunches each run as a Job onKubernetes
- Dagstercan launch each run in a container withDocker
- Dagstercan store compute logs inAmazon S3
Two daily-partitioned assets: one on a schedule, one that follows it · python
import dagster as dg
import pandas as pd
daily = dg.DailyPartitionsDefinition(start_date="2026-01-01")
@dg.asset(partitions_def=daily)
def raw_orders(context: dg.AssetExecutionContext) -> pd.DataFrame:
day = context.partition_key # e.g. "2026-10-05"
return pd.read_parquet(f"s3://acme-raw/orders/{day}.parquet")
# the parameter name makes raw_orders an upstream dependency
@dg.asset(partitions_def=daily, automation_condition=dg.AutomationCondition.eager())
def daily_revenue(raw_orders: pd.DataFrame) -> pd.DataFrame:
return raw_orders.groupby("country", as_index=False)["amount"].sum()
orders_job = dg.define_asset_job("orders_job", selection=[raw_orders], partitions_def=daily)
defs = dg.Definitions(
assets=[raw_orders, daily_revenue],
schedules=[dg.build_schedule_from_partitioned_job(orders_job, hour_of_day=2)],
)
# dagster dev -f pipeline.py (UI and daemon on http://localhost:3000)Dagster, Apache Airflow and Temporal#
All three run steps in order and retry failures, but they track different things. Dagster tracks data assets, Airflow tracks task runs in DAGs, and Temporal records every step of long-running application code.
| Dagster | Apache Airflow | Temporal | |
|---|---|---|---|
| Unit you define | Assets: functions that produce a table, file or model | Tasks grouped into DAGs; since 3.0, assets as scheduling triggers | Workflows written as code, with side effects in activities |
| What it knows about data | Lineage, partitions and the last materialization of each asset | Asset URIs as strings: “makes no assumptions about the content or location of the data” | Nothing: it stores the workflow’s event history |
| Failure handling | Op retries; run retries re-execute from the failed step | Task retries; backfills run inside the scheduler since 3.0 | Replays the event history on another worker and continues from the same line |
| Long waits on people or events | Sensors poll and start new runs | Sensors and event-driven scheduling start new runs | Durable timers and signals inside one running workflow |
| Typical job | Batch and ELT pipelines, dbt projects, ML pipelines | Batch pipelines and scheduled jobs | Order flows, payments, AI agents |
| Licence and steward | Apache 2.0; Prefect (Dagster Labs) | Apache 2.0; Apache Software Foundation | MIT; Temporal Technologies |
| Managed options | Dagster+ (Serverless or Hybrid) | Amazon MWAA, Google Cloud Composer and others | Temporal Cloud |
- Dagster publishes an Airflow comparison and Airlift, a tool to observe Airflow DAGs from Dagster and move them over gradually; that page is the vendor’s own view.
Dagster+ plans#
List prices checked October 6, 2026. Every asset materialization and every op that runs counts as one credit. Hybrid is on every plan; SSO, SAML and audit logs are Pro only.
| Solo | Starter | Pro | |
|---|---|---|---|
| Base price | $10 a month | $100 a month | Contact sales |
| Per credit | $0.040 | $0.035 | Custom |
| Serverless compute | $0.010 a minute | $0.010 a minute | Custom |
| Users, code locations, deployments | 1, 1, 1 | Up to 3, 5, 1 | Unlimited |
| Hybrid (your own compute) | No compute charge | No compute charge | Custom |
- Serverless runs get 4 vCPUs, 16 GB of RAM and 128 GB of disk on a single node, with daily caps of 100 GB of bandwidth and 4,500 step-minutes. Heavy or multi-node work belongs on Hybrid.
See it in a real stack
No architecture uses Dagster yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from2018–2026
Through the 2010s, many data teams ran their pipelines as what Pete Hunt, a Facebook colleague of Dagster’s founder, called “a rat’s nest of cron jobs and Python scripts”, often put into production with minimal or no tests and monitoring. Nick Schrock, a former Facebook engineer listed among the original contributors to the GraphQL specification, wrote Dagster’s first line of code in 2018 and founded a company, Elementl, to build it. The first release went to PyPI that June under the Apache 2.0 licence.
Dagster Cloud, a hosted control plane, was announced in December 2021. Dagster 1.0 followed on August 5, 2022, with stable APIs and software-defined assets: instead of describing tasks, you describe the tables and files that should exist. Elementl raised a $33 million Series B in May 2023 and renamed itself Dagster Labs that August, because Dagster was its only product.
On July 13, 2026, Schrock announced that Prefect, maker of another Python workflow orchestrator, was acquiring Dagster Labs. About 40 staff joined Prefect and Schrock moved on. Prefect says Dagster keeps its name, its open-source licence and Dagster+.
Why it’s built this way
- Assets, not tasks, as the unit of work
- Task-based orchestrators show whether pipelines ran, not the state of the tables they produce. Declaring assets in code gives lineage and lets Dagster materialize only what is missing or out of date.
- Pipelines as ordinary, testable Python
- Data code often went to production untested. Plain functions with typed inputs can be run and unit-tested on a laptop, without a scheduler and workers.
- Swappable storage, run launchers and executors
- The same definitions run as subprocesses with SQLite on a laptop and as Kubernetes Jobs with PostgreSQL in production; only
dagster.yamlchanges. - Open core with a hosted control plane
- The orchestrator stayed Apache 2.0, and the company sells Dagster Cloud (now Dagster+), whose Hybrid mode keeps customers’ code and data in their own cloud.
Timeline
- 2018
Schrock starts Dagster and Elementl; first PyPI release in June
- 2021
Dagster Cloud announced in December
- 2022
Dagster 1.0 in August, with software-defined assets
- 2023
$33M Series B in May; Elementl becomes Dagster Labs in August
- 2026
Prefect announces it is acquiring Dagster Labs in July; Schrock moves on
- Dagster blog: Pete Hunt, my path to Elementl (Jun 2022)
- graphql-spec package.json: contributors (Lee Byron, Nicholas Schrock, Daniel Schafer)
- Dagster blog: Dagster 1.0 (Aug 2022; first line of code four years earlier)
- PyPI: dagster release history (0.1.0rc1, June 2018)
- Dagster blog: Introducing Dagster Cloud (Dec 2021)
- Dagster blog: Elementl raises $33M Series B (May 2023; founded 2018 by Nick Schrock)
- Dagster blog: Introducing Dagster Labs (Aug 2023)
- Dagster blog: Nick Schrock, Prefect is acquiring Dagster (Jul 2026)
- PrefectHQ/prefect on GitHub (a Python workflow orchestration framework)
Sources32 · facts checked 6 October 2026
- Dagster docs: Assets (definitions, materialization, dependencies)
- Dagster blog: Software-defined assets
- Dagster docs: Partitioning assets (types, 100,000 partition recommendation)
- Dagster docs: Backfilling data (per-partition and single-run backfills)
- Dagster docs: Sensors
- Dagster docs: Schedules
- Dagster docs: Declarative Automation
- Dagster docs: OSS deployment architecture (webserver, daemon, code locations)
- Dagster docs: Run launchers
- Dagster docs: Run retries (re-execute from failure)
- Dagster docs: dagster.yaml reference (SQLite, PostgreSQL, MySQL storage; S3 compute logs)
- Dagster docs: dbt integration (models as assets, tests as asset checks)
- Dagster docs: Fivetran integration
- Dagster docs: Airbyte component
- Dagster docs: Sling component
- Dagster docs: Snowflake integration
- Dagster docs: Dagster+ Hybrid deployment
- Dagster docs: Dagster+ Serverless (resources and limits)
- Dagster+ pricing (plans, credits, Serverless compute)
- Dagster: Dagster vs Airflow (vendor comparison, Airlift)
- Dagster: Prefect and Dagster (name, licence and Dagster+ continue)
- dagster-io/dagster on GitHub (Apache 2.0)
- Apache Airflow: Project history
- Apache Airflow docs: Tasks (retries)
- Apache Airflow docs: Sensors
- Apache Airflow docs: Assets
- Apache Airflow blog: Airflow 3.0 is here (Apr 2025)
- apache/airflow on GitHub (Apache 2.0)
- AWS: Amazon Managed Workflows for Apache Airflow
- Google Cloud docs: Cloud Composer overview
- Temporal docs: Python durable timers
- Temporal docs: Signals, Queries and Updates