What changes when you think in assets
Dagster (1.10+ as of April 2026) is the orchestrator that asks "what data assets do you produce?" instead of "what tasks do you run?" An asset is a logical data object — a table, a Parquet directory, an ML model, a report — that gets materialized by a function. The DAG falls out of the dependency graph between assets, automatically.
This sounds like a small shift. In practice it changes the conversation. "Orders is stale because the upstream customers asset hasn't refreshed since Tuesday" is a sentence Dagster's UI lets you say; in Airflow you'd be looking at task statuses and inferring what they mean for the data.
The shape of a Dagster project
- Assets — Python functions decorated with
@asset. Each one returns the materialized object (or writes it via an IO manager). - IO Managers — pluggable strategies for how assets are read and written (Parquet on S3, Postgres, in-memory, etc).
- Resources — reusable config (database connections, API clients) injected into assets.
- Sensors / schedules — when assets should be re-materialized.