Pushing is the deploy. After
floo apps github connect, every git push to your default branch deploys to dev automatically. floo preflight is the local check you run before that push. There is no separate CLI deploy step in the everyday flow. See git-push deploys for the full 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 on-demand, warm, fixed, or paused posture; configured and locally resolved scaling values; CPU allocation; and whether server resolution is still required. With authentication,
plan.runtime_servicescontains the exact tier-aware 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. This is tier-3. Review is required only under an explicit approval policy. The default retains the resource without a 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 guess organization-plan clamps. When authenticated,
data.plan.runtime_services contains effective values and their sources after
applying plan limits. After deploy, use
floo services show <name> --env dev|prod --json to verify the applied contract.
A null source means the field does not apply to
that service type. See Scaling and Availability.