Chat & Voice
Adding contacts and starting a conversation
Chat in Poter is peer-to-peer: messages travel straight from your device to theirs, with no chat server in between. Click the Add friend icon at the top of the conversation list — the dialog offers four routes.
1. Peer ID / invite link / group link. Paste it in and click New conversation. Besides a bare Peer ID, it accepts invite links of the form poter://chat/<peerId> and group links of the form poter://chat/group/<groupId>.
2. Send them your invite link. The dialog shows your own invite link and a QR code for it — click Copy and send it over. Clicking the link launches Poter on their side and creates the conversation automatically, but they still have to `Accept` your friend request in Contacts.
3. Pair in person. One side clicks Generate pairing code and reads or sends the code over; the other pastes it in and clicks Pair. On success both sides create the conversation and send friend requests to each other. Pairing codes are valid for ten minutes and time out with a message if they are not used.
A pairing code is a fairly long string beginning with ticket: — not a short code like X7K-P2Q. The example in the input box is only a placeholder.
4. Look up by email or Poter ID (requires signing in). Enter an email or Poter ID and click Search for an exact match. No match reports that no user was found with that email; a failed search usually means you are not signed in or the server is unreachable.
Whichever route you use, the other person has to accept the friend request before they appear in your contacts. Requests land under Contacts → Friend requests, where they can Accept or Ignore; ignoring only hides it locally and the requester is not told.

The same identity on more than one device
Two devices restored from the same recovery phrase share one contact book and the same conversations. You do not add your friends again.
- 1v1 — the account remembers which room is actually used with that friend. The second device joins that room instead of opening an empty one of its own. The other person (including an older client that has not upgraded) does not need to change anything.
- Groups — the group list follows the identity, so the second device sees the same groups and can keep talking.
- History — messages from before this device joined are decrypted via key sharing under the identity when possible; wait a minute or two after restore before opening a conversation.
- Friend requests — a request that arrived on the first device is visible and actionable on the second.
Contacts you have never messaged do not get a room in advance — only conversations that already have messages are synced, so the engine is not filled with empty rooms.
End-to-end encryption
Messages in P2P conversations are end-to-end encrypted by default (Olm/Megolm, the same family Matrix uses). A normally encrypted message carries no special marker in the UI.
If encryption is not ready when you hit send, the send fails outright with "cannot encrypt — end-to-end encryption is not ready". It never falls back to sending plaintext.
Occasionally a message shows a lock icon and "message cannot be decrypted" — usually the other side's keys have not arrived yet. Poter replaces it with the real message automatically once they do, with nothing for you to do.
If a group message shows an "unverified signature" warning triangle, that sender's signature did not check out. It may just be a key that has not synced yet — but if it shows up repeatedly, pay attention.
Group chats
Click the new-group icon at the top of the conversation list, type a group name and save — whoever creates it becomes the owner.
- Invite to group — the owner or an admin clicks this in the group header, picks from their friends, and the invitee sees it under Contacts → Group invites with a
Joinbutton. - Invite link —
Invite linkcopies apoter://chat/group/…URL. Anyone who pastes it into the "New conversation" box joins and lands on the roster.
Knowing only the group ID will not get you onto the roster. Membership is attested through a directed invite that carries an invite record, so send the invite link to people you actually invited.
The owner and admins can rename the group, invite, remove members, and promote or demote admins. Leaving asks for confirmation once and then deletes the local group history.
Sending files and media
Send from this machine directly, or pick something from My P2P files. Files you receive also have to be saved manually to reach your library — they are never written to disk on their own.
Voice calls
Click the phone icon in the conversation header to start a call (the button is labelled with the literal English word Call). Audio runs over its own channel, Opus-encoded, with a separate layer of encryption for the call.
Once connected, a green ● LIVE pill appears at the top along with the encryption state: 🔒 End-to-end encrypted means the frame is encrypted, ⚠ Unencrypted means it is not. This is the only place in Poter where a 🔒 appears — message bubbles never show one.
Three things have to hold at once for a call to connect:
- The other side accepts the call — they get an incoming-call dialog, and declining hangs up.
- They have that conversation open — incoming calls are found by polling that only runs while the conversation is active, so someone elsewhere in the app may never see it.
- Both sides are online and addressable — directly or through a relay. When the addressing information is missing the connection is skipped silently, with no message.
You can mute yourself mid-call; hanging up clears the encryption material for that call.
Deleting messages
Only your own messages have a delete button.
In Poter P2P conversations (one-to-one and groups) deleting is delete for everyone: a redaction record and a document tombstone are written, the message disappears on their side too, and it is removed locally right away. The UI asks for confirmation once.
A deleted bubble renders as "[message deleted]". There is currently no "remove it on my side only, leave theirs alone" option.