Jarvy
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.
Why Jarvy?
- 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
Contributor Onboarding (Clean Laptop)
Brand-new machine, nothing installed? Two commands:
# 1. Install Jarvy
|
# 2. Clone + provision everything else
&& &&
That'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.
Installation
# With Cargo
# With Homebrew (macOS/Linux)
# Or download a binary from GitHub Releases
# https://github.com/bearbinary/jarvy/releases
Verify installation:
Early-Release Channel (Opt-In)
Jarvy 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 |
# Windows PowerShell
|
Per-update — pass --channel:
Persistent — set in ~/.jarvy/config.toml:
[]
= "beta" # stable | beta | nightly
Channel 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.
Quick Start
1. Create a config
# Interactive wizard
# Or from a template
Or create jarvy.toml manually in your project root:
[]
= false
[]
= "latest"
= "20"
= "latest"
= "latest"
2. Run setup
Output:
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)
3. Share with your team
Commit jarvy.toml to your repository. Add to your project's README:
# Set up development environment
&&
Configuration
Jarvy supports simple and detailed tool specifications:
[]
= false
[]
# Simple: tool = "version"
= "latest"
= "20"
= "3.12"
= "latest"
# Detailed: tool = { version, version_manager }
= { = "stable", = true }
# Role-based tool sets
[]
= "Frontend development"
= ["node", "bun", "typescript"]
[]
= "DevOps/Platform engineering"
= "base"
= ["kubectl", "terraform", "docker", "helm"]
# Post-install hooks
[]
= "echo 'Environment ready!'"
[]
= "corepack enable"
# Environment variables
[]
= "$PWD"
= "development"
# Custom project commands (used by interactive menu)
[]
= "npm start"
= "npm test"
See Configuration Reference for all options including environment variables, secrets, services, drift detection, network/proxy settings, and git configuration.
Shell Completions
Jarvy supports tab completions for all major shells:
# Bash
# Zsh
# Fish
# PowerShell
Or view installation instructions for your shell:
Key Commands
| 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.
Use in CI/CD
GitHub Actions
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 --ci
The --ci flag enables non-interactive mode with CI-provider detection (GitHub Actions, GitLab CI, CircleCI, Azure DevOps, Jenkins, Bitbucket).
Scaffold a New Tool
Contributors can add tool support using the built-in scaffolding command:
# Creates src/tools/mytool/ with the define_tool! macro template
# Or if cargo-jarvy is installed:
AI/LLM Integration
Jarvy includes a built-in MCP server that lets AI agents discover, check, and install tools via JSON-RPC:
For AI agents and LLMs, see llms.txt for a structured reference optimized for machine consumption.
Documentation
- Quickstart Guide
- Configuration Reference
- CLI Reference
- Hooks
- Adding Tools
- CI/CD Integration
- MCP Server
- FAQ
- Privacy Policy
Contributing
We welcome contributions! See CONTRIBUTING.md for guidelines.
# Build
# Test
# Lint
&&
# Scaffold a new tool
License
Dual-licensed under MIT or Apache-2.0, at your option.