| 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"]
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