Architecture
Control plane
The control plane brings up and runs a mountOS deployment: stand up one HUB, administer it through the open-source admin SDK or the admin client, provision accounts and regions, deploy the in-region services that register back with the HUB, and publish the HUB domain as the single discovery URL every client uses.
The pieces
- HUB (appserv): one per deployment. It owns the admin database and the Hub vault, serves the Admin API at
/api/v1/*, authenticates everything, and answers discovery. - mountos-admin-sdk(opens in new tab): the open-source connector to the HUB, in TypeScript, Go, and Rust. It authenticates to the Admin API with the admin key. Integrate through the package, the REST API (
api.md), or a client generated from the API spec (api.yaml). The repo also ships a drop-in agentSKILL.md. - mountos-admin-client(opens in new tab): the open-source admin dashboard. It is a single-page app plus a small backend, which terminates the auth chain and reverse-proxies the Admin API to the HUB.
Two ways to administer
Once the HUB is running, all administration goes through its Admin API. The
SDK and the dashboard both talk to the running appserv (the HUB) at its URL, and both authenticate with the admin key.
Neither stands up the HUB. They administer one that is already running.
- SDK directly. Call
mountos-admin-sdkdirectly to reach/api/v1/*on the HUB. No UI required. - Admin client. A short-lived token is minted and handed to an operator as a login URL (
https://<dashboard>?token=...). The admin-client backend verifies it, issues a session, and from then on proxies the Admin API to the HUB. The browser never holds a long-lived service credential.
Bringing up a deployment
The same control plane takes a fresh deployment from nothing to serving clients.
- Stand up the HUB. Deploy
appservwith its admin database and Hub vault, seeded with the HUB's signing key and the admin verification key. See Vault and handshake. - Administer it. Reach the Admin API with the SDK directly, or launch the admin client with a short-lived token URL.
- Provision. Create accounts, users, and storages. An account is the tenant. It owns its regions, users, and storages.
- Create a region. This writes a control-plane record only, the region's structure in the admin database. It spins up no servers or instances. It auto-creates the region's default cluster, named
uno, which is not ready until a service registers. The region's real infrastructure is provisioned separately, in the next step. - Set up the region. Deploy the in-region services, dataserv and gcserv, with the cluster's
REGION_CLUSTER_IDplus the region's database and vault. They self-register with the HUB. The first registration flipsunoto ready, and volumes can be assigned. Block storage is provisioned separately: its block volumes span distinct clusters for fault isolation, so they are not bound to a single cluster. See Deploy. - Hand out the HUB domain. Publish the HUB domain as the discovery URL. Every mountOS client resolves its volume's region and cluster there, then talks directly to that cluster for the session.
The HUB domain is the discovery URL
Clients are not configured with region or cluster addresses. They are given one thing, the HUB domain, and they resolve everything else from it at connect time. That keeps the client configuration stable as regions and clusters are added or a volume moves between clusters: the next discovery call simply returns the new owner. See Region clusters for how a volume maps to its owning cluster.