Supported Tools
mvx supports a wide range of development tools across different programming languages and ecosystems. Each tool is automatically downloaded, installed, and configured for your project.
Adding Tools to Your Project
The easiest way to add tools to your project is using the mvx tools add
command:
# Add Java 21 (default Temurin distribution)
mvx tools add java 21
# Add Java 17 with specific distribution
mvx tools add java 17 zulu
# Add Maven 4.0.0-rc-4
mvx tools add maven 4.0.0-rc-4
# Add Node.js LTS
mvx tools add node lts
# Add Go 1.23.1
mvx tools add go 1.23.1
# Add Python 3.12
mvx tools add python 3.12
Benefits:
- ✅ Validates the tool and version exist
- ✅ Updates your
.mvx/config.json5
automatically - ✅ Preserves existing configuration and formatting
- ✅ Adds comments and proper JSON5 structure
Using System Tools
For CI environments, corporate setups, or when you prefer to use existing tool installations, mvx supports using system-installed tools instead of downloading them. This is controlled via environment variables:
# Enable system tools individually
export MVX_USE_SYSTEM_JAVA=true
export MVX_USE_SYSTEM_MAVEN=true
export MVX_USE_SYSTEM_NODE=true
export MVX_USE_SYSTEM_GO=true
export MVX_USE_SYSTEM_PYTHON=true
export MVX_USE_SYSTEM_MVND=true
./mvx setup
Benefits:
- ⚡ Faster builds: No download time
- 🛡️ More reliable: Avoids network issues
- 💾 Better resource usage: Uses existing installations
- 🎯 Selective control: Enable per tool independently
- 🔒 Security: Use centrally managed, approved tool versions
How it works:
- When
MVX_USE_SYSTEM_<TOOL>=true
is set, mvx uses the system installation directly - Validates that the system tool is available and accessible
- Skips adding mvx-managed tool paths to PATH, letting system PATH handle tool resolution
- If system tool is unavailable, the command fails (no fallback to downloading)
Version Overrides
Need to temporarily use a different tool version without modifying your configuration? Use environment variable overrides:
# Use Java 21 instead of what's configured
MVX_JAVA_VERSION=21 mvx setup
# Use Maven 3.9.6 instead of what's configured
MVX_MAVEN_VERSION=3.9.6 mvx build
# Use multiple overrides together
MVX_JAVA_VERSION=21 MVX_MAVEN_VERSION=4.0.0-rc-4 mvx setup
# Test with different Python version
MVX_PYTHON_VERSION=3.11 mvx test
Supported override variables:
MVX_JAVA_VERSION
- Override Java versionMVX_MAVEN_VERSION
- Override Maven versionMVX_GO_VERSION
- Override Go versionMVX_NODE_VERSION
- Override Node.js versionMVX_PYTHON_VERSION
- Override Python version
Benefits:
- 🧪 Testing: Quickly test with different tool versions
- 🚀 CI/CD: Use specific versions in different pipeline stages
- 🐛 Debugging: Isolate issues by switching versions
- 👥 Team coordination: Temporarily align on specific versions
- 📝 No config changes: Keep your configuration file unchanged
💡 Tip: Use
MVX_VERBOSE=true
to see when version overrides are active. See the Configuration Guide for complete details.
Supported Tools
Java Ecosystem
Java (OpenJDK)
Automatic installation of OpenJDK distributions.
{
tools: {
java: {
version: "21", // Java version (8, 11, 17, 21, etc.)
distribution: "temurin", // Optional: temurin, zulu, corretto
arch: "x64" // Optional: x64, aarch64
}
}
}
Using System Java
For CI environments or when you prefer to use an existing Java installation, you can configure mvx to use the system Java instead of downloading:
export MVX_USE_SYSTEM_JAVA=true
export JAVA_HOME=/path/to/your/java
./mvx build
When MVX_USE_SYSTEM_JAVA=true
is set:
- ✅ Always uses system Java: mvx will use the Java installation from
JAVA_HOME
- ✅ No version checking: Uses system Java regardless of version differences
- ✅ Faster setup: No time spent downloading Java in CI environments
- ✅ Strict behavior: Fails if system Java is unavailable (no fallback to download)
Requirements:
JAVA_HOME
environment variable must be set- System Java version must match the major version specified in your configuration
- Java executable must be available at
$JAVA_HOME/bin/java
Use Cases:
- GitHub Actions: Runners have Java pre-installed
- Corporate environments: Java is centrally managed
- Offline environments: Where downloading is restricted
**Supported Versions**: 8, 11, 17, 21, 22, 23
**Supported Distributions**: Eclipse Temurin, Azul Zulu, Amazon Corretto
**Platforms**: Linux (x64, aarch64), macOS (x64, aarch64), Windows (x64)
### Maven
Apache Maven build automation tool.
```json5
{
tools: {
maven: {
version: "3.9.6", // Maven version
settings: "custom-settings.xml" // Optional: custom settings file
}
}
}
Supported Versions: 3.6.x, 3.8.x, 3.9.x Platforms: All (Java-based)
Using System Maven
For CI environments or when you prefer to use an existing Maven installation:
export MVX_USE_SYSTEM_MAVEN=true
./mvx build
When MVX_USE_SYSTEM_MAVEN=true
is set:
- ✅ Always uses system Maven: mvx will use Maven from
MAVEN_HOME
,M2_HOME
, or PATH - ✅ No version checking: Uses system Maven regardless of version differences
- ✅ Faster setup: No time spent downloading Maven in CI environments
- ✅ Strict behavior: Fails if system Maven is unavailable (no fallback to download)
Detection Order:
MAVEN_HOME
environment variableM2_HOME
environment variable (fallback)mvn
command in PATH
Requirements:
- Maven must be accessible via one of the detection methods above
- System Maven version must match the version specified in your configuration
- Maven executable must be functional (
mvn --version
works)
Maven Daemon
Faster Maven builds with persistent JVM.
{
tools: {
mvnd: {
version: "1.0.1" // Maven Daemon version
}
}
}
Supported Versions: 0.9.x, 1.0.x
Platforms: Linux (x64, aarch64), macOS (x64, aarch64), Windows (x64)
Go Ecosystem
Go
Go programming language compiler and tools.
{
tools: {
go: {
version: "1.21.0", // Go version
modules: true // Optional: enable Go modules (default: true)
}
}
}
Supported Versions: 1.19.x, 1.20.x, 1.21.x, 1.22.x, 1.23.x
Platforms: Linux (x64, aarch64), macOS (x64, aarch64), Windows (x64)
Node.js Ecosystem
Node.js
JavaScript runtime environment.
{
tools: {
node: {
version: "20.0.0", // Node.js version
npm: "10.0.0" // Optional: specific npm version
}
}
}
Supported Versions: 16.x, 18.x, 20.x, 21.x, 22.x
Platforms: Linux (x64, aarch64), macOS (x64, aarch64), Windows (x64)
Yarn
Alternative package manager for Node.js.
{
tools: {
yarn: {
version: "1.22.19" // Yarn version
}
}
}
Supported Versions: 1.22.x, 3.x, 4.x Platforms: All (Node.js-based)
Python Ecosystem
Python
Python programming language interpreter with automatic project isolation.
{
tools: {
python: {
version: "3.12.0", // Python version
options: {
requirements: "requirements.txt", // Optional: auto-install requirements
venv: "true" // Optional: enable virtual environments (default: true)
}
}
}
}
Supported Versions: 3.8.x, 3.9.x, 3.10.x, 3.11.x, 3.12.x, 3.13.x Platforms: Linux (x64, aarch64), macOS (x64, aarch64), Windows (x64)
🔒 Project Isolation Features:
- Virtual Environments: Each project gets its own isolated Python environment
- Package Isolation: pip packages are installed per-project, not globally
- Path Management: Project-specific PYTHONPATH and PATH configuration
- No Conflicts: Projects don't interfere with each other or system Python
- Automatic Setup: Virtual environments created automatically when needed
pip & Requirements
Python package management with project isolation.
{
tools: {
python: {
version: "3.12.0",
options: {
requirements: "requirements.txt" // Auto-install from requirements file
}
}
}
}
Automatic Requirements Installation:
- Detects
requirements.txt
,requirements.pip
, orpyproject.toml
- Installs packages in project-specific virtual environment
- No global package pollution
- Consistent dependencies across team members
Environment Variables Set:
VIRTUAL_ENV
: Path to project's virtual environmentPYTHONPATH
: Project-specific Python pathPYTHONNOUSERSITE
: Disables user site packages for isolationPATH
: Prioritizes virtual environment binaries
Python Environment Isolation
mvx provides complete project isolation for Python, ensuring that:
🔒 No Cross-Project Contamination
Each project gets its own isolated environment:
# Project A uses Python 3.11 with Django
cd /path/to/project-a
./mvx setup # Creates isolated environment for this project
# Project B uses Python 3.12 with Flask
cd /path/to/project-b
./mvx setup # Creates separate isolated environment
Directory Structure:
# Global Python installations (shared across projects)
~/.mvx/tools/python/
├── 3.11.0/ # Python 3.11 installation
│ ├── bin/python3
│ └── lib/
└── 3.12.0/ # Python 3.12 installation
├── bin/python3
└── lib/
# Project-specific virtual environments (in each project)
project-a/
├── .mvx/
│ ├── config.json5
│ └── venv/ # Project A's isolated virtual environment
├── requirements.txt
└── src/
project-b/
├── .mvx/
│ ├── config.json5
│ └── venv/ # Project B's isolated virtual environment
├── requirements.txt
└── src/
🛡️ System Python Protection
mvx never modifies your system Python:
- No global package installations
- No PATH modifications outside mvx
- System Python remains untouched
- No
sudo
required for package management
📦 Automatic Dependency Management
{
tools: {
python: {
version: "3.12",
options: {
requirements: "requirements.txt" // Auto-installed in project venv
}
}
}
}
When you run ./mvx setup
:
- Downloads Python 3.12 to
~/.mvx/tools/python/3.12.0/
- Creates project-specific virtual environment
- Installs requirements.txt packages in the virtual environment
- Sets up isolated environment variables
🔄 Seamless Project Switching
# Work on Django project
cd ~/projects/django-app
./mvx setup # Creates .mvx/venv/ with Django
./mvx run server # Uses Django in isolated environment
# Switch to Flask project
cd ~/projects/flask-api
./mvx setup # Creates .mvx/venv/ with Flask
./mvx run server # Uses Flask in different isolated environment
Each project maintains its own:
- Python version (shared installation)
- Package versions (in
.mvx/venv/
) - Environment variables
- Virtual environment (in
.mvx/venv/
)
Benefits of project-local venvs:
- ✅ Automatic cleanup when project is deleted
- ✅ Clear ownership and easy discovery
- ✅ Project portability (can move/copy projects)
- ✅ No orphaned virtual environments
- ✅ Follows Python community conventions
Tool Discovery
List Available Tools
# List all supported tools
./mvx tools list
# Search for specific tools
./mvx tools search java
./mvx tools search node
Check Tool Versions
# List available versions for a tool
./mvx tools versions java
./mvx tools versions maven
# Check currently installed version
./mvx tools info java
Tool Installation
# Install all configured tools
./mvx setup
# Install specific tool
./mvx tools install java
./mvx tools install maven
# Verify tool installation
./mvx tools verify java
Tool Isolation
mvx manages tools globally while maintaining project-specific configurations:
- Global installation: Tools are installed in
~/.mvx/tools/
and shared across projects - Version isolation: Different projects can specify different tool versions in their config
- No conflicts: Tools don't interfere with system installations
- Clean removal: Delete
~/.mvx/
directory to remove all tools - Project configuration: Each project's
.mvx/config.json5
specifies which tool versions to use
Custom Tool Paths
Override tool paths if needed:
{
tools: {
java: {
version: "21",
path: "/custom/path/to/java" // Use custom installation
}
}
}
Tool Verification
mvx automatically verifies tool installations:
- Checksum verification: Downloaded binaries are verified against SHA256/SHA512 checksums
- ✅ Maven: Uses Apache's official SHA512 checksums
- ✅ Maven Daemon: Uses Apache's official SHA512 checksums
- ✅ Java: Uses Adoptium API SHA256 checksums
- ✅ Node.js: Uses official SHASUMS256.txt files
- ✅ Go: Framework ready for Go's checksum database
- Version validation: Ensures correct version is installed
- Path resolution: Verifies tools are accessible
- Health checks: Basic functionality tests
Checksum Configuration
Verification Modes
Optional Verification (default): Warns on checksum failures but continues installation
⚠️ Checksum verification failed: checksum mismatch
This could indicate a corrupted download or security issue.
Required Verification: Fails installation on checksum errors
{
tools: {
maven: {
version: "3.9.6",
checksum: {
required: true // Fail installation if checksum verification fails
}
}
}
}
Custom Checksums
Provide your own checksums for enhanced security:
{
tools: {
maven: {
version: "3.9.6",
checksum: {
type: "sha512", // sha256 or sha512
value: "abc123def456...",
required: true
}
}
}
}
Checksum URLs
Use external checksum sources:
{
tools: {
maven: {
version: "3.9.6",
checksum: {
type: "sha512",
url: "https://archive.apache.org/dist/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.zip.sha512",
filename: "apache-maven-3.9.6-bin.zip",
required: true
}
}
}
}
Automatic Checksum Sources
mvx automatically fetches checksums from official sources:
- Maven:
https://archive.apache.org/dist/maven/maven-{version}/binaries/{filename}.sha512
- Maven Daemon:
https://archive.apache.org/dist/maven/mvnd/{version}/{filename}.sha512
- Java: Adoptium API at
https://api.adoptium.net/v3/assets/latest/{version}/hotspot
- Node.js:
https://nodejs.org/dist/v{version}/SHASUMS256.txt
- Go: Planned integration with Go's checksum database
Security Best Practices
-
Enable required verification for production:
{ tools: { maven: { version: "3.9.6", checksum: { required: true } }, java: { version: "21", checksum: { required: true } }, node: { version: "22.14.0", checksum: { required: true } } } }
-
Pin specific checksums for critical tools:
{ tools: { maven: { version: "3.9.6", checksum: { type: "sha512", value: "specific-checksum-here", required: true } } } }
-
Verify checksums manually for sensitive environments by downloading from official sources
Adding New Tools
Want to see a tool added to mvx?
- Open an issue with tool details
- Check our contribution guide
- Submit a pull request with tool implementation