Case studies
About us

A tale of a decentralized communication app development

A communication app based on local-first software principles

Back to showcase
Collaboration timeframe:

January 2019 – ongoing

Team size:

5 software developers, 1 tech lead


Electron, NodeJS, React, IPFS, OrbitDB, LibP2P, TypeScript


Research, Back-end and Front-end development

About the customer

Our customer is a creator of an open-source communication app inspired by the principles of local-first software. The app uses a peer-to-peer network to enable a decentralized instant messenger experience to compete with the likes of Slack, Telegram, or Discord. What’s unique about this one is the power it gives to its users - everyone is in full control and has ownership of their own data.

About the project

The customer was looking for a team capable of building a peer-to-peer network with minimal use of a centralized infrastructure. The main idea behind the product is to ensure its users full ownership of their own data without relying on a traditional, centralized architecture. Each client runs a hidden service that forms a mesh of connections. There is no central server responsible for mediating connections.


Communicators like Messenger, WhatsApp, or Slack all rely on centralized server-based architecture which means users lose access to their apps & whenever there’s an issue with the physical infrastructure. We’ve seen it all before with global outages of apps owned by Facebook (now renamed to Meta). The goal of our customer was to create an instant messenger app that’s independent of servers, and, at the same time, allows for a cloud-like user experience where clients can share and exchange data and access it from any device.

Building a decentralized communication app is not a piece of cake. A unique project like this one required a lot of creativity, brainstorming, and vast knowledge of technologies like IPFS and peer-to-peer protocols. In this particular case, there was no blueprint for software development and our engineers had to think out of the box to create custom protocols suitable for this type of communication app. 

Addressing the potential challenges to overcome, we separated three main points to focus on:

  • How to implement a local-first approach without compromising on the quality of communication?

  • How to assure fast communication & offline access to messages without relying on traditional architecture? 

  • How to enable the highest level of security for the apps’ users?

Keep on reading to see which technologies and tools we decided to use to overcome those challenges.


In order to give each peer a persistent address, and to protect the IP address of individual users, the app is built on the Tor network. Our experts had to find a way to build a set of  libp2p protocols that use WebSockets over Tor. Rumble Fish developers created a one-of-a-kind custom set of protocols as there were no ready-to-use tools to support what we had to do. Libp2p, according to its creators, is a modular system of tools and libraries that enable the development of peer-to-peer network apps - exactly what was needed in order to make a start. What was lacking was the protocol of how to implement WebSockets over the Tor network. Finding and implementing a custom solution for that was a demanding, yet very fun and satisfying, part of the project.

Sending messages to your peers through hidden services when you’re all online is as easy as pie. But receiving p2p messages when you happen to be off the network requires some advanced development. In this case, we used IPFS (InterPlanetary File System) which is a distributed system for data storing enabling its users to host and receive content (in this case chat messages, files, and attachments) without a centrally located server. Having the offline aspect in mind, our team decided to use OrbitDB to automatically sync the app’s database with the user returning online. 

In order to enable the highest level of security, we decided on taking a Defense in Depth (DiD) approach, where independent defensive mechanisms are layered on top of one another to protect users and their data on various levels. Each layer of our DiD protocol is responsible for a different aspect - one encrypts messages and the other is Libp2p that connects two peers using a shared certificate.


The Rumble Fish team has been able to move through a series of technical challenges to build something that hasn't been built before. I'm really happy with their work so far.

Holmes Wilson



Read other case studies


A mobile CRM ticketing system built in React Native


Developing a system to replace personal IDs for age verification

Let’s work together on something awesome!