Skip to main content

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.