WebSocket relay server for Hone cross-device sync. Routes messages between devices in shared rooms with offline buffering and persistent delta storage.
Device A ──WebSocket──► Relay ◄──WebSocket── Device B
│
├─ authenticate (token-based)
├─ join room
├─ route messages (unicast / broadcast / host)
├─ buffer for offline devices
└─ persist deltas (SQLite)
- Devices connect via WebSocket and authenticate with a signed token
- Devices join a shared room (identified by room ID)
- Messages are routed between devices in the same room
- If a device is offline, messages are buffered and delivered on reconnect
- Deltas are persisted to SQLite for durable sync state
Requires Bun:
bun install# With environment variables
HONE_AUTH_SECRET=your-secret-here bun run src/app.ts
# Or with a config file
cp relay.conf.example relay.conf
# Edit relay.conf with your settings
bun run src/app.tsConfiguration is read from relay.conf (key=value format), with environment variable overrides taking precedence.
| Env Variable | Config Key | Default | Description |
|---|---|---|---|
HONE_RELAY_HOST | host | 0.0.0.0 | Bind address |
HONE_RELAY_PORT | port | 8443 | HTTP server port (WS = port + 1) |
HONE_AUTH_SECRET | auth.secret | (empty) | Token signing secret |
HONE_RELAY_SQLITE_PATH | sqlite.path | ./relay.db | SQLite database path |
HONE_RELAY_MAX_ROOMS | max.rooms | 1000 | Maximum concurrent rooms |
HONE_RELAY_MAX_CLIENTS_PER_ROOM | max.clients.per.room | 10 | Max devices per room |
HONE_RELAY_BUFFER_TTL | buffer.ttl.seconds | 300 | Offline message buffer TTL |
docker build -t hone-relay .
docker run -p 8443:8443 -e HONE_AUTH_SECRET=your-secret hone-relaybun testsrc/app.ts— Server entry point, WebSocket message routingsrc/auth.ts— Token-based device authenticationsrc/ws-hub.ts— WebSocket connection managementsrc/rooms.ts— Room membership and lifecyclesrc/buffer.ts— Offline message bufferingsrc/delta-store.ts— SQLite-backed persistent delta storagesrc/config.ts— Configuration parsing (file + env vars)src/rate-limit.ts— Per-IP rate limiting
MIT