Skip to main content

Devices

Identity → Devices lists only installations signed in to the current account. The personal Devices table can also contain devices observed for other users, but those records never appear in this account-management view. It is separate from Network Viewer: Devices is where you name, pair, and forget installations; Network Viewer is the connection diagnostic.

The current installation is marked This device. Every row shows its name, online/offline state, latest path when connected, and human-readable last seen time. Open a row for its ID and management actions. Forget stays on the detail screen rather than being a dominant list action.

Add a device​

Add device in the persistent Identity action bar (or Settings → Add another device) opens #identity/devices/pair. The new device must be signed out and showing a code. See Add another device.

From a signed-in terminal:

peers devices pair 7-guitar-revenge-tunnel
peers pair 7-guitar-revenge-tunnel

Both commands are the same ceremony.

What is encrypted, on which transport​

Every connection between two Peers devices starts with a signed handshake in which each side proves its device identity. From that handshake both sides derive a per-connection key pair (an ephemeral X25519 exchange combined with the devices' static keys, run through HKDF-SHA256), and from then on every frame on the link is sealed with ChaCha20-Poly1305: RPC calls, sync traffic, file and database chunk streams, everything. The only cleartext byte per frame is a type marker; frame types, payload shapes, and sizes of the inner messages are not visible on the wire. Keys are per connection and forward secret: a device key leaked later does not decrypt a captured session.

The frame layer runs the same way on every transport, so confidentiality never depends on classifying a URL or trusting a certificate:

TransportUsed forFrame layerUnderneath
ws:// (LAN, headless, Electron)Same-network devices, peers-headless hostsChaCha20-Poly1305 per framePlain TCP; the frame layer is the only encryption
wss:// / https:// (cloud relay, peers-services)Devices that cannot reach each other directlyChaCha20-Poly1305 per frameTLS, with the certificate verified for hostname URLs (LAN IP URLs are dialed without a certificate check because they never present one)
wrtc:// (WebRTC data channel)Electron and PWA peers through NATChaCha20-Poly1305 per frameDTLS from WebRTC
Device pairing socketCredential transfer to a new deviceChaCha20-Poly1305 per framePAKE-derived admission token; credentials are additionally boxed to the new device's temporary identity

Legacy peers. A device running a build that predates the frame layer does not advertise it in its signed handshake. Against such a peer the connection falls back to the previous behaviour: each RPC message is individually signed and boxed when the transport is not already secure, and raw streams (chunk and database downloads) are not encrypted at the application layer. The device logs one warning per legacy connection naming the remote device and transport. A future release will refuse handshakes from legacy peers.

peers devices (CLI) marks each verified connection encrypted or legacy.

Pending device invites​

Device admission uses the same Invites table as contacts and groups, with type: "device". Nothing creates those rows yet. No admission actions exist for those rows yet, so they stay out of Needs your attention and the Devices badge. The UI will surface them only when a real decision flow exists.