Jarvy is a fast, cross-platform CLI that standardizes and automates local development environment setup from a declarative jarvy.toml config file. It installs 200+ tools using native package managers (Homebrew, apt, dnf, winget, Chocolatey) and ensures every team member has an identical development environment -- no cloud VMs, no containers, no recurring costs.
- Instant onboarding -- New developers run one command and get a fully configured workstation in seconds, not days
- Dev environment as code --
jarvy.tomlis version-controlled, replacing wiki pages and tribal knowledge - Cross-platform -- Same config works on macOS, Linux, and Windows using native package managers
- Local and offline -- No cloud dependency, no container overhead, full native performance
- Safe and idempotent -- Run repeatedly; Jarvy detects what's already installed and skips it
- 200+ tools supported -- From git and docker to terraform, kubectl, and language runtimes
Brand-new machine, nothing installed? Two commands:
# 1. Install Jarvy
curl -fsSL https://raw.githubusercontent.com/bearbinary/jarvy/main/dist/scripts/install.sh | bash
# 2. Clone + provision everything else
git clone https://github.com/bearbinary/jarvy && cd jarvy && make setupThat's it. make setup runs scripts/bootstrap.sh, which is idempotent — re-run any time you've been away from the project or the environment drifts.
Windows (PowerShell): swap step 1 for irm https://raw.githubusercontent.com/bearbinary/jarvy/main/dist/scripts/install.ps1 | iex, then run the same git clone ... && cd jarvy && make setup.
Already have a tool installed via your own package manager? Jarvy detects it and skips reinstall. It only adds what's missing.
Want to skip the curl pipe? brew install jarvy or cargo install jarvy work too — assuming you already have brew or cargo on the machine.
# With Cargo
cargo install jarvy
# With Homebrew (macOS/Linux)
brew install jarvy
# Or download a binary from GitHub Releases
# https://github.com/bearbinary/jarvy/releasesVerify installation:
jarvy --versionJarvy ships pre-release tags (-rc.N, -beta.N) to a separate channel so
you can validate fixes and features before they land in stable. Opt in any
of three ways — all are reversible.
On install — set JARVY_CHANNEL before running the install script:
# Unix
JARVY_CHANNEL=beta curl -fsSL \
https://raw.githubusercontent.com/bearbinary/jarvy/main/dist/scripts/install.sh | bash
# Windows PowerShell
$env:JARVY_CHANNEL = 'beta'
irm https://raw.githubusercontent.com/bearbinary/jarvy/main/dist/scripts/install.ps1 | iexPer-update — pass --channel:
jarvy update --channel betaPersistent — set in ~/.jarvy/config.toml:
[update]
channel = "beta" # stable | beta | nightlyChannel semantics:
| Channel | Accepts |
|---|---|
stable |
Only vX.Y.Z tags |
beta |
vX.Y.Z, vX.Y.Z-rc.N, vX.Y.Z-beta.N |
nightly |
Everything including -alpha.N |
Opting into beta is the easiest way to help validate releases. Issues
tagged release-blocker or regression filed against a pre-release block
its promotion to stable — see
docs/release-testing.md for the full process.
# Interactive wizard
jarvy init
# Or from a template
jarvy init --template react
jarvy init --template rust-cli
jarvy init --template python-api
jarvy init --template k8s-adminOr create jarvy.toml manually in your project root:
[privileges]
use_sudo = false
[provisioner]
git = "latest"
node = "20"
docker = "latest"
jq = "latest"jarvy setupOutput:
Setting up development environment...
[OK] git 2.44.0 (installed: 2.44.0) - satisfies requirement
[INSTALL] node 20 - installing via brew...
[OK] node 20.11.1 installed successfully
[OK] docker 25.0.3 (installed: 25.0.3) - satisfies requirement
[INSTALL] jq latest - installing via brew...
[OK] jq 1.7.1 installed successfully
Setup complete: 4 tools (2 installed, 2 already satisfied)
Commit jarvy.toml to your repository. Add to your project's README:
# Set up development environment
cargo install jarvy && jarvy setupJarvy supports simple and detailed tool specifications:
[privileges]
use_sudo = false
[provisioner]
# Simple: tool = "version"
git = "latest"
node = "20"
python = "3.12"
docker = "latest"
# Detailed: tool = { version, version_manager }
rust = { version = "stable", version_manager = true }
# Role-based tool sets
[roles.frontend]
description = "Frontend development"
tools = ["node", "bun", "typescript"]
[roles.devops]
description = "DevOps/Platform engineering"
extends = "base"
tools = ["kubectl", "terraform", "docker", "helm"]
# Post-install hooks
[hooks]
post_setup = "echo 'Environment ready!'"
[hooks.node]
post_install = "corepack enable"
# Environment variables
[env.vars]
PROJECT_ROOT = "$PWD"
NODE_ENV = "development"
# Custom project commands (used by interactive menu)
[commands]
run = "npm start"
test = "npm test"See Configuration Reference for all options including environment variables, secrets, services, drift detection, network/proxy settings, and git configuration.
Jarvy supports tab completions for all major shells:
# Bash
jarvy completions bash >> ~/.bashrc
# Zsh
jarvy completions zsh >> ~/.zshrc
# Fish
jarvy completions fish > ~/.config/fish/completions/jarvy.fish
# PowerShell
jarvy completions powershell >> $PROFILEOr view installation instructions for your shell:
jarvy completions --instructions| Command | Description |
|---|---|
jarvy setup |
Install all tools from jarvy.toml |
jarvy init |
Create a new config interactively or from a template |
jarvy doctor |
Health-check your environment |
jarvy validate |
Validate a jarvy.toml file |
jarvy diff |
Show what's installed vs. what's needed |
jarvy drift check |
Detect environment drift from baseline |
jarvy tools |
List all 200+ supported tools |
jarvy templates list |
Browse available project templates |
jarvy completions |
Generate shell completions |
jarvy diagnose |
Create a diagnostic bundle for support |
jarvy mcp |
Start the MCP server for AI agent integration |
Run jarvy --help for the full command reference.
jobs:
setup:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Jarvy
uses: bearbinary/jarvy/.github/actions/setup-jarvy@main
with:
method: cargo
- run: jarvy setup --ciThe --ci flag enables non-interactive mode with CI-provider detection (GitHub Actions, GitLab CI, CircleCI, Azure DevOps, Jenkins, Bitbucket).
Contributors can add tool support using the built-in scaffolding command:
# Creates src/tools/mytool/ with the define_tool! macro template
cargo run -p cargo-jarvy -- new-tool mytool
# Or if cargo-jarvy is installed:
cargo jarvy new-tool mytoolJarvy includes a built-in MCP server that lets AI agents discover, check, and install tools via JSON-RPC:
jarvy mcpFor AI agents and LLMs, see llms.txt for a structured reference optimized for machine consumption.
- Quickstart Guide
- Configuration Reference
- CLI Reference
- Hooks
- Adding Tools
- CI/CD Integration
- MCP Server
- FAQ
- Privacy Policy
We welcome contributions! See CONTRIBUTING.md for guidelines.
# Build
cargo build
# Test
cargo test --verbose -- --show-output
# Lint
cargo fmt --all && cargo clippy --all-features -- -D warnings
# Scaffold a new tool
cargo run -p cargo-jarvy -- new-tool <name>Dual-licensed under MIT or Apache-2.0, at your option.