| name | vx-project |
| description | Project management guide for vx. Use when setting up a new project, configuring vx.toml, or managing project-level tool versions and scripts. |
VX Project Management Guide
Quick start: Run vx init to create vx.toml, vx setup to install all tools, vx dev to enter the dev environment. For existing projects, just run vx setup after cloning.
Project Setup
Initialize a Project
vx init
vx init --template node
vx init --minimal
Project Detection
vx automatically detects project types and suggests tools:
vx analyze
vx analyze --json
Detected ecosystems: Node.js, Python, Rust, Go, Java, .NET, C/C++, Zig
Detected frameworks: React, Vue, Angular, Next.js, Nuxt, Svelte, Django, Flask, FastAPI, Tauri, Electron, React Native, NW.js, and more
Detected package managers: npm, yarn, pnpm, bun, pip, uv, cargo, go modules
The project analyzer reads indicator files like package.json, pyproject.toml, Cargo.toml, go.mod, etc. to suggest the right tools.
vx.toml Configuration
Basic Structure
[tools]
node = "22"
go = "1.22"
uv = "latest"
rust = "1.80"
just = "*"
[tools.msvc]
version = "14.42"
os = ["windows"]
[tools.brew]
version = "latest"
os = ["macos", "linux"]
[scripts]
dev = "npm run dev"
test = "cargo test"
lint = "npm run lint && cargo clippy"
build = "just build"
ci = "just ci"
release = "just release"
[hooks]
pre_commit = ["vx run lint"]
post_setup = ["npm install", "cargo fetch"]
Multi-Python Legacy Projects
For projects that need modern Python plus legacy Python 3.7 or 2.7, keep the
runtime requirements in vx.toml and the environment/test matrix in justfile:
[tools]
uv = "latest"
python = "3.12"
just = "latest"
[scripts]
test = "vx just test"
test-legacy = "vx just test-legacy"
venv312:
vx uv venv .venv312 --python 3.12
vx uv pip install --python .venv312 -r requirements.txt
venv37:
vx uv venv .venv37 --python 3.7
vx uv pip install --python .venv37 -r requirements-py37.txt
venv27:
vx uv venv .venv27 --python 2.7
.venv27/bin/python -m pip install -r requirements-py27.txt
test312: venv312
.venv312/bin/python -m pytest
test37: venv37
.venv37/bin/python -m pytest
test27: venv27
.venv27/bin/python -m pytest
test-legacy: test37 test27
test: test312 test-legacy
Agents should use vx uv venv ... --python 3.7 and
vx uv venv ... --python 2.7; vx resolves those versions to managed
interpreters. Python 2.7 is a legacy compatibility path using PyPy2.7 and
PyPA's Python 2.7 virtualenv.pyz, so flag CPython-only extension risks early.
Multi-Version Runtime Test Matrices
When a project promises compatibility across several runtime lines, record the
baseline runtime in vx.toml and put every compatibility lane in justfile.
This keeps local developer testing, CI, and AI-agent verification aligned.
[tools]
node = "22"
python = "3.12"
uv = "latest"
just = "latest"
[scripts]
test = "vx just test"
test-matrix = "vx just test-matrix"
[ai]
skills_hash = "<recorded by vx ai setup --project>"
test-node18:
vx node@18 npm test
test-node20:
vx node@20 npm test
test-node22:
vx node@22 npm test
venv37:
vx uv venv .venv37 --python 3.7
vx uv pip install --python .venv37 -r requirements-py37.txt
venv312:
vx uv venv .venv312 --python 3.12
vx uv pip install --python .venv312 -r requirements.txt
test-py37: venv37
.venv37/bin/python -m pytest tests/py37
test-py312: venv312
.venv312/bin/python -m pytest tests/py312
test-matrix: test-node18 test-node20 test-node22 test-py37 test-py312
test: test-matrix
Agents should use the matrix recipe (vx just test-matrix or
vx run test-matrix) when changing shared code. Add the smallest missing lane
when a bug report mentions an unsupported Python, Node.js, npm, pnpm, or yarn
version.
Project AI Skills Hash
vx ai setup installs built-in vx skills globally by default. Use project scope
only when the repository wants local skill copies:
vx ai setup --project
vx ai check
vx ai setup --project --force
Project setup records [ai].skills_hash in vx.toml. vx ai check compares
that hash with the embedded skills hash and reminds developers to refresh stale
project skills.
Version Constraints
| Constraint | Example | Meaning |
|---|
| Exact | "1.2.3" | Only version 1.2.3 |
| Major | "1" | Any 1.x.x |
| Minor | "1.2" | Any 1.2.x |
| Latest | "latest" | Always latest |
| Any | "*" | Any available version |
| Range | ">=1.0.0 <2.0.0" | Range constraint |
Platform-Specific Tools
[tools]
node = "22"
uv = "latest"
[tools.msvc]
version = "14.42"
os = ["windows"]
[tools.brew]
version = "latest"
os = ["macos", "linux"]
Project Commands
Setup & Sync
vx setup
vx sync
vx sync --clean
vx sync --check
Running Scripts
vx run dev
vx run test
vx run build
vx run --list
Lock File
vx lock
vx lock --update
vx lock --check
The vx.lock file ensures reproducible builds:
[tools]
node = { version = "22.0.0", checksum = "sha256:..." }
go = { version = "1.22.0", checksum = "sha256:..." }
Environment Management
Project Environment
vx dev
vx env list
vx env activate
eval $(vx env activate)
Environment Variables
Define in vx.toml:
[env]
NODE_ENV = "development"
DATABASE_URL = "postgresql://localhost:5432/dev"
API_KEY = { env = "API_KEY", required = true }
Dependency Management
Add/Remove Tools
vx add node@22
vx add go rust uv
vx remove node
Check Constraints
vx check
vx check --json
vx check --fix
Multi-Package Projects
Monorepo Support
For monorepos, create vx.toml in root:
[tools]
node = "22"
pnpm = "latest"
[scripts]
install = "pnpm install"
build = "pnpm -r build"
test = "pnpm -r test"
Workspace Packages
Individual packages can have their own vx.toml:
[tools]
go = "1.22"
[scripts]
dev = "go run ./cmd/server"
Best Practices
1. Version Pinning
Pin versions for CI/CD:
[tools]
node = "22.0.0"
2. Lock Files
Always commit vx.lock:
git add vx.lock
3. Scripts Organization
Group related scripts:
[scripts]
dev = "..."
watch = "..."
test = "..."
test:watch = "..."
build = "..."
build:prod = "..."
4. Hooks for Quality
Use hooks for automated checks:
[hooks]
pre_commit = ["vx run lint", "vx run test"]
post_checkout = ["vx sync"]
Project Templates
Create reusable templates:
vx template create my-template
vx init --template my-template
Template Structure
~/.vx/templates/my-template/
├── vx.toml
├── .gitignore
├── README.md
└── hooks/
└── post_setup.sh