🚀 Join the waitlist now! waitlist.floot.dev
LogoFlootdocs

requirements

Check for, and install, the developer tools a Floot project needs.

Terminal
floot requirements check [<tool>] [--json]
floot requirements install [--yes] [--only <tool>]
floot doctor                              # alias for `requirements check`
floot requirements                        # also runs check

Exit codes: 0 when every required tool is satisfied, 69 when one is not, 64 for a usage error. Optional tools never affect the exit code.

What is checked

ToolRequiredMinimumNeeded when
Gityesn/aalways
Dart SDKyes3.13.0always
Flutteryes3.47.2always
FVMrecommendedn/aalways
Dockeryesn/athe supabase layer
Supabase CLIyes2.116.0the supabase layer
Denoyes2.0.0the supabase layer
jqyesn/aa coding-agent harness layer
Stripe CLIoptionaln/athe supabase layer
OpenSSLoptionaln/athe supabase layer
Xcode / Android SDKreportedn/adeferred to flutter doctor

The minimums are not preferences:

  • Supabase 2.116.0 is enforced at runtime by the initial migration, which raises an exception on older CLIs whose realtime image ships a realtime.messages table without RLS pre-enabled.
  • Flutter 3.47.2 is the version pinned in the kit's .fvmrc.
  • Deno 2.x is what supabase/config.toml sets deno_version to.

Scoping

Inside a generated project the command reads .floot.yaml and only asks for what the applied layers actually need, a base-only project is never told it needs Docker. Outside a project it reports the full list, since it cannot know what you are about to build.

Two probes for Docker

docker --version answers even with no daemon, and some Docker CLI installs ship with no engine at all, so a machine can report a perfectly good version while supabase start fails immediately. The check also runs docker info, giving three distinct states: missing, installed-but-not-running, and ok. This is deliberately runtime-agnostic: OrbStack, Colima, Podman and Rancher all satisfy it.

Flutter and FVM

Flutter passes if either a global SDK meets the minimum or FVM has the pinned version. Installing Flutter goes through FVM, because no package manager can deliver an exact version, brew install --cask flutter always gives you latest.

Installing

macOS uses Homebrew, Windows uses Scoop, and both are bootstrapped through their official installers if absent. Nothing runs under sudo: Homebrew refuses to run as root and asks for elevation itself, and Scoop disables elevated installs by default.

On Linux the check works normally but install only prints instructions. Homebrew on Linux cannot install the Docker daemon, and native Docker Engine provides no host.docker.internal, which the kit's config.toml hardcodes, an automated Linux path would report success on a machine where the stack still fails.

Docker Desktop on Windows is also print-only: there is no Scoop package, and the alternative needs administrator rights, WSL2 and usually a reboot.

A failed step skips only what depended on it, so one unreachable download does not cost you the other installs. Afterwards the summary re-checks through the now-augmented PATH, so it reflects what is genuinely working rather than what the process could see when it started.

For coding agents

floot requirements check --json emits a single line of JSON on stdout. The command raises the log level first, so the progress spinner and --verbose details cannot corrupt the payload.

{"platform":"macos","packageManager":"Homebrew","insideProject":true,
 "features":["base","supabase"],"satisfied":false,
 "tools":[{"id":"deno","name":"Deno","required":true,"state":"missing",
           "satisfied":false,"version":null,"minVersion":"2.0.0","detail":null,
           "purpose":"Type-checks and tests the Edge Functions.",
           "docsUrl":"https://docs.deno.com/runtime/getting_started/installation/"}]}

--yes makes install non-interactive. Without a terminal and without --yes it fails with a usage error rather than hanging.

On this page