If you use Jami on your phone, you’ve probably noticed how reliable it stays, even when the app is closed or your IP address changes. That stability isn’t magic. It comes from a piece of clever infrastructure working behind the scenes: proxy servers.
This week, we’re breaking it down. What are DHT proxies? Why does Jami use them on mobile? And how can you set one up yourself if you want more control over your connection?
First, let’s start with the basics.
What exactly is a DHT proxy?
A key function of proxy servers is their ability to hide the identity of the requester or the address of the accessed resource, but there are many other reasons to use them.
Jami is distributed software. This means it doesn’t rely on a central server; instead, information travels peer-to-peer between users. Instead than having a central entity that pass the informations between users, it’s as if each device is a node in a web, allowing everyone to communicate by passing encrypted data directly. This is different from decentralized software, which relies on multiple redundant servers.

On Distributed Communication Networks, Paul Baran (1962)
Some distributed projects use proxies for encapsulation, treating their local node and the rest of the network as a single entity within the connection graph. This approach allows them to avoid refactoring large portions of code when the communication protocol changes.
However, this is not how Jami uses proxies on mobile.
How proxies are used on mobile in Jami?
If Jami doesn’t use central servers, why do proxies come into play, especially on mobile?
The answer has to do with battery life and background activity limits enforced by Android and iOS. On mobile devices, operating systems like Android and iOS prevent apps from staying active in the background for too long to protect your battery.
However, in order to receive new messages or calls, Jami needs to remain connected to the network, since it is actually distributed, even when the app is asleep.
This is where OpenDHT comes in. OpenDHT is a distributed hash table that allows devices to find each other on the network using unique IDs. It keeps track of where everyone is, even if their IP address changes. You can think of it as a phone book.
But for this to work reliably and notify the user of new calls or messages, OpenDHT needs to run continuously in the background keeping connections open and listening for updates, again, mobile apps can’t do continuously.
The role of the OpenDHT proxy
To solve this, we created the OpenDHT proxy. This server stays online on behalf of your mobile device and listens for activity.
When something new happens (like an incoming message or call), it sends a push notification through Apple’s or Google’s notification services to wake your app up.
No personal data is ever transmitted in clear through the DHT proxy. All communications still use encrypted peer-to-peer connections between devices.
If you don’t want to rely on Apple or Google, you can disable this feature in your settings. On Android, you can also use UnifiedPush, a free/libre alternative to Google’s system.

Set up your own proxy for Jami
Want to host your own proxy and OpenDHT node? There are plenty of reasons you might want to:
- Reduce data and battery usage on your phone
- Have more control over your connections
- Or just because you think it’s cool
Whatever your reason, running your own DHT node is a good start ! You’ll find all the steps in Running a node with dhtnode
If you want to run your own DHT proxy, i will be a bit more complex as you will have to deal with push notifications. You can find our documentation on the subject here.
To conclude
Jami wouldn’t exist without your contributions, translations, feedback, and donations. As always, thank you for helping us build a freer future! ❤️