# Options Reference (/docs/cli/options)



## General Options [#general-options]

### `--yes, -y` [#--yes--y]

Use default configuration and skip interactive prompts. Any flags you provide are merged over the defaults.

```bash
uvx tristack --yes
uvx tristack my-api --yes --database postgres
```

### `--dry-run` [#--dry-run]

Validate configuration, compatibility, and directory handling without writing files. The CLI still prints the resolved stack and the reproducible command.

```bash
uvx tristack my-api --yes --dry-run
```

### `--verbose` [#--verbose]

Show detailed result information in JSON format after project creation.

```bash
uvx tristack my-api --yes --verbose
```

### `--yolo` [#--yolo]

Bypass validations and compatibility checks. Not recommended for normal use.

```bash
uvx tristack --yolo
```

### `--language <lang>` [#--language-lang]

Programming language for the backend:

* `python`: Python backend
* `go`: Go backend
* `rust`: Rust backend

```bash
uvx tristack --language rust --framework axum
```

### `--framework <framework>` [#--framework-framework]

Backend framework, scoped to the selected language:

Python:

* `fastapi`: FastAPI (async, OpenAPI-first)
* `litestar`: Litestar (msgspec typing, batteries included)
* `django`: Django + Django REST Framework
* `flask`: Flask (minimal)

Go:

* `gin`: Gin (high-performance HTTP)
* `fiber`: Fiber (Express-inspired)
* `echo`: Echo (high performance, minimalist)
* `chi`: Chi (lightweight, idiomatic router)
* `stdlib`: Go stdlib (net/http)

Rust:

* `axum`: Axum (modular, ergonomic)
* `actix-web`: Actix Web (actor-based)
* `rocket`: Rocket (type-safe, productive)
* `warp`: Warp (composable, filter-based)
* `salvo`: Salvo (simple, powerful)
* `loco`: Loco (Rails-like full framework)

```bash
uvx tristack --framework litestar
tristack --framework axum
```

### `--frontend <frontend>` [#--frontend-frontend]

Frontend strategy, scoped to the selected language. When set, pages are served by the same backend (no separate UI server).

Python:

* `htmx`: server-rendered pages with HTMX for interactivity
* `none`: API-only project with no rendered pages

Go:

* `htmx`: server-rendered pages with HTMX for interactivity
* `none`: API-only project with no rendered pages

Rust:

* `htmx`: server-rendered pages with HTMX for interactivity
* `none`: API-only project with no rendered pages

> **Note:** Loco (`--framework loco`) doesn't support `htmx` yet — the CLI rejects that combination.

```bash
uvx tristack --frontend htmx
```

### `--orm <orm>` [#--orm-orm]

ORM or data layer, scoped to the selected language:

Python:

* `sqlmodel`: SQLModel (Pydantic-native)
* `sqlalchemy`: SQLAlchemy 2.0
* `tortoise`: Tortoise ORM (async, Django-style)
* `none`: No ORM

Go:

* `sqlc`: sqlc (type-safe Go from SQL)
* `gorm`: GORM (developer-friendly)
* `sqlx`: sqlx (extend `database/sql`)
* `none`: No ORM

Rust:

* `seaorm`: SeaORM (async)
* `diesel`: Diesel (safe, extensible)
* `sqlx-rust`: sqlx (async SQL toolkit)
* `none`: No ORM

```bash
uvx tristack --orm sqlalchemy
tristack --orm seaorm
```

### `--migrations <tool>` [#--migrations-tool]

Database migration tool, scoped to the selected language:

Python:

* `alembic`: Alembic (pairs with SQLModel/SQLAlchemy)
* `none`: No migrations

Go:

* `goose`: Goose (`migrations/*.sql`)
* `golang-migrate`: golang-migrate (`db/migrations/*.up.sql` / `*.down.sql`)
* `none`: No migrations

Rust:

