Quick Start
Create your first TriStack project in minutes
Philosophy
- Roll your own stack: pick only what you need, nothing extra.
- Minimal templates: bare-bones scaffolds with zero bloat.
- Latest dependencies: always current and stable by default.
- Idiomatic per language: a generated Python project should look like a Python developer wrote it — and a Go or Rust one should look like a Go or Rust developer wrote it.
- Free and open source: forever.
Languages
TriStack scaffolds backend projects in multiple languages. Each has its own option set (framework, ORM, migrations, package manager, addons) in the Compatibility reference.
| Language | Status |
|---|---|
| Python | Scaffolding |
| Go | Scaffolding |
| Rust | Scaffolding |
Install the CLI
TriStack installs as a standalone native binary for Windows, macOS, and Linux, or runs on demand with uv over Python. Pick your platform:
# run on demand — no install needed
uvx tristack
# or install once with uv
uv tool install tristackGet Started
Prerequisites
You only need the runtime of whatever language you scaffold, plus Git (optional, git-scm.com) to initialize a repository:
| Language | Runtime | Package manager |
|---|---|---|
| Python | Python 3.12+ (python.org) | uv (astral.sh/uv) — or poetry / pip |
| Go | Go 1.22+ (go.dev) | go |
| Rust | Rust 1.75+ (rustup) | cargo |
CLI (prompts)
uvx tristackFollow the interactive prompts to pick your language, framework, frontend, ORM/migrations, database, package manager, and addons.
Skip prompts and use the default stack:
uvx tristack --yesStack Builder (UI)
- Visit /new to pick your stack, preview the generated file tree live, and copy the exact CLI command. The builder supports Python, Go, and Rust stacks.
- The command you copy runs verbatim:
uvx tristack my-tristack-app \
--language python \
--framework fastapi \
--frontend none \
--orm sqlmodel \
--migrations alembic \
--database sqlite \
--package-manager uv \
--addons docker ruff pytest \
--installAI agent (JSON-first)
Let an LLM CLI or CI job scaffold projects for you with the fully JSON-first create-json command — no prompts, one machine-readable payload. See Agent Workflows.
Native Claude Code / Codex plugins ship in a later phase.
Common Setups — Python
The examples below use the Python runner (uvx tristack).
Default Stack
uvx tristack my-api \
--language python \
--framework fastapi \
--orm sqlmodel \
--migrations alembic \
--database sqlite \
--package-manager uv \
--addons docker ruff pytestPostgres API
uvx tristack my-api \
--language python \
--framework fastapi \
--orm sqlalchemy \
--migrations alembic \
--database postgres \
--package-manager uv \
--addons docker pytestDjango Monolith
uvx tristack my-django \
--language python \
--framework django \
--database postgres \
--package-manager poetry \
--addons docker ruff mypy pytestMinimal Flask Service
uvx tristack my-micro \
--language python \
--framework flask \
--database none \
--package-manager uv \
--addons pytestServer-rendered (HTMX)
uvx tristack my-app \
--language python \
--framework fastapi \
--frontend htmx \
--orm sqlmodel \
--migrations alembic \
--database sqlite \
--package-manager uv \
--addons ruff pytestCommon Setups — Go
The Go CLI runs as the standalone tristack binary.
Gin + GORM + SQLite
tristack my-api \
--language go \
--framework gin \
--orm gorm \
--migrations goose \
--database sqlite \
--package-manager go \
--addons docker air golangci-lintFiber + sqlx + Postgres
tristack my-api \
--language go \
--framework fiber \
--orm sqlx \
--migrations golang-migrate \
--database postgres \
--package-manager go \
--addons docker air golangci-lintCommon Setups — Rust
The Rust CLI runs as the standalone tristack binary.
Axum + SeaORM + SQLite
tristack my-api \
--language rust \
--framework axum \
--orm seaorm \
--migrations none \
--database sqlite \
--package-manager cargo \
--addons docker cargo-watch clippyActix Web + Diesel + Postgres
tristack my-api \
--language rust \
--framework actix-web \
--orm diesel \
--migrations none \
--database postgres \
--package-manager cargo \
--addons docker cargo-watch clippyFlags Cheat Sheet
See the full list in the CLI Reference. Option sets are per language:
--language: python, go, rust--framework(python): fastapi, litestar, django, flask--framework(go): gin, fiber, echo, chi, stdlib--framework(rust): axum, actix-web, rocket, warp, salvo, loco--frontend(python): htmx, none--frontend(go): htmx, none--frontend(rust): htmx, none--orm(python): sqlmodel, sqlalchemy, tortoise, none--orm(go): sqlc, gorm, sqlx, none--orm(rust): seaorm, diesel, sqlx-rust, none--migrations(python): alembic, none--migrations(go): goose, golang-migrate, none--migrations(rust): none--database: sqlite, postgres, mysql, none--package-manager(python): uv, poetry, pip--package-manager(go): go--package-manager(rust): cargo--addons(python): docker, ruff, mypy, pytest, github-actions, none--addons(go): docker, air, golangci-lint, github-actions, none--addons(rust): docker, cargo-watch, clippy, github-actions, none
Next Steps
CLI reference
Flags, usage, and examples for each command
Project Structure
How a generated project is laid out per language
Compatibility
Valid options per language and how the CLI validates them
tristack.jsonc
The config file written to every generated project
Python quick start
Scaffold and run your first FastAPI project end to end
Go quick start
Scaffold and run your first Gin + GORM project end to end
Rust quick start
Scaffold and run your first Axum + SeaORM project end to end
Contributing
Dev setup and contribution flow
