Manage your server infra from one web page. Realtime.
You install a small CLI on the box (mostly Linux). That agent stays connected to the web app. From the browser you can do the stuff you’d normally SSH for: Docker containers, restarts, shell, logs, monitors. Later we plug in OpenTelemetry and more.
One control plane. Many servers. No jumping between terminals every time something breaks.
| Piece | What it does |
|---|---|
| Web app | Dashboard. Live view. Trigger updates, restarts, open a shell, watch logs. |
| CLI agent | Runs on the server as a single binary. Talks to the web app over a realtime channel. Executes what you ask. |
| CI (GitHub for now) | Builds images / binaries. When source changes you can push updates the same way CF / Vercel / Netlify feel, but for your fleet. |
You are not SSH’d into five machines at once. You open the page, pick a server, do the job.
- Create / start / stop / restart Docker containers
- Run shell commands and see output live
- Watch service logs in realtime; keep error history when you need it
- Resource monitors (CPU, mem, etc.)
- Disable one service or everything from the outside world when you need a kill switch
- Later: OpenTelemetry inputs, richer metrics, alerts
Exact UI and CLI packaging are still moving. See ROADMAP.md.
Because the control plane is not a random Node script. We want:
- TanStack Start on Cloudflare (app + API + realtime in one deploy)
- Durable Streams + TanStack DB for live state (containers, jobs, log tails)
- A publishable CLI you
installon the server, always connected back to that app
The packages under packages/ are the building blocks for that path (web shell, db/stream codegen, UI, etc.). Product surface grows as the roadmap items land.
New Worker app from a seed: bun run create:app <name> (see packages/.templates/README.md).
Early. Public so people can follow along and contribute. Expect breakage; expect the roadmap to move.
If you just cloned this: start from ROADMAP.md for “what exists vs what’s next,” then poke packages/main for the web app side.
Realtime / DO streams (how createDoModule, StreamDB, and the client hooks work with examples and performance notes): packages/db/README.md.
HTTPS on Vite matters for StreamDB: browsers cap ~6 concurrent HTTP/1.1 sockets per host; TLS brings HTTP/2 multiplexing so many live stream requests don’t queue.
Brand / domains are per deploy: copy [brand.json.example](./brand.json.example) → brand.json (gitignored) and edit, or let setup:dev / bun run sync:brand create it from the example. Generated *.gen.* and scripts/install-agent.sh are also local.
bun install
bun run setup:dev # openssl certs + sync:brand
bun run codegen # when you touch DO / stream schemas
bun run up # upgrade bun, update deps, sync:brand, sync upstreams (optional)
bun run ok # typecheck, lint, react-doctor
bun run dev # https://localhost:5274 (falls back to http if certs missing)Why we need Bun + openssl. certs are only for the Vite app becasue streamdb opens connections over 6 concurrent HTTP/1.1 sockets per host and http blocks after that.
Prod install:
curl -fsSL https://monrep.dev/install | bash
sudo monrep init --url https://<your-app> --token <one-time>Local bind to Vite main (https://localhost:5274): see [packages/agent/README.md](./packages/agent/README.md) Local (main + agent). bun run --cwd packages/agent local.
bun run dev # or bun run --cwd packages/main dev
bun run --cwd packages/agent local -- --token <token>
# later:
bun run --cwd packages/agent localInstall URL and release asset names come from your local brand.json (see brand.json.example). After edits: bun run sync:brand. Details: [packages/agent/README.md](./packages/agent/README.md). Progress: [ROADMAP.md](./ROADMAP.md).
Issues and PRs welcome. Keep changes lean.
Full rules (quality gates, import/polish house style, and installing /monrep + Intent skills for AI agents): CONTRIBUTING.md.
Short version: don’t edit generated files under packages/db. Change the source and run bun run codegen. Agent hard rules live in [AGENTS.md](./AGENTS.md); if you code with Cursor, run bun run skills:install and keep the monrep skill in sync.
Questions or ideas → open an issue, or say hi in a PR.
MIT. See package.json.