Projects and workspaces
Dagster uses several related terms to describe how your code is organized and deployed. While they may sound similar, each has a distinct meaning and purpose in the lifecycle of a Dagster deployment.
Projects
A Dagster project follows the general convention for a Python project packaged for distribution: a structured collection of source files, libraries, and configuration used for a specific application. Additionally, Dagster projects contain Dagster definitions.
The recommended Dagster project layout looks like this:
my-project/
├── pyproject.toml
├── README.md
├── src
│ └── my_project
│ ├── __init__.py
│ ├── definitions.py
│ └── defs
│ └── __init__.py
├── tests
│ └── __init__.py
└── uv.lock
Creating projects
While Dagster is flexible about how you organize your code, we provide an opinionated starting point with the create-dagster CLI. See Creating Dagster projects to learn how to create Dagster projects from the CLI.
Deploying projects
To make your Dagster project deployable to Dagster+, you will need to create additional configuration files. For more information, see the Dagster+ CI/CD guide.
Workspaces
Workspaces allow you to manage and orchestrate multiple Dagster projects together. This is useful when:
- Different teams maintain separate Dagster projects.
- Projects have distinct dependencies or environments.
- You want to deploy multiple projects in a coordinated way.
Creating workspaces
As with projects, Dagster provides an opinionated starting point for workspaces with the create-dagster CLI. See Creating workspaces to manage multiple projects to learn how to create Dagster workspaces from the CLI.