runy
Kubernetes-style config for your dev environment
Declare what a workspace needs in YAML: dev servers, ports, worktrees, watchers. The runy daemon brings them to the state you declared and keeps them there.
Switch a namespace on and its resources come up. preview checks out a worktree, runs its hook and loads the workspace inside it, nested under acme.
A workspace, run like a cluster
A cluster declares what should run and a controller makes it so. runy borrows that shape for the dev environment: resources in YAML documents, a daemon that reconciles them, status you can read.
Declare
A .runy/ folder is a namespace. Each YAML document in it is a resource: a kind, a name and a spec. A spec can read what another resource has published.
kind: process
name: web
spec:
cmd: pnpm
args:
- dev
- --port
- ${ port.web.status.value }
restart: { on: failure }Reconcile
The daemon renders every document, holds one back until what it reads exists, starts what is missing and restarts what fails its health check.
Observe
Every resource publishes a condition and a status. runy ps lists them, the console shows the tree, and each line of output is kept in a journal.
{
"state": "running",
"pid": 48213,
"healthy": true,
"restarts": 0
}Every line of output is kept
A process's output goes to a SQLite journal the console streams. The same query filters what is stored and what arrives next.
How journals workTick @stderr, or type a word.
Built for the whole stack
What a workspace needs around its processes, and what the daemon does with it.
Health checks
http, tcp or exec probes publish healthy. A check that fails N times in a row restarts the process.
Ports and domains
A port finds a free port and publishes it. The daemon's proxy serves it at web.localhost, or behind a tunnel.
Worktrees
A branch is checked out, its hooks run, and the namespaces inside it load as a child workspace.
Journals
Output lands in SQLite, filtered by stream, level or word, and streams to the console as it arrives.
Expressions
${ port.web.status.value } reads another resource's status. The reader waits until it is there.
Upgrades in place
A rebuilt CLI hands its running processes to the new daemon. Your dev servers stay up.
Up in a minute
The guide writes a first .runy/ folder, activates it and opens the console.

