Native macOS · open-source · BYOK

Local dev environments for AI-native developers.

Unibench is a native macOS app that runs Postgres, Qdrant, MinIO, Ollama, and your own code from a single unibench.toml. Polyglot, dependency-graph-first, with an opt-in agent that uses your own keys.

postgresredisqdrantollamaminio

One file. The whole environment.

Drop a unibench.toml into a project and Unibench knows what to run, in what order, and how to wire it up. No global state, no hidden config — every change to the environment is a diff in your repo.

Five blessed services come pre-modeled. Anything else fits one of the generic types — pick what matches the workload, not what the tool expected you to bring.

# unibench.toml
[project]
name = "python-rag-baseline"

[services.postgres]
type = "postgres"
version = "16"

[services.qdrant]
type = "qdrant"

[services.api]
type = "process"
command = "uv run uvicorn app:app --reload"
depends_on = ["postgres", "qdrant"]

Built for the way you actually work.

Manifest is the source of truth
Everything Unibench knows about your project lives in unibench.toml. Edits in the UI write back to disk; nothing about a service exists only in the app's memory.
The graph is the UI
The dependency graph is the home screen. Start a node and its dependencies come up first; stop a node and Unibench refuses to leave dependents stranded.
AI agent that's earned its tools
Opt-in, read-only, BYOK to Anthropic, OpenAI, or local Ollama. Every tool call is audited; every write to disk is gated behind a confirmation diff.

Polyglot by default.

Python, Node, Rust, Go, anything you can describe with a shell command — Unibench runs it. The generic service types cover the long tail without forcing you to wrap your runtime in a container or learn a new DSL.

processtask_servicecontainercomposeremote
Your machine. Your keys. Your data.
Unibench runs on your laptop. No accounts, no telemetry by default, no project data leaves the machine unless you ask the agent to talk to a remote model — and even then, it's your API key talking to your chosen provider.
# 1. Grab the latest DMG
open https://github.com/0xhaz/Unibench/releases/latest

# 2. Drop a manifest in your project
cat > unibench.toml <<'EOF'
[project]
name = "hello-unibench"

[services.api]
type = "process"
command = "python -m http.server 8000"
EOF

# 3. Open the folder in Unibench. Press ⌘R.

From zero to graph in three steps.

Download the DMG, drop a manifest next to your code, hit run. Unibench picks up the rest — services spin up in dependency order, ports are surfaced, logs stream live.