Skip to content

juslintek/rawenv

Repository files navigation

rawenv

Native dev environments. Zero dependencies. One binary.

CI Release License: MIT

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.

Install

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.0

Quick Start

Run 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 16

Check 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         stopped

Then 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 Reference

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.

How It Works

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 = true

Architecture

rawenv (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 Sandbox

Build from Source

Requires Zig 0.16.0+:

git clone https://github.com/juslintek/rawenv
cd rawenv
zig build
./zig-out/bin/rawenv --help

The GUI window links raylib, which is compiled from source and is opt-in:

zig build -Dgui=true
./zig-out/bin/rawenv gui

Cross-compile:

zig build -Dtarget=x86_64-linux
zig build -Dtarget=x86_64-windows
zig build -Dtarget=aarch64-macos

Run tests:

zig build test

License

MIT — see LICENSE.

About

Raw native dev environments. Zero overhead. Written in Zig.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors