Skip to content
C3Control / Continuity
Mobile documentation

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

ThingLimit
Any wire message256 KiB
Prompt to an agent64 KiB
Terminal input per send16 KiB
Terminal grid400 columns × 240 rows
Scrollback per request2,000 lines
Keys per key-send command64
Topology snapshot4 MiB, transferred as 96 KiB encrypted chunks
Sessions per snapshot256
Snapshot transfers4 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:

ClassExpiry
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

ListenerPortUsed by
TLS 1.34222Bridges, C3Sync devices
Pinned WSS8443Phones

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)

ComponentQualifiedBuilt, pending qualification
AppAndroidiOS
BridgeLinux x64, Linux ARM64macOS (x64/ARM64), Windows x64
Terminal modeStream (Linux/macOS)Snapshot (Windows)

Expo Go is unsupported by design — certificate pinning requires the native build.