Jami does secure text, voice and video communication over the internet. It also does conferences calls and video conferences, but oddly, it does not yet do text-based chatrooms, as the developers are trying to make these fully decentralized. Jami is a great choice for making secure phone calls over the Internet as long as those you want to talk to are also using Jami. Jami is peer-to-peer; it does not rely on or need central servers.
Jami is cross-platform, with versions for Android, FreeBSD, iOS, iPhone, Linux, Microsoft Windows, and OS X. It does not, as of March 2020, have a version for the Pinephone.
It is both a peer to peer voice-over-IP client program and a custom protocol for service discovery using a distributed hash table (DHT). It uses SRTP to carry communications data.
Jami has been a GNU project since 2016.
History and (in)compatibility[edit | edit source]
Jami started out as a standard SIP voice over IP client with the name “sflphone”. That original program is still in a lot of distributions repositories. As an example, Fedora 30 offers a wildly outdated packages called
sflphone-gnome which were last updated in 2014.
sflphone was re-named to Ring late 2016. The name Ring did sort-of not stick; Ring was re-named to Jami’ in December 2018. However, Jami is still called “Ring” in quite a few instances.
dl.jami.net refers to the package repositories for Linux distributions as
Jami can no longer be used as a client for traditional SIP and IAX services. This functionality has been stripped from the program.
Jami has it’s own unique DHT service discovery protocol. One person running Jami on a phone can “discover” and call another person running Jami regardless of what network they are on without going through any central server. This may appear to be fantastic and in principle it is. However, Jami is the only program implementing the “jami” DHT protocol. You can not call someone using the Tox protocol using Jami. You can also not call or be called by anyone using traditional SIP/IAX VOIP software such as Zoiper. Jami’s service discovery is limited to discovery of other people using Jami. There is also a compatibility problem between older and newer versions of Jami. The version included in the older Debian 9 Stretch uses the beta2 version of the DHT protocol and this version is not compatible with the final version used by modern versions.
In November 2019, the version changed from “Live free or die” to “Free as in Freedom”. “Free as in Freedom” has a better UI and more cross-platform support, but more dependencies, and it is almost completely incompatible with “Live free or die”.
Compatibility between different versions is not a priority for the developers; they suggest that everyone install their repository and always use the latest version. Needless to say, this causes some problems if you are using a third-party package database (unless everyone you want to talk to is using the same package database, which in a company, may sometimes be the case).
Jami is available for several platforms including Android, Linux, Windows and macOS. You can use a single Jami account from multiple devices using the “Export Account” function.
The Linux version[edit | edit source]
These screenshots show version “Live free or die”. After November 2019, the version changed to “Free as in Freedom”. “Free as in Freedom” has a similar but less confusing UI.
The GNU/Linux version of Jami is built on the GNOME libraries and design principles. It will start up and launch a dialog box asking for a username and password. You can register a new “Jami” Username ID if you do not already have one. This step works fine.
Jami’s register dialog box
Jami will present a window with no contacts – since you don’t have any the first time you use it – upon the first launch. It looks like this:
Jami’s main window
The main window has a button for sharing a QR code with your user-id with others, and your user-id, printed as text. Frankly, it’s way easier to tell the friend the name than it is to scan a QR code; the QR code is really only useful if you decided not to register a name and your identifier is a 40-character hexadecimal number.
The easier method is to type the registered Jami ID of your friend (the one appearing next to the QR code, which is the thing they wrote in the “Username box on the last screen”) into the searchbox at the top left. Alternately, you can tell them to type your registered username (“chaewon”, in this screenshot) into their searchbox.
Alternately, someone with the Android version of Jami who’s in front of your desktop computer can scan your QR code and add you that way.
In either case, this will pop up a dialog box prompting you to confirm or deny the contact. That contact will be added to your list if you accept the friend invitation.
There is no button, or menu option labelled adding other users. None. This is maybe not the best UI choice for a program which is meant for communicating with others. It’s perplexing – to put it mildly.
There is a “settings” button (with a gear icon, top center) where some options can be changed. There is no menu or anything like that since it’s a GNOME-style program.
The Android Version[edit | edit source]
Jami version 20190602-01 from the free F-droid was more feature-complete than the GNU/Linux version. (the developer claims this is no longer the case; please update)
The Android version of Jami.
The Android version of Jami has one default setting which completely breaks it:(outdated?) It will by default not run as a background service and therefore not accept calls. This can be changed by entering
Run in the background can be enabled under “System”. This will increase the phone’s battery use while idle. However, it is required for the program to accept calls when it’s not open. Jami is pointless if it only accepts calls when you’re looking at it so enabling this option on your phone as well as the phones of people you want to call is essential.
Adding and removing contacts on Jami for Android can be done by telling someone the registered name, sharing a QR code, or scanning a QR code (same as in the desktop version above). It’s not possible to import a QR code from an image, it has to be scanned. You can share your QR code by e-mail or other programs. Those who receive it would have to open it on some other device and scan it using their phone.
Communicating with registered contacts works as long as the other party has their the Jami running and they configured it to run as a background service. It is possible to make voice and text calls. It is also possible to send text and files stored on the phone. The chat interface does have a Camera button in addition to a pick file icon. Clicking the Camera button does not do anything.(outdated)
Voice calls sound clear as a regular phone calls when the call is made between people on high-speed broadband in the same area. This does not tell you much about the call quality over a typical Internet connection so take it with a grain of salt.
Jami’s interesting technology. Using DHT for service discovery instead of central servers means you can just install it and use it without asking anyone. Calls are encrypted using secure encryption, and all the data are stored only on your computer or phone, so Jami’s got privacy and security covered (but if you don’t do backups using the “Export Account” function, you could lose all your account data and thus your account).
Jami can only be used to call other people who have Jami installed and running and this severely limits it’s usefulness as a general-purpose communications tool. You will have to make everyone you want to talk to install and run it if you want to use it regularly.
The Android version is quite nice and it may be useful if you manage to many of your friends install it (inviting them to a virtual party is a good way to do this). The Linux version works similarly, and there are also versions for Windows, iOS, etc., so you can talk to non-Linuxxy friends. You can use a single Jami account from multiple devices.
The Android version is available from the free software F-Droid appstore as a package named f-droid.org: cx.ring. There is not yet a version available for the Pinephone.
Linux distributions will either have a really old version of Jami in their repositories or not have it at all; these will not talk well to the newer versions. Up to date versions for Debian, Ubuntu and Fedora are available from https://jami.net/download-jami-linux/
The Jami git repository has a wiki page with technical protocol information.