Pushing is the deploy. After
floo apps github connect, every git push to your default branch deploys to dev. Run floo preflight before that push. See git-push deploys for the trigger table.Arguments
Flags
Examples
What it checks
- Config files: reads
floo.app.toml(and any per-servicefloo.service.tomlin a delegated layout) and validates structure - Service discovery: resolves all services, checks for duplicates and naming rules
- Port validation: verifies ports are set and match Dockerfile
EXPOSEdirectives - Runtime detection: scans project files to determine language and framework
- Env file check: verifies referenced
env_filepaths exist on disk - Env injection plan: shows each service’s managed attachments, generated env keys, required keys, and optional keys
- Runtime plan: shows the on-demand, warm, fixed, or paused mode; configured and locally resolved scaling values; CPU allocation; and whether server resolution is still required. With authentication,
plan.runtime_servicescontains the exact result for--env. - Managed services: reconciles config declarations against platform state:
to_provision: declared, no row yet. The next deploy creates it.to_retain: declared and present. Safe declared fields are reconciled.to_retry: declared, but the row isfailed. The next deploy retries it.to_deprovision: previously config-declared, now removed, so floo proposes deleting it. Review is required only under an explicit approval policy; by default the resource is retained with no teardown schedule. Deploy never deletes its data.to_orphan: present but never config-declared, such as a CLI-added row. It stays live until explicitly removed.in_flight_deprovisioning: terminal deletion is in progress.
JSON output
findings lists every error and warning the local checks produced. plan is the read-only server plan and is null without authentication or an existing app. When the config is invalid the payload is {"success": false, "error": {...}, "data": {...}} with the same data keys, so agents read findings either way.
An omitted HTTP minimum resolves locally to 0 with source platform_default
in every environment, including --env prod, with no note. The local plan
does not apply server-side maximums; when authenticated,
data.plan.runtime_services holds effective values and sources after those
maximums. A null source means the field does not apply to that service type.
After deploy, verify the applied contract with
floo services show <name> --env dev|prod --json. See Scaling and Availability.