dagster is a free, open source machine learning infrastructure project written in Python and released under Apache-2.0. It has 16,169 GitHub stars, 2,294 forks and 2,589 open issues, and was last pushed 4 hours ago. On this registry it ranks #11 of 57 tracked projects in Machine Learning Infrastructure, with 5 head-to-head comparisons available. It gained 16 stars over the last 3 tracked days.

What is dagster?

Dagster is a cloud-native data pipeline orchestrator written in Python and released under the Apache-2.0 licence, built for data engineers, data scientists, and machine learning teams who declare the tables, data sets, models, and reports their pipelines should produce and need those assets tested, observable, and kept up to date from local development through production.

What it is

Dagster is an orchestration platform for the development, production, and observation of data assets. It lives in the Python ecosystem, is distributed on PyPI, and officially supports Python 3.9 through Python 3.14. The programming model is declarative: an engineer writes ordinary Python functions and marks them with the @dg.asset decorator, describing the artifacts they want to exist rather than the sequence of jobs that happen to create them. Dagster then determines when to run those functions and keeps the resulting assets current. The README example shows this with three assets — country_populations returning a pandas DataFrame, continent_change_model returning a scikit-learn LinearRegression, and continent_stats depending on both — loaded into the project's web UI as a graph.

The concrete problem it addresses is the gap between running tasks and owning outputs. Pipelines can be written purely as collections of tasks, with no first-class notion of the assets those tasks produce, which makes it difficult to know what exists, whether it is fresh, and where it came from. Dagster puts the asset at the centre of the model instead, so lineage, metadata, cataloguing, and diagnostics attach to named objects such as tables, data sets, machine learning models, and reports. It is designed to be used at every stage of the data development lifecycle, spanning local development, unit tests, integration tests, staging environments, and production.

Key capabilities

  • Declarative asset definitions using the @dg.asset decorator, with dependency wiring expressed through typed Python function arguments as shown by continent_stats consuming both country_populations and continent_change_model.
  • A web UI that renders the asset graph defined in Python.
  • Integrated lineage and observability, plus a unified control plane for centralising metadata, diagnostics, and cataloguing in one tool.
  • Testability built into the development lifecycle, supporting unit tests, integration tests, and CI/CD practices that surface data quality issues and catch bugs early.
  • A robust multi-tenant, multi-tool orchestration engine intended to scale both technically and organisationally.
  • A growing library of integrations for popular data tools, with deployment onto the operator's own infrastructure.
  • Command-line and server components shipped as separate packages, installed together via dagster, dagster-webserver, and dagster-dg-cli.

Who uses it and how

  • Teams running the full development lifecycle, using the same asset definitions across local development, unit tests, integration tests, staging, and production rather than maintaining separate pipeline code per environment.
  • Organisations adopting CI/CD practices for data, building reusable components and flagging data quality problems before they reach downstream consumers.
  • Multi-tenant, multi-tool environments where several teams and several external systems share one orchestration engine and one metadata control plane.
  • Data teams that already run established data tools and want to integrate rather than replace them, deploying to infrastructure they control.
  • A community of data practitioners who share knowledge through the project's Slack workspace, GitHub Discussions, newsletter, blog, and other channels.

Getting started

Dagster installs from PyPI with uv add dagster dagster-webserver dagster-dg-cli. The project points new users at the documentation site and its hands-on ETL pipeline tutorial and quickstart guide.

How it compares

The available facts do not name other orchestration products, whether commercial or open source, and provide no list of paid tools that Dagster replaces. It stands alone in this registry on the evidence given: an Apache-2.0 licensed Python project distributed on PyPI, with deployment left to the operator's own infrastructure rather than tied to a vendor account.

When to use it — and when not to

Dagster fits teams working in Python who want assets, lineage, and metadata managed in one place and are willing to run the orchestrator and its web server on their own infrastructure. The README does not document the backing services a self-hoster must operate — no database, object storage, or mail configuration is described — so the operational footprint has to be established from the documentation rather than the repository front page. The project is Python-only, and with 2,589 open issues and no release information in the supplied facts, teams outside the Python ecosystem or wanting a small, statically stable dependency should look carefully before committing.

project readme (upstream, from github) — read inline
dagster logo

Dagster is a cloud-native data pipeline orchestrator for the whole development lifecycle, with integrated lineage and observability, a declarative programming model, and best-in-class testability.

It is designed for developing and maintaining data assets, such as tables, data sets, machine learning models, and reports.

With Dagster, you declare—as Python functions—the data assets that you want to build. Dagster then helps you run your functions at the right time and keep your assets up-to-date.

Here is an example of a graph of three assets defined in Python:

import dagster as dg
import pandas as pd

from sklearn.linear_model import LinearRegression


@dg.asset
def country_populations() -> pd.DataFrame:
    df = pd.read_html("https://tinyurl.com/mry64ebh")[0]
    df.columns = ["country", "pop2022", "pop2023", "change", "continent", "region"]
    df["change"] = df["change"].str.rstrip("%").astype("float")
    return df


@dg.asset
def continent_change_model(country_populations: pd.DataFrame) -> LinearRegression:
    data = country_populations.dropna(subset=["change"])
    return LinearRegression().fit(pd.get_dummies(data[["continent"]]), data["change"])


@dg.asset
def continent_stats(
    country_populations: pd.DataFrame, continent_change_model: LinearRegression
) -> pd.DataFrame:
    result = country_populations.groupby("continent").sum()
    result["pop_change_factor"] = continent_change_model.coef_
    return result

The graph loaded into Dagster's web UI:

An example asset graph as rendered in the Dagster UI

Dagster is built to be used at every stage of the data development lifecycle - local development, unit tests, integration tests, staging environments, all the way up to production.

Quick Start:

If you're new to Dagster, we recommend checking out the docs or following the hands-on tutorial.

Dagster is available on PyPI and officially supports Python 3.9 through Python 3.14.

uv add dagster dagster-webserver dagster-dg-cli

Documentation

You can find the full Dagster documentation here, including the Quickstart guide.


Key Features:

image

Dagster as a productivity platform

Identify the key assets you need to create using a declarative approach, or you can focus on running basic tasks. Embrace CI/CD best practices from the get-go: build reusable components, spot data quality issues, and flag bugs early.

Dagster as a robust orchestration engine

Put your pipelines into production with a robust multi-tenant, multi-tool engine that scales technically and organizationally.

Dagster as a unified control plane

Maintain control over your data as the complexity scales. Centralize your metadata in one tool with built-in observability, diagnostics, cataloging, and lineage. Spot any issues and identify performance improvement opportunities.


Master the Modern Data Stack with integrations

Dagster provides a growing library of integrations for today’s most popular data tools. Integrate with the tools you already use, and deploy to your infrastructure.


image

Community

Connect with thousands of other data practitioners building with Dagster. Share knowledge, get help, and contribute to the open-source project. To see featured material and upcoming events, check out our Dagster Community page.

Join our community here:

Contributing

For details on contributing or running the project for development, check out our contributing guide.

License

Dagster is Apache 2.0 licensed.

Frequently asked questions

Is dagster free to use?

dagster is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does dagster do?

An orchestration platform for the development, production, and observation of data assets.

What is dagster written in?

dagster is primarily written in Python. Its source is publicly available at https://github.com/dagster-io/dagster, and it has 16,169 GitHub stars.