What changes when you think in assets
Dagster (1.13 as of August 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.