"It works on my machine." Three Flutter projects, three different SDK versions, and flutter downgrade is your most-used command. There has to be a better way — and there is.
Proto is a universal version manager (think nvm or asdf, but faster and cross-platform) — and now it supports Flutter and Dart through community WASM plugins.
Why proto over FVM or asdf?
FVM is Flutter-specific. It works, but it's one more tool in your stack. If you already manage Node, Go, Rust, or Python versions, that's yet another version manager with its own config format.
asdf supports many tools via plugins, but it's historically been shell-script based, Unix-only, and can be slow.
proto gives you:
- One tool for all your SDKs (Node, Go, Rust, Python, Flutter, Dart, PHP, and more)
- Blazing fast — plugins are compiled to WASM, not shell scripts
- Cross-platform — Linux, macOS, and Windows
- Per-project version pinning via
.prototools(one file, all tools) - Automatic version detection from
pubspec.yaml - Auto-switching — proto picks the right version when you
cdinto a project
Getting started
Install proto
# macOS / Linux
curl -fsSL https://moonrepo.dev/install/proto.sh | bash
# Windows
irm https://moonrepo.dev/install/proto.ps1 | iex
Add the Flutter plugin
proto plugin add flutter "github://KonstantinKai/proto-flutter-plugin"
One command. No git clones, no compiling from source. Proto downloads a tiny WASM plugin and you're ready to go.
Install Flutter
# Install the latest stable
proto install flutter
# Install a specific version
proto install flutter 3.29
# Install a beta version
proto install flutter beta
Proto downloads the official Flutter SDK archive from Google's servers, extracts it, and makes it available immediately.
Pin a version per project
cd my-flutter-project
proto pin flutter 3.29
This creates (or updates) a .prototools file in your project root:
flutter = "3.29"
Now every teammate gets the exact same Flutter version on proto install. No surprises.
Automatic version detection
The plugin reads your pubspec.yaml out of the box. If you have:
environment:
flutter: ">=3.22.0 <4.0.0"
Proto will detect and resolve the appropriate Flutter version — no extra configuration needed.
Managing Dart alongside Flutter
Flutter bundles Dart, so in most cases you don't need a separate Dart plugin. But if you have pure Dart projects (CLI tools, server apps, packages), there's a Dart plugin too:
proto plugin add dart "github://KonstantinKai/proto-dart-plugin"
proto install dart 3.7
It reads environment.sdk from pubspec.yaml and supports the same version pinning and auto-detection workflow.
One config file for your entire stack
Here's where proto really shines. A single .prototools file manages everything:
flutter = "3.29"
node = "22"
go = "1.24"
[plugins.tools]
flutter = "github://KonstantinKai/proto-flutter-plugin"
Your whole team gets consistent SDK versions across Flutter, Dart, Node, Go — whatever your project needs. One file, committed to git, no ambiguity.
How it works under the hood
Curious about the internals?
Proto plugins are compiled to WebAssembly (WASM) and run in a sandboxed environment. The Flutter plugin:
- Fetches the official Flutter release manifest from Google's servers
- Filters versions by your OS and architecture
- Downloads and verifies the SDK archive (with SHA-256 checksum)
- Extracts it to proto's tool directory
- Exposes both
flutteranddartexecutables
There are no shell scripts, no git clones, no channel management. Just clean, deterministic version management.
Supported platforms
The Flutter plugin covers all officially supported platforms:
| Platform | Architecture | Notes |
|---|---|---|
| Linux | x64 | All versions |
| macOS | x64 | All versions |
| macOS | arm64 (Apple Silicon) | Stable >= 3.0.0, beta >= 2.12.0 |
| Windows | x64 | All versions |
Useful commands
# List all available Flutter versions
proto versions flutter
# Check which version is active
proto run flutter -- --version
# Switch between versions
proto install flutter 3.22
proto pin flutter 3.22
# Remove a version
proto uninstall flutter 3.22
Links
The plugins are open source and available on GitHub:
If you hit any issues or have feature requests, open an issue on GitHub.
If you also work with PHP, check out proto-php-plugin and proto-composer-plugin — same approach, same workflow.
Top comments (0)