Skip to content

runy

Your dev stack,
declared in YAML

runy runs the dev servers, ports, folders, worktrees and watchers a workspace declares in its .runy/ folders, from one daemon that keeps them up.

Get startedInstall

⌄acme
›api3
api
api
worker
›db2
data
postgres
›docs1
docs
⌄web2
web
web
OutputOverview@stdout, @stderr, field: value…
17:37:30Reloading workspace
17:37:31web/port/web: Resolved · 3010 → http://web.localhost
17:37:32web/process/web: starting · pid 48213
17:37:34web/process/web: running healthy

Switch a namespace on. Its resources come up in the tree and in the journal.

From YAML
to running

dev.yaml
kindprocess
nameweb
spec.cmdpnpm
spec.args[dev, --port, ${ port.web.status.value }]
spec.restart{ kind: fixed, delay: 1000 }
spec.healthweb: http { port: ${ port.web.status.value } }

The file
is read.

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.

OutputOverview@stdout, @stderr, field: value
17:37:32Starting process: pnpm dev --port 3010
17:37:32VITE v7.3.1 ready in 412 ms
17:37:32Local: http://localhost:3010/
17:37:33[vite] hmr invalidate /src/App.tsx Could not Fast Refresh
17:37:33page reload src/config.ts
17:37:34Health check `web` passes
17:41:18hmr update /src/routes/home.tsx
17:41:18hmr update /src/styles/app.css
17:42:50hmr update /src/components/Menu.tsx
17:42:50hmr update /src/components/Menu.tsx (x2)
17:55:10TS2322: Type 'string' is not assignable to type 'number'.
17:55:10[vite] Internal server error: Transform failed with 1 error
17:55:41hmr update /src/components/Menu.tsx
17:55:41page reload src/config.ts
17:56:02Health check `web` passes
How journals work

Tick @stderr, or type a word.

Five kinds,
one document each.

Read the reference
cmdthe program, on the daemon's PATH or relative to cwdrequired
argsits arguments; each may be an expression[]
envvariables added to the daemon's environment{}
cwdworking directory, relative to the workspace rootthe root
restartnever, always, or { kind: fixed | exponential, on, … }never
watcha file set whose changes restart the processnone
healthnamed http, tcp or exec checks{}
journal.max_lineslines the journal keeps1000

Up in
a minute

The guide writes a first .runy/ folder, activates it and opens the console.

$curl -fsSL https://setup.runy.dev | sh
runy 0.6.0 installed to ~/.local/bin
$cd products/ && runy ns up
web: up
$runy ps
web/port/webResolved3010 → http://web.localhost
web/process/webResolvedrunning healthy
Get started