C3 Mobile / Reference
Updated 2026-07-24
Limits & protocol notes
C3 Mobile's protocol (v2) is deliberately bounded: every message class has a hard size cap and a short lifetime. The caps below are generous for their purpose; hitting one usually signals a misuse the protocol is refusing.
Message and payload bounds
| Thing | Limit |
|---|---|
| Any wire message | 256 KiB |
| Prompt to an agent | 64 KiB |
| Terminal input per send | 16 KiB |
| Terminal grid | 400 columns × 240 rows |
| Scrollback per request | 2,000 lines |
| Keys per key-send command | 64 |
| Topology snapshot | 4 MiB, transferred as 96 KiB encrypted chunks |
| Sessions per snapshot | 256 |
| Snapshot transfers | 4 per 30 seconds |
Terminal frames are coalesced to roughly 20 fps on streaming hosts.
Message expiry
Commands are live-or-dead — a message that can't be delivered promptly expires instead of executing later:
| Class | Expiry |
|---|---|
| Terminal input | ~5 s |
| Mutations (workspace/tab/pane operations, prompts) | ~10 s |
| Reads (snapshots, pane reads) | ~30 s |
Combined with the app's refusal to send while disconnected, there is no offline command queue anywhere in the system.
Channel lifecycle
Encrypted channels between phone and bridge are re-keyed on every reconnect and at most every 15 minutes; command and event directions use independent keys; sequence numbers are monotonic with replay windows, and duplicate requests are deduplicated for 10 minutes.
Network
| Listener | Port | Used by |
|---|---|---|
| TLS 1.3 | 4222 | Bridges, C3Sync devices |
| Pinned WSS | 8443 | Phones |
Both are configurable at hub init (--listen, --ws-listen). Control traffic is ephemeral core NATS — nothing mobile-related is persisted on the hub.
Platform qualification (current beta)
| Component | Qualified | Built, pending qualification |
|---|---|---|
| App | Android | iOS |
| Bridge | Linux x64, Linux ARM64 | macOS (x64/ARM64), Windows x64 |
| Terminal mode | Stream (Linux/macOS) | Snapshot (Windows) |
Expo Go is unsupported by design — certificate pinning requires the native build.