Learn about Dagster's core concepts and how to use them in your data platform.
An asset is an object in persistent storage, such as a table, file, or persisted machine learning model. A software-defined asset is a Dagster object that couples an asset to the function and upstream assets used to produce its contents.
Ops are the core unit of computation in Dagster. They typically perform relatively simple tasks, such as executing a database query or sending a Slack message.
A graph is a set of interconnected ops or sub-graphs. While individual ops typically perform simple tasks, ops can be assembled into a graph to accomplish complex tasks.
Jobs are the main unit of execution and monitoring in Dagster. The core of a job is a graph of ops connected via data dependencies.
Schedules launch runs on a fixed interval, while sensors allow you to do so based on an external state change. These features also support partitioning and backfilling.
IO Managers are user-provided objects that store asset and op outputs and load them as inputs to downstream assets and ops.
Dagster provides a configuration system that allows you to document, schematize, and error-check your configuration.
Workspaces are collections of repositories and info about where to find them. Dagster tools like Dagit and the Dagster CLI use workspaces to load your code.
Resources enable you to separate logic from external dependencies, making developing and testing possible in multiple environments.
Dagit is a web-based interface for viewing and interacting with Dagster objects.
The GraphQL API allows you to interact programmatically with Dagster.
The Dagster type system provides gradual, opt-in typing for the inputs and outputs of assets and ops.
Learn more about Dagster types.
A rich, extensible logging system, Dagster's built-in logger tracks all execution events. Loggers can also be customized to fit your infrastructure.
Dagster enables you to build testable and maintainable data applications. It provides ways to allow you unit-test your data applications, separate business logic from environments, and set explicit expectations on uncontrollable inputs.