docs: document --flutter-version=fvm and =system - #661
Conversation
Documents the two `--flutter-version` aliases that let Shorebird follow the Flutter version you already use, and makes clear that Shorebird still builds with its own fork at that version rather than your fvm or system Flutter install. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SQV4ay9pqj2NUBhw72dLW8
The new fvm section in flutter-version.mdx references `.fvmrc`, which failed the spell-check job. `fvm` itself already passes via the shared allowed dictionary; only `fvmrc` needs adding.
AbhishekDoshi26
left a comment
There was a problem hiding this comment.
Reviewed against what actually shipped in shorebirdtech/shorebird#3932. The core explanation on this page is correct and is the thing users most need, but the HOLD still applies, and one claim about how fvm resolution works does not match the merged implementation.
I've pushed two commits to this branch: main merged in (it was 24 commits behind), and the cspell fix described below. CI should be green now.
The HOLD is still active: merged is not released
The description gates this on shorebirdtech/shorebird#3932 landing and being in a released CLI. Only the first half is true today:
| shorebird#3932 merged | 2026-09-17 17:23 UTC, as dea22a5 |
| Latest CLI release | v1.6.122, published 2026-09-16 15:59 UTC |
compare/v1.6.122...dea22a5 |
status: ahead, ahead_by: 1 |
So the release tag does not contain the commit. The feature is on main but in nobody's hands.
If this merges before v1.6.123 ships, a reader who copies the command gets the alias passed straight through to resolveFlutterRevision, which fails with:
Version fvm not found. Please open an issue to request a new version.
Use `shorebird flutter versions list` to list available versions.
That's a rough landing for someone who just read the docs telling them to type it. Happy to watch for the release and ping this PR when the tag actually contains dea22a5.
What I verified as correct
The paragraph at lines 123-126 is the most load-bearing part of the section, and it holds up against the merged code:
systemreally does read theflutteronPATH.getSystemVersion()runs withuseVendedFlutter: false. Worth noting this was exactly the bug in the earlier #3238 attempt, where_resolveExecutablerewroteflutterto Shorebird's own binary and made the flag a no-op. This PR's wording describes the fixed behavior.- "It does not build with your fvm or system Flutter install" is right. The reported version goes through the normal version-to-revision lookup, so the build uses Shorebird's fork at that version.
- "the version has to be one Shorebird supports" is right, and #3932 went a little beyond its original scope to make it true:
assertArgsAreValidnow resolves the alias, so theminimumFlutterVersioncheck applies tofvm/systeminstead of silently skipping. --flutter-versionis still release-only.patch_command.darthas no such option, so the existing note above this section stays accurate.
Spell-check (fixed on this branch)
fvmrc was flagged at flutter-version.mdx:116:60, and it was the only red check. I added it to the alphabetical words: list in .cspell.yaml:
- frontmatter
- fvmrc
- gallegofvm on its own already passes via the shared allowed dictionary, so only fvmrc needed adding. This mirrors what #3932 did to cspell.config.yaml in the shorebird repo. Verified locally: cspell, Vale, prettier, the component-label linter, and a full astro build with link validation all pass.
Still needs your attention
The :::note at lines 130-131 describes the fallback path as though it were the normal one, and omits the part users will actually feel. Details in the inline comment.
One optional addition: on success the CLI prints Using Flutter 3.32.4, as reported by `flutter --version`. A sentence pointing at that line would let users confirm the alias resolved to what they expected, which is handy when an .fvmrc isn't where they thought it was.
Vale's Terms rule requires "Code Push". The occurrence spans a line break, which older Vale releases did not join, so it only started failing when the vale-action picked up a newer Vale: the same main commit (9796712) passed style-check on 2026-09-17 and failed on 2026-09-18. This is a main-branch failure inherited by this branch when main was merged in, not something this PR introduced.
AbhishekDoshi26
left a comment
There was a problem hiding this comment.
Checked the prose against the merged implementation in shorebirdtech/shorebird#3932 (ShorebirdFlutter.getFvmVersion/getSystemVersion and ReleaseCommand.resolveFlutterVersionArg). The framing is right: resolving the alias to a version number and then building with Shorebird's fork at that version matches the code, and the supported-version constraint is real since assertArgsAreValid resolves the alias before the minimumFlutterVersion check.
Three things to correct, all in the new section. I've pushed a commit applying them.
Also confirmed the .cspell.yaml addition is needed: stripping fvmrc and re-running cspell flags it at line 116, so that hunk stays.
…PATH requirement - fvm asks fvm's JSON API for the project's pin first; fvm flutter --version is only the fallback for a channel or fork ref pin, and it may install Flutter first. - =system needs flutter on PATH, which a Shorebird-only user won't have. - Note the minimum Shorebird version (1.6.123).
AbhishekDoshi26
left a comment
There was a problem hiding this comment.
The HOLD is cleared: Shorebird 1.6.123 shipped 2026-09-21 and its tag contains dea22a5, with origin/stable pointing at that release commit, so shorebird upgrade delivers the aliases today.
Everything from my earlier review is applied: the fvm :::note now describes fvm api project as the normal path and warns that a channel or fork-ref pin falls back to fvm flutter --version and may install Flutter first, the duplicated patches sentence is trimmed, and the section is gated on 1.6.123. Also added the =system PATH prerequisite, since a Shorebird-only reader won't have a flutter on PATH, and the resolved-version confirmation line.
Verified against origin/stable of shorebirdtech/shorebird. All four checks green.
Description
Adds a "Match the Flutter version you already use" section to
getting-started/flutter-version.mdx, covering the two--flutter-versionaliases added in shorebirdtech/shorebird#3932:--flutter-version=fvm— uses the version fvm resolves for the project (from its.fvmrc).--flutter-version=system— uses the version reported by theflutteron yourPATH.The section makes the key point explicit, since it's the thing users are most likely to get wrong: Shorebird resolves the alias to a version number and then builds with Shorebird's fork at that version. It does not build with your fvm or system Flutter install, so the version still has to be one Shorebird supports.
The
:::notecovers what each alias needs to work:fvmonPATH. Shorebird asksfvm api projectfor the project's pin first, which answers without running Flutter. A channel (stable) or fork-ref pin falls back tofvm flutter --version, which may install that Flutter first and take several minutes.flutteronPATHfor=system, which a Shorebird-only user won't have, since Shorebird's private copy at~/.shorebird/bin/cache/flutteris explicitly not meant to be onPATH.Gated on Shorebird 1.6.123, the first release containing shorebirdtech/shorebird#3932 (
dea22a5), published 2026-09-21.Context: shorebirdtech/shorebird#1385 asked for fvm support "and/or at least docs on how they're supposed to work together" — this is the docs half.