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

# Local development

> Run the Rust Core, React Console and isolated local fixtures.

The active API lives in `crates/control-plane`. `apps/console` contains the Vite React Console and account UI. The previous TypeScript platform applications are archived under `legacy/` and excluded from the active Bun workspace.

## Install and start

> [!NOTE]
>
> These commands require a native source revision containing `crates/control-plane` and `Tiltfile`. Check the revision after checkout; an older TypeScript branch has different setup commands.

Use the repository's pinned Rust toolchain and Bun 1.4.3, with Docker, Tilt and `protoc` available:

```sh theme={null}
bun install --frozen-lockfile
bun run dev
```

Tilt prepares restricted local database roles and native migrations, then starts the Rust services and the browser development servers. Console uses port 3121, account pages use `localhost:3125`, and Core uses 3130. Private local state belongs in `.dev-local/`. Consult `crates/control-plane/README.md` for first-run configuration and local HTTPS.

For individually configured processes, run these in separate terminals:

```sh theme={null}
bun run dev:api
bun run dev:console
bun run dev:auth
```

The separate public website uses `bun run dev:web`.

## Verify changes

```sh theme={null}
cargo fmt --all
bun run quality
bun run test:distribution
```

Use the quality gate required by the matching source revision. Its Rust, frontend and contract checks are separate from opt-in browser, database and cluster acceptance. Use disposable local PostgreSQL and Kubernetes fixtures only. Never use customer data, production configuration or real mail in tests; local mail goes only to Mailpit.

## Repository map

| Directory | Responsibility |
| - | - |
| `crates/` | Native platform, protocol, persistence and executor services |
| `apps/console` | React Console and canonical account screens |
| `plugins/` | Compatibility/test/UI snapshots; independent repositories own releases |
| `apps/website` | Separate public website and CMS |
| `legacy/` | Retired TypeScript platform and release tooling |
| `deploy/` | Native deployment artifacts and plugin workloads |

Filesystem changes do not alter OAuth issuers, MCP audiences or registered clients.

The loopback bootstrap fixture does not reproduce every hosted Managed Auth, provider or release gate. Current hosted identity is [Neon Managed Auth with Core security](https://docs.spitzli.cloud/developers/auth-adapters.md). Source: `Tiltfile`, [root commands](https://github.com/spitzli/cloud/blob/main/package.json) and native runtime (`crates/control-plane`).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.