DEV Community

Cover image for Managing Flutter & Dart SDK Versions with Proto
Konstantin Kai
Konstantin Kai

Posted on

Managing Flutter & Dart SDK Versions with Proto

"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 cd into 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
Enter fullscreen mode Exit fullscreen mode

Add the Flutter plugin

proto plugin add flutter "github://KonstantinKai/proto-flutter-plugin"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

This creates (or updates) a .prototools file in your project root:

flutter = "3.29"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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:

  1. Fetches the official Flutter release manifest from Google's servers
  2. Filters versions by your OS and architecture
  3. Downloads and verifies the SDK archive (with SHA-256 checksum)
  4. Extracts it to proto's tool directory
  5. Exposes both flutter and dart executables

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
Enter fullscreen mode Exit fullscreen mode

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)