floo.app.toml config file with your service declared inline.
Arguments
| Argument | Description |
|---|---|
NAME | App name. Prompted interactively if omitted. Required in --json mode. |
Flags
| Flag | Description | Default |
|---|---|---|
--path PATH | Project directory | . (current directory) |
Behavior
In interactive mode (default),floo init prompts for app name, service name, port, and type. It auto-detects your runtime (Node.js, Python, Go, static) and suggests defaults.
In non-interactive mode (--json), NAME is required. Detection runs automatically and defaults are applied without prompts.
Creates:
floo.app.toml— app-level configuration with your services declared inline (name, port, type, build settings). The file leads with a header comment that points to thegit pushdeploy contract and shows whereaccess_modelives, so you don’t have to leave the file to find either.Dockerfile— when one isn’t already present and the detected runtime has a templateAGENTS.md— operating notes for AI coding assistants working in this repo (only when noAGENTS.mdalready exists)
What happens next
floo init doesn’t deploy. After the file is written:
- Connect your GitHub repo:
floo apps github connect <owner/repo>. This installs the webhook that auto-deploys on push. git pushto your default branch — that’s the deploy. Every subsequent push deploys to dev automatically.- Cut a GitHub release when you’re ready to promote a build to production.
floo deploy in the regular flow. It exists for ad-hoc rebuilds (floo redeploy --rebuild) and edge cases.
Examples
Runtime auto-detection
| File | Runtime | Framework |
|---|---|---|
package.json + next | Node.js | Next.js |
package.json + vite | Node.js | Vite |
package.json + express | Node.js | Express |
requirements.txt / pyproject.toml | Python | FastAPI, Flask, Django |
go.mod | Go | — |
index.html (no backend) | Static | — |
JSON output
Errors
| Code | Meaning |
|---|---|
INVALID_PATH | Path is not a valid directory |
CONFIG_EXISTS | floo.app.toml already exists in the target directory |
MISSING_APP_NAME | NAME argument is required in --json mode |