kolu
Docs

@kolu/surface

Declare live state once.

A surface is a typed, reactive slice of live state — a handful of values, lists, streams, events, and callable procedures — that you declare once. From that one declaration the framework derives the wire contract, wires the server, and binds the client. You stop hand-writing “fetch, then subscribe, then reconcile, then reconnect” and just read the values.

The same declaration works whether the state lives in the browser tab, in a long-lived daemon, or on a fleet of machines across an ssh network. You learn it once, in one process, and the same shape carries all the way out.

Three strata

The docs are organised as three layers. Basics is the foundation. Daemons and Multi-host each build on the basics independently — you can go straight to either. You only need the daemon layer for multi-host when a remote box happens to run one.

The three strata of a surfaceBasics is a wide foundation carrying three packages. Two independent pillars — Daemons and Multi-host — each rest on Basics on their own, side by side rather than stacked. Multi-host uses Daemons only when a remote box happens to run one.Daemonslong-lived local processes@kolu/surface-daemon@kolu/surface-daemon-supervisorexemplar · kavalMulti-hostthe same surface across an ssh fleet@kolu/surface-remote@kolu/surface-mapexemplar · drishtisometimesbuilds on basicsbuilds on basicsBasics — the foundationone app, one process · declare · serve · consume@kolu/surface@kolu/surface-app@kolu/surface-mcp
Not a ladder: Basics is the foundation, and Daemons and Multi-host are independent doors that each rest on it on their own. Multi-host reaches for Daemons only when a remote box happens to run one.

The two upper strata are independent doors, not a ladder you must climb: kaval proves a daemon needn’t be multi-host, and drishti proves a multi-host fleet needn’t be daemons. Multi-host assumes the basics; daemons are optional to it.

What each layer answers