Native dev environments. Zero dependencies. One binary.
rawenv detects your project stack, downloads verified runtimes, and manages everything through OS-level isolation — no Docker, no VMs, no overhead.
Built with Zig 0.16. Cross-compiles to macOS, Linux, and Windows.
Download the latest release binary for your platform into ~/.rawenv/bin.
macOS (auto-detects Apple Silicon vs Intel):
mkdir -p "$HOME/.rawenv/bin"
case "$(uname -m)" in arm64|aarch64) A=arm64 ;; *) A=x64 ;; esac
curl -fsSL "https://github.com/juslintek/rawenv/releases/latest/download/rawenv-darwin-${A}" \
-o "$HOME/.rawenv/bin/rawenv"
chmod +x "$HOME/.rawenv/bin/rawenv"Linux (auto-detects arm64 vs x86_64):
mkdir -p "$HOME/.rawenv/bin"
case "$(uname -m)" in arm64|aarch64) A=arm64 ;; *) A=x64 ;; esac
curl -fsSL "https://github.com/juslintek/rawenv/releases/latest/download/rawenv-linux-${A}" \
-o "$HOME/.rawenv/bin/rawenv"
chmod +x "$HOME/.rawenv/bin/rawenv"Prefer a one-liner? curl -fsSL https://raw.githubusercontent.com/juslintek/rawenv/main/install.sh | sh
detects your OS and architecture automatically.
For Windows, download rawenv-windows-x64.exe from the
releases page and rename it to rawenv.exe.
Add the binary to your PATH (add this line to ~/.zshrc or ~/.bashrc to make it permanent):
export PATH="$HOME/.rawenv/bin:$PATH"Verify the install:
$ rawenv --version
0.2.0Run rawenv init inside any project. It scans your manifests (package.json,
composer.json, .env, docker-compose.yml), detects runtimes and services,
and writes a rawenv.toml:
$ rawenv init
Created rawenv.toml
Detected runtimes:
node 22
Detected services:
postgresql 16Check project health at any time with rawenv status:
$ rawenv status
Project: my-app
Config: rawenv.toml (valid)
Runtimes:
node 22 installed
Services:
NAME VERSION PORT STATUS
postgresql 16.9.0 5432 stopped
Warnings:
⚠ postgresql: binary not installed — run `rawenv add postgresql@16.9.0`List configured runtimes and services with rawenv services ls:
$ rawenv services ls
NAME VERSION STATUS
────────────── ───────── ──────────────
node 22 installed
postgresql 16 stoppedThen install what's missing, activate, and drop into an isolated shell:
rawenv add postgresql@16 # download, verify SHA256, extract to the store
rawenv up # activate runtimes via symlinks
rawenv shell # enter a shell with modified PATH + env vars| Command | Description |
|---|---|
rawenv init |
Detect project and generate rawenv.toml |
rawenv import <file> |
Import a docker-compose.yml into rawenv.toml |
rawenv detect |
Detect runtimes/services (--json); writes no files |
rawenv add <pkg>@<ver> |
Install a package (e.g. rawenv add node@22) |
rawenv up |
Activate all configured runtimes |
rawenv down |
Stop all services (reverse dependency order) |
rawenv services ls |
List configured runtimes/services with status |
rawenv status |
Quick project health check (--json) |
rawenv shell |
Enter rawenv shell with modified PATH |
rawenv dns |
Generate /etc/hosts entries for the project |
rawenv proxy |
Generate Caddy reverse proxy config |
rawenv tunnel <port> |
Print a tunnel command (cloudflared/bore/ngrok) |
rawenv connections |
Show service dependency map |
rawenv cell info |
Show available isolation backends |
rawenv discover |
Scan for projects on this machine |
rawenv destroy |
Remove this project's isolated data dirs (--force to skip prompt) |
rawenv uninstall |
Remove rawenv from this machine |
rawenv tui |
Launch the TUI dashboard |
rawenv gui |
Launch the GUI window (requires a raylib build — see below) |
rawenv menubar |
Launch the macOS menu bar status item |
rawenv ai "question" |
Ask the AI assistant (one-shot) |
rawenv deploy generate |
Generate IaC files (Terraform, Ansible, Containerfile) |
rawenv deploy apply |
Run deployment (dry-run by default) |
Run rawenv --help for the full list, or rawenv <command> --json where supported.
rawenv stores runtimes in ~/.rawenv/store/{name}-{version}/ and activates them by creating symlinks in ~/.rawenv/bin/. No global installs, no version conflicts.
~/.rawenv/
├── bin/ # symlinks to active runtimes (add to PATH)
└── store/
├── node-22/ # extracted runtime
├── postgresql-16/
└── redis-7/
Project configuration lives in rawenv.toml:
[project]
name = "my-app"
[runtimes]
node = "22"
[services]
postgresql = "16"
redis = "7"
[detect]
auto = truerawenv (single binary, written in Zig)
├── core/ config, detector, resolver, store, service manager, shell
├── network/ DNS, reverse proxy, tunnel, connection map
├── cells/ OS-native isolation (Linux namespaces, macOS Seatbelt, Windows Job Objects)
├── deploy/ Terraform, Ansible, OCI container images
├── ai/ LLM provider cascade, context builder, chat
├── tui/ Terminal dashboard
└── gui/ Native desktop app (raylib, opt-in)
Isolation backends by platform:
| Platform | Backends |
|---|---|
| Linux | cgroups v2, namespaces, Landlock |
| macOS | Seatbelt (sandbox-exec) |
| Windows | Job Objects |
rawenv cell info reports the backends available on the current machine:
$ rawenv cell info
Isolation backends available on this OS:
seatbelt (sandbox-exec) — macOS App SandboxRequires Zig 0.16.0+:
git clone https://github.com/juslintek/rawenv
cd rawenv
zig build
./zig-out/bin/rawenv --helpThe GUI window links raylib, which is compiled from source and is opt-in:
zig build -Dgui=true
./zig-out/bin/rawenv guiCross-compile:
zig build -Dtarget=x86_64-linux
zig build -Dtarget=x86_64-windows
zig build -Dtarget=aarch64-macosRun tests:
zig build testMIT — see LICENSE.