Deploy FastAPI with uvicorn in a standard container
Doable auto-detects FastAPI via `requirements.txt` + a `main.py` / `app.py` with a FastAPI instance. We run `uvicorn main:app` in a Python 3.12 container. Full async, WebSocket, and BackgroundTasks support.
Typical first deploy: 30–60 seconds
uvicorn + a real Python container means every FastAPI feature works: async endpoints, WebSockets, streaming responses, BackgroundTasks. No cold starts, no 10-second timeouts.
Type /deploy in your editor, the AI bundles the repo, builds a Docker image on our worker, and hands back the URL in chat. No tab-switching to a dashboard.
Paste a public GitHub URL at doable.do/try and get a live preview in 30 seconds. No signup. Expires in 8h unless you claim it.
A $6 Hetzner box runs unlimited projects via `doable server add`. Same deploy UX; the only thing we don't run is our Cloud infra.
doable deploy # from your FastAPI project
Detected via `fastapi` in requirements.txt. Entry: `uvicorn <module>:app`. Default module search order: main → app → server.
Or say “deploy this” in Claude Code.
Add a `.python-version` file with a specific version (e.g. `3.11`) or pin it in your `pyproject.toml`. Default is 3.12.
Yes, 2 workers by default. Override with `WEB_CONCURRENCY` env var. For CPU-bound APIs, set workers = 2 × CPU cores + 1.
Yes, `doable addon attach --native postgres` provisions a native Postgres addon on the project's Docker network and injects `DATABASE_URL`. For external Postgres (Neon, Supabase): `doable addon attach --url postgres://...`.
No credit card. Live URL in ~30 seconds.