Frameworks Toupas recognises
Detected from the app's files; every default can be changed in toupas.json.
| Preset | Detected by | Kind | Defaults |
|---|---|---|---|
vite | vite dependency / vite.config.* | static | npm run build → dist, single-page app |
create-react-app | react-scripts | static | npm run build → build |
astro | astro (static output) | static | npm run build → dist |
sveltekit-static | @sveltejs/adapter-static | static | npm run build → build |
nextjs-export | output: "export" in the Next config | static | npm run build → out |
nextjs | next, without output: "export" | server | Needs output: "standalone" in the Next config; starts node server.js |
express / node | express, another server library, or a start script | server | npm ci, npm run build if there is one; starts the start script, or node with main, server.js, index.js or app.js |
fastapi | fastapi | server | Starts uvicorn <module>:<app> --host 0.0.0.0 --port $PORT. Needs uvicorn (or fastapi[standard]) in the dependencies |
flask | flask | server | Starts gunicorn -b 0.0.0.0:$PORT <module>:<app>. Needs gunicorn in the dependencies |
python | requirements.txt, pyproject.toml or uv.lock | server | Set start in toupas.json |
static | an index.html and nothing else | static | The folder as it is |
Package managers: package-lock.json → npm ci, pnpm-lock.yaml → pnpm, yarn.lock → yarn; uv.lock → uv sync, otherwise requirements.txt → pip. Without a lockfile the app still builds, with a warning.
Apps with their own server are prepared in Docker on the user's computer, so Docker Desktop must be installed and running (toupas_doctor, toupas_setup_docker). Static sites don't need it.