← All articles
Sovereign XMPP

Read on your phone, read on your Mac: receipts that sync through your own server

28 October 2026 · 4 min · xmpp · read-receipts · chat-markers · metadata · privacy · e2e · sovereign · self-hosting

You’re on the train, you read the message, you answer it. An hour later you open your Mac — and the same chat is glowing with an unread badge, as if the conversation had happened to someone else. Two devices, two truths about the same chat. For most messengers, keeping those truths in sync is one more job for the vendor’s cloud. In Infium, the receipt that says “you read this” travels through your own XMPP server — and that difference is the point of this article.

Read status is metadata too

The privacy conversation usually stops at the words. Your messages are end-to-end encrypted, so the story is told. But “you read this message, at this minute, on this device” is not the message — it’s a fact about you. It’s metadata, the same quiet category as who you talk to and when.

Now think about what happens to that fact in a mainstream messenger. The read state of every chat — what you’ve opened, when, how quickly — is a precise behavioral record, and it lives in the same cloud as your account. Cross-device sync is exactly how that cloud earns its keep: your Mac knows what your phone read because the vendor’s servers track it for you. Convenient, and quietly expensive.

A sovereign messenger shouldn’t have to borrow that convenience from someone else’s infrastructure.

The receipt goes through your server

The latest Infium release, v0.9.78, makes the read state follow you from device to device. If you read a chat on your phone, it now shows as read on your Mac too — even if the Mac app was closed when you read it.

The mechanics are standard XMPP, running on the server you chose (or run yourself):

  • When you read a chat, your client sends a read marker — a small chat-marker stanza — to the person you’re talking to and, through your server, to your other devices.
  • If another device is online, it gets the marker live, the same way it gets your own messages mirrored to it.
  • If a device was off — the Mac was closed, the app was killed — it picks the marker up from your server’s message archive when it starts. That archive is the same one that holds your history, and it’s on your infrastructure, not a corporation’s.

That last path is the one that used to break: start the Mac, and the archive replay of the marker was dropped on the floor — “read on the phone, still unread on the Mac after launch”. v0.9.78 fixes exactly that, so a cold start now means “caught up”, not “forgotten”.

Encrypted like everything else

None of this sync is a peek into your reading habits for the server. The read marker is a message like any other, and in encrypted conversations it travels inside the same end-to-end encrypted control envelope as the rest of your chat. The server routes it; it can’t read which message the marker points at, because the envelope is decodable only on your devices.

And the meaning of “read” stays a decision your client makes. The badge clears up to the message you actually read — a message that arrived after you put the phone down stays unread, on every device, until you’ve really seen it. The receipt is honest, not theatrical.

Strict outside, cozy inside

This is the same deal as everything else in a sovereign messenger, applied to one more quiet surface — the same surface we looked at when we talked about what your lockscreen reveals. Privacy doesn’t end at the text of a message. It’s every bit of metadata: who, when, from where — and now, read or not.

So the read state is the perfect small test of the architecture. In a mainstream app, cross-device read sync is a reason your account, your contacts, and your reading history all have to live in the vendor’s cloud. In Infium, the exact same convenience runs through your own XMPP server: the message, the receipt, and the archive never leave infrastructure you can point at.

That’s the cozy part — the unread badge is one truth everywhere, because the state is yours. The strict part: it got there without adding a single fact about you to someone else’s servers.

Want to feel the difference? Request an invite and try the live demo — read a message on one device, and watch the other one already know.

← back to infium.net