Toupas

Docs

Frameworks Toupas recognises

Detected from the app's files; every default can be changed in toupas.json.

PresetDetected byKindDefaults
vitevite dependency / vite.config.*staticnpm run build → dist, single-page app
create-react-appreact-scriptsstaticnpm run build → build
astroastro (static output)staticnpm run build → dist
sveltekit-static@sveltejs/adapter-staticstaticnpm run build → build
nextjs-exportoutput: "export" in the Next configstaticnpm run build → out
nextjsnext, without output: "export"serverNeeds output: "standalone" in the Next config; starts node server.js
express / nodeexpress, another server library, or a start scriptservernpm ci, npm run build if there is one; starts the start script, or node with main, server.js, index.js or app.js
fastapifastapiserverStarts uvicorn <module>:<app> --host 0.0.0.0 --port $PORT. Needs uvicorn (or fastapi[standard]) in the dependencies
flaskflaskserverStarts gunicorn -b 0.0.0.0:$PORT <module>:<app>. Needs gunicorn in the dependencies
pythonrequirements.txt, pyproject.toml or uv.lockserverSet start in toupas.json
statican index.html and nothing elsestaticThe 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.