Skip to content
← Back to all tools

Jami

Free

Chat and video calls with no central server — your account is a key pair on your device

Open Source No Ads No Tracking No Sign-up Cross-platform

A peer-to-peer communication app from the GNU project. Text, voice and video calls and group conferences run directly between devices rather than being stored on a central server. Sign-up needs no phone number or email; the account is a key generated on your device, and a username is optional.

Why we picked it

GPL-3.0, an official GNU package, developed primarily by the Canadian company Savoir-faire Linux. The code lives on its own GitLab at git.jami.net; GitHub has only mirrors.

The fundamental difference from Signal or Element is architectural: there is no server that stores messages. Devices find each other through the OpenDHT distributed hash table and then open an encrypted connection directly, and message history lives on participants' own devices. In group conversations (called swarms) every device keeps a full copy, and a device that was offline syncs from whichever members are reachable when it comes back.

Creating an account means generating a key pair locally; your identity is a 40-character Jami ID. You can register a username on ns.jami.net to make yourself easier to find, but you do not have to. One account can be linked to several devices, and the desktop client can export an account archive.

Beyond text it does one-to-one and group video calls, screen sharing and file transfer, and it can act as a SIP client for traditional phone lines.

To be clear about:

  • There is no password recovery. The keys exist only on your devices. Lose them all without a backup and the account is gone. Link a second device or export the archive right after sign-up.
  • Offline delivery depends on someone being online. If neither side is reachable, a message waits until the two devices meet.
  • "No server" is not literally zero servers. The default bootstrap node (bootstrap.jami.net), the username server, the TURN relay used when NAT traversal fails, and the DHT proxy used for mobile push are run by the project. All can be replaced with your own, but in the default setup they are in the path.
  • On phones, turn off battery optimization for Jami, or the system kills the background connection and calls and messages do not arrive.