Skip to main content
Validate the project config, detect runtimes, and check deploy readiness, with no side effects. Local checks need no authentication. For an authenticated existing app, preflight also returns the read-only server plan, including the runtime values floo will apply.
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

  1. Config files: reads floo.app.toml (and any per-service floo.service.toml in a delegated layout) and validates structure
  2. Service discovery: resolves all services, checks for duplicates and naming rules
  3. Port validation: verifies ports are set and match Dockerfile EXPOSE directives
  4. Runtime detection: scans project files to determine language and framework
  5. Env file check: verifies referenced env_file paths exist on disk
  6. Env injection plan: shows each service’s managed attachments, generated env keys, required keys, and optional keys
  7. 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_services contains the exact result for --env.
  8. 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 is failed. 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.

Errors