Skip to main content

Creating a dg project

info

dg and Dagster Components are under active development. You may encounter feature gaps, and the APIs may change. To report issues or give feedback, please join the #dg-components channel in the Dagster Community Slack.

The create-dagster CLI allows you to create a special type of Python package, called a project, that defines a Dagster code location.

Prerequisites

Before creating a project, you must install create-dagster. If you're using uv, you can run create-dagster using uvx, without needing to install it first.

Creating a project

uvx create-dagster project my-project

Project structure

The create-dagster project command creates a directory with a standard Python package structure with some additions:

tree
.
├── pyproject.toml
├── src
│   └── jaffle_platform
│   ├── __init__.py
│   ├── components
│   │   └── __init__.py
│   ├── definitions.py
│   └── defs
│   └── __init__.py
├── tests
│   └── __init__.py
└── uv.lock

6 directories, 7 files
tip

To use tree, install it with brew install tree (Mac), or follow the installation instructions.

  • The Python package my-project lives in src/my-project and contains the deployable code that defines your Dagster pipelines.
  • my-project/defs will contain your Dagster definitions.
  • my-project/lib is where you will define custom component types, and optionally other code you wish to share across Dagster definitions.
  • my-project/definitions.py is the entry point that Dagster will load when deploying your code location. It is configured to load all definitions from my-project/defs. You should not need to modify this file.
  • tests is a separate Python package defined at the top level (outside src). It should contain tests for the my-project package.
  • pyproject.toml is a standard Python package configuration file. In addition to the regular Python package metadata, it contains a tool.dg section for dg-specific settings.
  • uv.lock is the lockfile for the Python package manager uv. dg projects use uv by default. For more information, see uv integration.