PROJECTS

LOOM / 05

Nodes & Network

Browse all chapters

Work can happen on several machines without pretending they are one filesystem. Main coordinates the system; each node still owns its local reality.

A coordinating Main, not a cloud of interchangeable machines

Main owns shared coordination, policy, archive, discovery and knowledge. Workspace nodes host local providers and report local state. In the current architecture, inter-node coordination and sharing route through Main rather than forming an unrestricted peer-to-peer mesh.

A small public edge can provide a reachable network endpoint and ingress without becoming the keeper of canonical LOOM state. External services, including a cloud backup destination, remain external dependencies with their own credentials and availability.

Four different flows
WorkspaceLocal work & providers
Public edgeReachability / ingress
Public clientPublished application only
MainCoordination & durable state
Cloud historyExternal retained copies
Canonical state stays on Main.
The edge is replaceable.
Workspace → private network → Main

A typed capability request reaches Main for authorization and routing. The application payload is not part of that request.

Conceptual topology and logical flows, not live traffic. A selected path illustrates responsibility; it does not describe every physical hop or promise availability.

This is a coordinating architecture, not a high-availability claim. The preview does not promise automatic Main failover, interchangeable database replicas or uninterrupted operation during a network partition.

Four paths that should not be confused

Control
Requests and observations

Private capability calls, policy, node identity and state reporting connect providers to Main.

Files
Working data and custody transfers

Configured mounts, watched roots and Lane move or expose selected material under their own contracts.

Ingress
An application's public interface

DNS, TLS and a reverse proxy publish an explicitly selected service, not the whole control plane.

Recovery
Off-host retained history

Backup traffic sends selected recovery material to a configured destination; it is not a live sync mount.

For the illustrative research-sync project, a laptop can ask Main for application status without transferring its library. A Lane send transfers a selected file batch under a separate operation. A research client accessing the published WebDAV endpoint follows yet another path, governed by the application's authentication.

Use existing infrastructure, give it a coherent role

The backend is written in Go, with a daemon and node-agent components. PostgreSQL supplies durable state on database-capable nodes. Nix and NixOS describe packages and the reference service configuration, so service identities and runtime dependencies can be reviewed alongside the application.

WireGuard is the selected private network substrate, with a small replaceable public endpoint. Caddy is the selected reverse proxy and TLS ingress. Borg handles cloud archive history. LOOM integrates these systems; it does not claim to have invented their networking, database or backup mechanisms.

The reference service host is x86_64 Linux with NixOS. macOS serves as a development and workspace client. Package or development-shell availability on another architecture is not proof that every optional runtime component is supported there.

Node enrollment, keys, addresses, mounts, service identities and credential references are operator configuration. The public example host deliberately uses synthetic values. Applying it unchanged to a real machine is not an installation procedure.

A missing machine is still missing

An observation of a node is not a live view forever. Disconnection, stale status and unavailable providers need to remain visible. A remembered path does not prove its files are currently reachable, and a past successful desktop capture does not prove the Mac is online now.

Paired Mac computer use uses its own bridge and permissions. A shared browser and normal SSH are different surfaces. They should not be silently substituted for one another when a requested connection is unavailable.