requirements
Check for, and install, the developer tools a Floot project needs.
floot requirements check [<tool>] [--json]
floot requirements install [--yes] [--only <tool>]
floot doctor # alias for `requirements check`
floot requirements # also runs checkExit 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
| Tool | Required | Minimum | Needed when |
|---|---|---|---|
| Git | yes | n/a | always |
| Dart SDK | yes | 3.13.0 | always |
| Flutter | yes | 3.47.2 | always |
| FVM | recommended | n/a | always |
| Docker | yes | n/a | the supabase layer |
| Supabase CLI | yes | 2.116.0 | the supabase layer |
| Deno | yes | 2.0.0 | the supabase layer |
| jq | yes | n/a | a coding-agent harness layer |
| Stripe CLI | optional | n/a | the supabase layer |
| OpenSSL | optional | n/a | the supabase layer |
| Xcode / Android SDK | reported | n/a | deferred 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.messagestable without RLS pre-enabled. - Flutter 3.47.2 is the version pinned in the kit's
.fvmrc. - Deno 2.x is what
supabase/config.tomlsetsdeno_versionto.
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.