* `none`: No migrations (run your ORM's own tooling)

Django uses its own bundled migrations; combined with `--framework django`, migrations are on you by default.

```bash
uvx tristack --migrations alembic
tristack --migrations goose
```

### `--database <db>` [#--database-db]

Database type:

* `sqlite`: SQLite (local, default)
* `postgres`: PostgreSQL
* `mysql`: MySQL
* `none`: No database

```bash
uvx tristack --database postgres
```

### `--package-manager <pm>` [#--package-manager-pm]

Package manager, scoped to the selected language:

Python:

* `uv`: uv (fast, modern; default)
* `poetry`: Poetry
* `pip`: pip + venv

Go:

* `go`: Go modules (always)

Rust:

* `cargo`: Cargo (always)

```bash
uvx tristack --package-manager poetry
tristack --package-manager cargo
```

### `--addons [values...]` [#--addons-values]

Additional features, scoped to the selected language. Pass a space-separated list (or repeat the flag), or `none`:

Python:

* `docker`: Dockerfile + `docker-compose.yml`
* `ruff`: Ruff linting/formatting config
* `mypy`: MyPy type-checking config
* `pytest`: Test suite with health-check tests
* `github-actions`: CI workflow
* `none`: No addons

Go:

* `docker`: Dockerfile + `docker-compose.yml`
* `air`: Live-reloading for Go apps
* `golangci-lint`: Fast Go linters runner
* `github-actions`: CI workflow
* `none`: No addons

Rust:

* `docker`: Dockerfile + `docker-compose.yml`
* `cargo-watch`: Rerun on file changes
* `clippy`: Lints to catch common mistakes
* `github-actions`: CI workflow
* `none`: No addons

```bash
uvx tristack --addons docker ruff pytest
tristack --addons docker cargo-watch clippy
uvx tristack --addons none
```

### `--git / --no-git` [#--git----no-git]

Control Git repository initialization.

```bash
uvx tristack --no-git
```

### `--install / --no-install` [#--install----no-install]

Control dependency installation after project creation. Runs `uv sync` / `poetry install` / `pip install` for Python, `go mod tidy` for Go, and `cargo build` for Rust.

```bash
uvx tristack --no-install
```

### `--directory-conflict <strategy>` [#--directory-conflict-strategy]

How to handle existing, non-empty target directories:

* `merge`: Keep unrelated files and replace conflicting generated files
* `overwrite`: Permanently clear the directory before scaffolding
* `increment`: Create a suffixed directory (e.g., `my-api-1`)
* `error`: Fail instead of prompting

The interactive prompt recommends the first available suffixed directory and requires an extra confirmation before overwriting.

```bash
# Overwrite an existing directory without prompting
uvx tristack my-api --yes --directory-conflict overwrite

# Safely create a new directory name if it exists
uvx tristack my-api --yes --directory-conflict increment
```

### `--disable-analytics` [#--disable-analytics]

Opt out of telemetry for this run. The CLI does not transmit telemetry today; the flag is reserved for future telemetry.

```bash
uvx tristack --disable-analytics
```

## Default Stack [#default-stack]

Running with no flags (or with only `--yes`) produces:

| Option           | Default                |
| ---------------- | ---------------------- |
| `language`       | `python`               |
| `framework`      | `fastapi`              |
| `frontend`       | `none`                 |
| `orm`            | `sqlmodel`             |
| `migrations`     | `alembic`              |
| `database`       | `sqlite`               |
| `packageManager` | `uv`                   |
| `addons`         | `docker, ruff, pytest` |
| `git`            | `true`                 |
| `install`        | `true`                 |

## Option Validation [#option-validation]

The CLI validates that `framework`, `orm`, `migrations`, and `frontend` values belong to the selected language. See the [Compatibility](/docs/cli/compatibility) page for the full rule set.

## Examples [#examples]

### Full Configuration [#full-configuration]

```bash
uvx tristack my-api \
  --language python \
  --framework fastapi \
  --frontend htmx \
  --orm sqlmodel \
  --migrations alembic \
  --database postgres \
  --package-manager uv \
  --addons docker ruff mypy pytest github-actions \
  --install
```

### Minimal Setup [#minimal-setup]

```bash
uvx tristack my-micro \
  --framework flask \
  --database none \
  --addons none
```
