Signal vs Miluven: which private messenger fits you?
Signal and Miluven both encrypt your messages end to end, both are free software, and neither shows ads. They are built on very different ideas about who should run the servers. This is a plain comparison, written by the maker of Miluven, that tries to be fair to both.
If you already use Signal and are happy with it, there is a good chance it is the right app for you, and this article will say so where that is true. If you are curious about an open, federated alternative, or you want to know what you would give up and gain by switching, read on.
What each one is
Signal
Signal is a messenger and a network in one. Signal Messenger LLC, part of the non-profit Signal Foundation in the United States, writes the apps and runs the servers. Everyone on Signal talks through Signal's servers. Its encryption protocol, the Signal Protocol with its Double Ratchet, is the reference design for end-to-end encrypted messaging; OMEMO, the encryption Miluven uses, is built on it too. The apps and the server code are published under the AGPLv3.
Miluven
Miluven is an Android chat app on XMPP, an open, federated messaging standard with many independent servers, a bit like email. It is a fork of Conversations, the XMPP app that Daniel Gultsch has developed since 2014, and almost everything that makes it a good chat app (the encryption, the calls, the reliability) is Conversations' work. Miluven adds a few things on top: anonymous polls, shared task lists, live location and a choice between a Strict and a Normal mode on first start.
Miluven runs no chat server and hands out no accounts. You sign in with an XMPP address from any server: one your family, employer or provider gives you, a free one from a non-profit such as Disroot, or one you host yourself. Miluven is a personal project by one developer in the Netherlands, released under the GPLv3.
At a glance
| Topic | Signal | Miluven |
|---|---|---|
| Account and identity | Phone number required to sign up. Optional usernames since 2024; your number is hidden by default from people who don't already have it. | An XMPP address (you@example.org) and password from any server. No phone number or email asked for by the app. |
| Servers and federation | One central service run by Signal. No federation by design. | Any XMPP server. Federated: you can talk to people on other servers and in other XMPP apps. |
| Encryption defaults | Every message, call and group is end-to-end encrypted, always. | OMEMO on by default for one-to-one chats and private group chats. Public channels, and chats with people whose app lacks OMEMO, are not encrypted. |
| Metadata | Sealed sender hides the sender from Signal's servers; Signal says it can only hand over an account's registration date and last connection date. | Your XMPP server sees your contact list, who you talk to and when, message sizes, group membership and your IP address. What it keeps depends on its operator. |
| Platforms | Android and iPhone; desktop apps for Windows, macOS and Linux linked to your phone. | Android only (7.0 and newer), from Google Play. On a computer, use another XMPP app such as Gajim or Dino with the same account. |
| Groups and calls | Large groups with admin controls, group video calls and call links. | Private group chats and public channels with moderation; encrypted one-to-one audio and video calls, peer to peer where possible. |
| Extras | Stories (can be turned off), disappearing messages, polls in groups (voters are visible to the group), encrypted backups. | Anonymous polls, encrypted on your phone, in one-to-one and group chats; shared task lists; live location; scheduled messages; stickers. Polls, task lists and live location only in Normal mode. |
| Push and battery | Uses Google's push service (FCM) on Android when it is available, as a wake-up signal without message content; otherwise its own background connection. | No Google push: the app keeps its own connection to your server, so Google is not in the push path. On some phones the battery saver has to be told to leave the app alone, or messages can arrive late. |
| Open source and licence | Apps and server under the AGPLv3, source published on GitHub. | GPLv3, a fork of Conversations. The source of the build on Google Play is published as a zip, linked from the terms page. |
| Who runs it, funding | Signal Messenger LLC (California), part of the non-profit Signal Foundation; funded by donations, with early funding from WhatsApp co-founder Brian Acton. | One developer in the Netherlands. Takes no donations. Your server is run by whoever you choose. |
| Self-hosting | The server code is public, but a self-hosted server does not join the Signal network. | Run your own XMPP server and you still reach everyone else on XMPP. |
Where Signal is better
Encryption you never have to think about
On Signal there is no unencrypted chat. Messages, calls, groups, profiles and stories are all end-to-end encrypted, and there is no setting that turns it off. Miluven turns OMEMO on by default for one-to-one chats and for private group chats, but a chat can still be unencrypted: when you switch encryption off for it, when your contact uses an XMPP app without OMEMO support, and in public channels, which are unencrypted by design. A lock icon tells you which is which, but you have to look.
Much less metadata
This is the biggest real difference. Signal has built a lot specifically to know as little as possible about you: sealed sender hides who sent a message from its own servers, and contact discovery runs inside secure enclaves so the server does not learn your address book. Signal itself calls sealed sender "an incremental step" that does not prevent correlation by timing or IP address, but the published subpoena responses show how little it holds: the date an account registered and the date it last connected.
On XMPP, your server operator necessarily sees much more: your contact list, who you message and when, how large each message is, which groups you are in, and your IP address in its logs. The content of encrypted messages stays unreadable, but the social graph does not. Miluven also leaves OMEMO's message padding off, as Conversations does, so message sizes are visible. You can choose an operator you trust or run the server yourself, but you cannot make that metadata disappear.
Post-quantum work
Signal added post-quantum protection to the start of a conversation with PQXDH in 2023, and in October 2025 announced SPQR, a post-quantum ratchet that runs alongside the Double Ratchet, which Signal began rolling out gradually with the stated plan to enforce it once all clients support it. Miluven's OMEMO uses the older Java library of the Signal Protocol (signal-protocol-java 2.6, as Conversations does), not Signal's current libsignal: the classical X3DH key exchange and Double Ratchet, with no post-quantum protection.
Your contacts are probably already there
The people you want to reach are far more likely to have Signal installed than an XMPP app. With Miluven, each contact needs an XMPP account and an app of their own, and you may have to explain servers and addresses to them first. For most people this matters more than any feature in this article.
Easy to start, on every device
Signal needs only a phone number to get started. Miluven needs an XMPP account, which means picking a server first and trusting its operator, and that is a real step for many people. Signal also has apps for Android, iPhone and desktop from one team; Miluven is Android only, and for a computer or an iPhone you rely on other XMPP apps.
Maturity, scale and scrutiny
Signal is run by a non-profit foundation with paid staff and infrastructure that serves a very large network. Miluven stands on Conversations' long track record, but Miluven itself has only been a chat app since September 2026, is maintained by one person, and its own additions (polls, task lists, live location and the rest) have not had an independent audit.
Where Miluven is better
No phone number, no central account
Signal still ties every account to a phone number, even with usernames hiding it from others. Miluven asks for no phone number or email at all (some XMPP servers ask for an email address when you register; many do not), and the address book is only used on your phone, never uploaded. Your identity is an address on a server you picked, and nobody but that server's operator holds your account.
Your choice of server, and you can leave
Signal's own case for centralisation, "The ecosystem is moving", argues that federation slows a protocol down, and it is a fair argument. The other side of it is that with Signal there is one operator for everyone, in one jurisdiction. With XMPP you choose the operator, the country and the retention policy, or you run it yourself, and you can move to another server or another app without leaving the network. Miluven itself holds no messages and no accounts.
Self-hosting that still connects
You can run Signal's server code, but a self-hosted server is an island: it does not talk to the Signal network. A self-hosted XMPP server is a full member of the XMPP network, so a family, a club or a company can keep its own data and still reach everyone else.
No Google in the push path
On Android, Signal uses Google's push service when the phone has it. Those pushes carry no message content, only a wake-up signal, but Google still learns that, and when, your phone was woken for Signal. The Miluven build on Google Play contains no Firebase and keeps its own connection to your XMPP server, so Google is not in the push path at all. The cost is that on some phones the battery saver has to be told to leave the app alone, or messages can arrive late. There is no analytics, crash reporting, advertising or tracking in the app or on this website.
Anonymous polls and shared lists
Signal added polls in 2025; they are end-to-end encrypted and work in group chats, and the group can see who voted for what. Miluven's polls work in one-to-one and group chats and are anonymous: the question and options are encrypted on your phone with AES-256-GCM, the key travels only inside the chat message, so it is as private as that chat: protected by OMEMO in an encrypted chat, readable by the server in an unencrypted one. The poll service stores counts and a salted voter hash; no names are stored, and no IP addresses are stored with a poll. Polls and task lists are deleted after 90 days. These extras use a small service at miluven.app and are only available in Normal mode; in Strict mode the app talks to your XMPP server alone, plus OpenStreetMap while you look at a map. The privacy policy lists exactly what goes where.
Which should you choose?
- You want the strongest privacy with the least effort: choose Signal. Encryption everywhere, very little metadata, and nothing to configure.
- Your contacts are on iPhone or mostly use a computer: Signal. With Miluven, each of them would need an XMPP account and an XMPP app of their own, on iPhone or on a computer (such as Gajim).
- You do not want to give a phone number to anyone: Miluven, with an account on a server you trust.
- Your family, club or company already runs an XMPP server, or wants to own its chat: Miluven, against that server.
- You need to stay reachable by people on other XMPP apps and servers: Miluven, since Signal does not federate.
- Your phone has no Google services, or you want none in the push path: Miluven keeps its own connection; Signal uses Google's push where it is available and its own background connection where it is not.
- Your group decides things together and you want votes to stay anonymous: Miluven's polls, in Normal mode.
- Your threat model includes powerful adversaries who would use metadata: Signal. An XMPP server operator, or anyone who can compel one, sees who talks to whom.
Using both is also a perfectly good answer: Signal for the friends who are already there, and XMPP for the groups that want their own server.
Try Miluven
Free, no ads, no tracking. Bring an XMPP account from any server, or get a free one from a provider such as Disroot.
Sources
- Signal, Terms of service and privacy policy
- Signal, Published responses to government subpoenas
- Signal blog, Usernames and phone-number privacy (February 2024)
- Signal blog, Sealed sender (October 2018)
- Signal blog, Technology preview: Private contact discovery for Signal (September 2017)
- Signal blog, PQXDH (September 2023)
- Signal blog, SPQR, the Sparse Post-Quantum Ratchet (October 2025)
- Signal blog, Polls (November 2025)
- Signal blog, Introducing Signal Secure Backups (September 2025)
- Signal blog, The ecosystem is moving (May 2016)
- Signal blog, The Signal Foundation (February 2018)
- Source code: Signal for Android and Signal Server
- Conversations, the XMPP app Miluven is built on
- Miluven's privacy policy and name and API terms
Spotted something out of date or unfair to either app? Tell us through the contact address and we will correct it.