Install MVL¶
Homebrew (macOS Apple Silicon)¶
Fastest path — installs a pre-built binary in seconds:
brew tap mvl-lang/mvl
brew trust mvl-lang/mvl # Homebrew 6.x requires trusting third-party taps
brew install mvl
Verify:
The Homebrew formula installs the compiler binary, standard library, and Rust FFI runtime. MVL_HOME is configured automatically by a wrapper in bin/mvl. See mvl-lang/homebrew-mvl for what the tap ships and how to update it.
About brew trust
Homebrew 6.0 introduced a trust step for third-party taps to protect users from unreviewed formulae. This is a one-time step per tap. If you skip it, brew install will refuse to load the formula with a message telling you what to run.
Platforms currently supported by the tap:
| Platform | Status |
|---|---|
| macOS on Apple Silicon (arm64) | ✅ Prebuilt binary |
| macOS on Intel (x86_64) | ⏳ Coming — use the install script below |
| Linux / Windows / other | ⏳ Coming — use the install script below |
Universal install script (build from source)¶
Works on any platform with Rust:
This:
- Verifies system prerequisites (see below)
- Installs Rust if not present (via rustup)
- Clones and builds MVL from source
- Installs the
mvlbinary to~/.local/bin/ - Adds
~/.local/binto your PATH
No sudo required for MVL itself.
Check before installing¶
To verify what's already on your system without installing anything, run with --check:
Sample output:
Prerequisites:
✓ git found: /usr/bin/git
✗ Z3 solver NOT found
brew install z3
✓ Rust toolchain found: rustc 1.83.0
Exit code is non-zero if anything is missing, so it composes with CI/scripting. Nothing is written to disk in check mode.
Read the script before running¶
If you want to inspect the source before executing it:
curl -fsSL https://mvl-lang.org/install.sh -o /tmp/mvl-install.sh
less /tmp/mvl-install.sh # ~260 lines of POSIX sh
sh /tmp/mvl-install.sh # run when satisfied
Security note — pick your install path deliberately¶
The install script is a convenience path. It's protected by HTTPS transport and the trust chain of git/cargo once cloning starts, but there's no cryptographic signature on the script itself. If mvl-lang.org is compromised, curl | sh is compromised.
For deployments where install-time integrity matters, use the Homebrew tap instead: every artifact SHA is pinned in the formula, changes go through PR review, and Homebrew verifies checksums before installing. That's the real-integrity path.
Sigstore / cosign-signed release artifacts are a planned future improvement for the compiler releases themselves.
System prerequisites¶
The script checks for these and stops with a clear install command if missing:
- git — for cloning the source
- Z3 — required by MVL's refinement solver (transitively via
z3-sys); the script does not attempt to install it because system-package installation requiressudo
Install Z3 up front:
| Platform | Command |
|---|---|
| macOS (Homebrew) | brew install z3 |
| Debian / Ubuntu | sudo apt-get install -y libz3-dev z3 |
| Fedora / RHEL | sudo dnf install -y z3 z3-devel |
| Arch | sudo pacman -S z3 |
| Alpine | sudo apk add z3 z3-dev |
Environment Variables¶
| Variable | Default | Description |
|---|---|---|
MVL_INSTALL_DIR |
~/.local/bin |
Where to install the binary |
MVL_VERSION |
latest |
Version/tag to build (e.g., v1.0.0) |
MVL_BUILD_DIR |
~/.mvl/src |
Where to clone source |
MVL_NO_MODIFY_PATH |
0 |
Set to 1 to skip PATH modification |
Example: install a specific version to a custom location:
Manual Build¶
Requires Rust (stable toolchain) and git:
git clone https://github.com/mvl-lang/mvl.git
cd mvl
cargo build --release
cp target/release/mvl ~/.local/bin/
Verify Installation¶
Editor Support¶
MVL provides an LSP server for editor integration:
Configure your editor to use mvl lsp as the language server for .mvl files.