tabbify.io
Documentation
Product directionEDGE BOX
ReferenceArchitecture

Private Mesh

Every Tabbify supervisor and running application joins a userspace WireGuard overlay. Tenant policy limits which peers are visible, and each application gets a stable IPv6 ULA derived from its UUID. Public application traffic enters through the managed edge rather than exposing the workload port.

The current production data plane is relay-only. WireGuard packets between platform and workload peers pass through the managed relay; the service does not currently promise a peer-to-peer production path.

Coordinator and joiner

The mesh has two roles. The coordinator registers peers, assigns peer addresses, and returns an ACL-filtered roster. The joiner runs with each platform node or workload runner, opens a TUN device, and maintains the WireGuard session used for relay transport.

# Local coordinator example
tabbify-mesh-coordinator --bind 0.0.0.0:8888 \
  --tls-cert ./coord.crt --tls-key ./coord.key --tls-ca ./ca.crt \
  --policy-file ./acl.json --auth-url http://localhost:8080

# Joiner - the managed coordinator address is built into the distribution
tabbify-mesh join --name supervisor-01 --tag supervisor --tag firecracker \
  --tls-cert ./peer.crt --tls-key ./peer.key --tls-ca ./ca.crt \
  --join-token $MESH_JOIN_TOKEN

The managed coordinator address is built into the distributed joiner, so a managed node normally does not need an endpoint flag. Override it only for local development with --coordinator or TABBIFY_MESH_COORDINATOR.

Peer and per-app ULAs

Addresses come from two blocks. Platform peers get fd5a:1f00::/32. Apps get their own address fd5a:1f02:XXXX:XXXX:XXXX:0:0:1, where the three XXXX groups are the first six bytes of blake3(app_uuid) taken as three big-endian u16s — for example, UUID 0191e7c2-1111-7222-8333-444455556666 derives fd5a:1f02:44a5:240b:121a::1. The supervisor and edge compute the same address, so the application route remains stable across deployments. Supervisors advertise the app-ULAs they host on each heartbeat (POST /v1/mesh/heartbeat), and receiving peers install /128 routes so dialing [app_ula]:8730 reaches the right host.

{"peer_id":"<uuid>","ula":"fd5a:1f00:0000:0001::1","display_name":"supervisor-01",
 "tags":["supervisor"],"hosted_app_ulas":["fd5a:1f02:44a5:240b:121a::1"]}

There is no per-request application-to-host lookup. The edge computes derive_app_ula(uuid) and sends traffic to [app_ula]:8730; the installed mesh route carries that traffic through the relay to the selected supervisor.

Production transport

Joiners maintain a persistent connection to the managed relay at https://relay.tabbify.io. This gives hosts behind firewalls or NAT a consistent path without opening the application's guest port. The relay is part of the current production path and must be included in latency, capacity, and failure planning.

Encryption and access control

WireGuard encrypts mesh packets. Join tokens and tag-based ACL policy determine which peers enter a tenant network and which roster entries they can see. A policy change causes peers to refresh their visible roster.

Certificate options also exist for coordinator connections:

tabbify-mesh-ca init --out ./mesh-ca
tabbify-mesh-ca issue-peer --name supervisor-01 --ca-dir ./mesh-ca --out ./certs

Certificate use is not uniform across every platform hop today. Do not treat mesh encryption or peer visibility as application-level authorization; services must still validate callers and protect sensitive routes. Join-token claims, not self-declared peer tags, are authoritative in the managed network. See Auth & join tokens.

See self-hosting a node to join a machine to the mesh.