> ## Documentation Index
> Fetch the complete documentation index at: https://anaconda.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ProjectFlow

Inherit from `ProjectFlow` instead of Metaflow's `FlowSpec`:

```python theme={null}
from obproject import ProjectFlow

class MyFlow(ProjectFlow):
    @step
    def start(self):
        self.prj.register_data("dataset", "data")
        self.next(self.end)
```

### Configuration

ProjectFlow reads configuration from two files:

**`obproject.toml`**: Project identity and settings.

```toml theme={null}
project = "fraud-detection"

[dev-assets]
branch = "main"  # Read assets from main branch during local dev

[dependencies]
include_pyproject_toml = true  # Auto-apply pyproject.toml deps (default: true)
```

Section

Key

Default

Description

(top-level)

`cicd_user`

`"${project//_/-}-cicd"`

Override the machine-user name CI uses when calling `outerbounds service-principal-configure`. See [CI/CD integration](https://anaconda.com/docs/platform/guides/deploy/cicd-integration.md#machine-user-naming-convention) for the convention.

`[dev-assets]`

`branch`

—

Branch to read assets from during local development

`[dependencies]`

`include_pyproject_toml`

`true`

Auto-apply `@pypi_base` from pyproject.toml

**`pyproject.toml`**: Python dependencies applied through `@pypi_base`.

```toml theme={null}
[project]
dependencies = [
    "scikit-learn>=1.3.0",
    "pandas>=2.0.0",
]
```

### prj property

`self.prj` returns a `ProjectContext` with access to all project utilities. It is initialized lazily on first access.

**prj.project** `string`

The project name from the project configuration.

**prj.branch** `string`

The current write branch, from Metaflow `@project`.

**prj.read\_branch** `string`

The branch used for reading assets. Can differ from `prj.write_branch` during local development with `[dev-assets]` configured.

**prj.write\_branch** `string`

The branch used for writing assets.

**prj.asset** `string`

The low-level asset client.

**prj.evals** `string`

The evaluation logger.
