Scaffold a complete FastAPI project with Postgres, Alembic migrations, Docker, and tests. Run make dev and start building.
Install the CLI
$ uv tool install bluefox-cli # provides: bluefox (or bfx for short)
Create a project
$ bluefox init myapp
Start developing
$ cd myapp $ make dev # Postgres starts, migrations run, app reloads on changes
A complete project structure with everything wired together. Every file is ready to use — no boilerplate to fill in.
welcome=Truebluefox-test fixturesmake dev starts Postgres via Docker Compose, runs Alembic migrations, and launches the app with --reload. Nothing to install manually.
Multi-stage Dockerfile with uv. Production compose uses dokploy-network, dev overrides with a local bridge. Same pattern, two environments.
Alembic configured with configure_alembic() from bluefox-core. Run make migrate-make name=add_users to generate, make migrate to apply.
conftest.py wired with bluefox-test fixtures. Real Postgres via testcontainers, async client, SAVEPOINT isolation. Run make test.
bluefox-core finds your */api.py routers and */models.py models automatically. Create a module directory and start coding — no registration needed.
Templates are plain Python strings. No Jinja, no cookiecutter. Easy to read, easy to maintain, zero extra dependencies.
One command: bluefox init myapp. No interactive prompts, no plugin system, no config files. Opinionated and complete.
The app factory and models are minimal — just enough to start. Add your routes, models, and business logic on top.
from bluefox_core import BluefoxSettings, create_bluefox_app def create_app() -> object: settings = BluefoxSettings() return create_bluefox_app(settings, welcome=True) app = create_app()
from fastapi import APIRouter router = APIRouter() @router.get("/") async def list_items(): return {"items": []} # auto-mounted at /items — no registration needed
from bluefox_test import bluefox_test_setup from bluefox_core import BluefoxBase globals().update(bluefox_test_setup(base=BluefoxBase, app_factory="main:create_app"))
from alembic import context from bluefox_core.migrations import configure_alembic configure_alembic(context)