The differences that matter
What's built.
Where the edge is.
These are backed by the Android client and service today. Phone-number
discovery is off by default and enforced by the service, not just the UI.
Channels are public broadcast content, while private conversations are
end-to-end encrypted.
01
in the app
Media that arrives as bytes
Photos and video are encrypted on your phone with a one-off key, and that key is sealed to the recipient. What lands in our storage bucket is a file we cannot open — verified by a live end-to-end test, not by assertion.
upload · ciphertext + wrapped key
our disk · a viewable image
02
in the app
Gone means gone from disk
Set a timer and a sweeper on the server deletes the row every sixty seconds — not a client-side trick that hides the message while the bytes quietly persist. The copy on your phone and the copy on ours both stop existing.
server row · deleted
hidden in the UI, kept on disk
03
in the app
A number nobody sees
Signing up needs a number and an SMS code — we're not going to pretend otherwise. What's different is afterwards: no other user is ever shown it. It isn't in your profile or in the API response your contacts get, people reach you at an @username, and exact-number discovery is off by default.
@you · how people find you
+63 ··· ···· · never shown to anyone
04
in the app
Encrypted reactions
Private reactions are hidden encrypted conversation events. The service routes ciphertext and never stores the emoji in a readable reaction column. Channel reactions remain readable because channels are public.
❤️💀🔥
→ a7f2…
05
in the app
Safety-number verification
Each device renders the real identity-key fingerprint and QR payload. Compare or scan them in person to detect a substituted public key.
crypto layer · real fingerprint
the screen · real QR comparison
06
in the app
Number discovery controls
Exact-number discovery is off by default. You can allow everyone, contacts you have already saved, or nobody; the backend enforces that choice and never returns the number itself.
default · nobody
server-enforced · exact match only
07
in the app
Forward secrecy
One-time prekeys protect one-to-one messages and upgraded conversations refuse a legacy downgrade. Compromise of a current identity key does not expose earlier forward-secret ciphertext.
silent legacy downgrade
one-time prekey → consumed
08
in the app
Panic & decoy
A second passcode opens an isolated harmless profile, while the real profile remains separately encrypted. Strong-biometric unlock is disabled while a decoy is armed so it cannot reveal which profile is real.
···· → your chats
···· → a boring inbox
09
in the app
Sealed messages, edits, voice notes
Blur-until-tapped sealed messages, encrypted edits, and encrypted voice notes all travel through the private conversation envelope. Microphone access begins only when you record or call.
✨ tap to reveal
edited · 0:14 voice note
10
in the app
Channels & bigger groups
Group keys are wrapped separately to each authorised member and rotate after membership changes. Broadcast channels are implemented as a deliberately readable public surface, not disguised as private chat.
4 members · 4 sealed copies
one shared server key
11
in the app
Voice & video calls
One-to-one voice and video calls use authenticated signalling and WebRTC DTLS-SRTP. Media goes peer-to-peer when possible and uses a TURN relay when needed; Kalvien does not record it.
e2e · one-to-one
TURN · encrypted relay fallback
12
in the app
Multi-device
Authorise another Android device with an expiring pairing offer, transfer private material to that authorised session, review every active device, and revoke one without server-side key escrow.
your devices · hold the keys
our server · holds a copy