Introducing Convo

by Badri Sunderarajan · Mon 04 November 2024

Last week, I released Convo, a messaging app for feature phones (of the button variety). That has generated quite a bit of interest—and already racked up a hundred downloads within 24 hours!—so I decided to write a bit more about it here.

Screenshots of the Convo messaging app: the splash screen, the list of open conversations, and an open conversation with a message bubble

Convo is a messaging app that adheres to the XMPP messaging standard and runs on KaiOS (and JioPhone) feature phones. That's a lot of terms, so let's break it down.

What is KaiOS?

My Nokia 2720 Flip phone, while listening to the "Lore" podcast

KaiOS is a mobile operating system for budget button-operated "feature phones". While smartphones have gained popularity across the world, feature phones are still popular among

In 2018, KaiOS was reportedly the second-most popular mobile operating system in India (after Android). Globally, it still stands a distant third to Android and iOS, but is popular in various regions like India, Bangladesh, Tanzania, Russia, Vietnam, Brazil, parts of Africa and Europe, and the USA. Over 175 million devices have been sold to date, according to an official blog post. The popular podcasting app PodLP surpassed 10 million downloads sometime last year.

Online, the r/KaiOS subreddit is among the top 8% of Reddit communities (now superseded by a Discord channel), with over 80,000 members.

What is JioPhone?

The JioPhone is a device marketed by the Indian telecom giant Jio. The JioPhone operating system is basically a rebranded KaiOS, developed in partnership with the latter, but their devices are usually locked down to the Jio network. They have also forked the KaiOS store to use their own "JioStore".

JioPhone is the only KaiOS device officially launched in India, unless you count the Nokia 8110 Bananaphone (which was also sold in India only as a "Jio edition").

For a while, it looked like Jio had lost interest in KaiOS, and started experimenting with budget Android phones as well as other kinds of button phones. The 'JioBharat' phone (not running KaiOS) sold over 10,000,000 units according to its parent company's annual report. Now the focus seems to be back on KaiOS with Jio releasing the JioPhone Prima 2 just a couple of months ago (September 2024).

What is XMPP?

XMPP is the eXtendend Messaging and Presence Protocol. It's basically an open standard for Internet messaging (although it can be extended for other uses too). This is similar to how SMTP and IMAP are standards for sending emails.

Like email, XMPP is federated, meaning anyone can run their own XMPP-supporting service and use it to talk to other people who have joined any other XMPP-supporting service.

Thanks to "transports" like Spectrum and Slidge, it is also possible to talk to users on other services like Signal, Discord, and Telegram through your XMPP account. That's usually not officially supported by the services on the other end, though, and tends to be a bit buggy.

What is Convo?

I'll just repeat the sentence from earlier, but it'll mean a lot more now that you have the context!

Convo is a messaging app that adheres to the XMPP messaging standard and runs on KaiOS (and JioPhone) feature phones.

Oh, and the name

"Convo" is an informal short form for the word "conversation". It could also be seen as a diminutive form, fitting with the theme of KaiOS devices being physically "small" (but sturdy!) phones compared to the "big" smartphones.

The name "Convo" is also a nod to the "Converse" from "ConverseJS", as well as to "Conversations", a project which is not directly related code-wise, but is the leading XMPP-compliant messaging app for Android devices.

I am open to other names, so suggestions are welcome. If a change of name does happen, the 1.0 release (after some features like encryption are added) would be a good time to do it!

A vaccuum to be filled

WhatsApp has been supported on KaiOS since around mid-2018, and is one of the most popular apps on the store. However, WhatsApp recently announced in a terse notification that they're going to be dropping support for KaiOS phones by February 2025.

This highlights one problem with centralised messaging services: as mere users, we're largely at their mercy regarding when we can use their platforms and how. This problem hits hard for operating systems like KaiOS, which, though popular, are significantly less so—and nowhere near as money-making for corporations—as major operating systems like iOS and Android. In this case, KaiOS themselves have said the decision is up to WhatsApp, and there is nothing they, KaiOS, can do about it.

With Convo, I hope to help people break out of this cycle. Since XMPP is a decentralised, open protocol that anyone can implement, there's no large company to down the shutters whenever they get bored. As long as even a few people are interested in XMPP, the show can go on.

That, at least, is my secondary motivation for developing Convo. My primary motivation remains to be able to use my KaiOS phone and still text my friends who use XMPP :)

The state of chat in KaiOS today

WhatsApp may be gone, but KaiOS still has other messaging options. Most notable are the chooj matrix client and and IRC client VM-IRC, both by farooqkz. chooj even has (highly) experimental support for voice calls, the first for a Free Software application on KaiOS.

Screenshots of chooj, VM-IRC, and Discord on KaiOS respectively

When it comes to proprietary platforms, there is a Discord client developed by Cyan, who is also developing a new Telegram client to replace the existing Telegram by arma7x. Discord is usually hostile to third-party applications and "bots", but it is where most of the KaiOS developer community currently hang out. Telegram has historically been more welcoming to third-party apps.

Convo, and what it can do

Though Convo is a new app, it is based on the excellent ConverseJS XMPP webclient. That means Convo should theoretically support all the features supported by ConverseJS. But since the UI had to be redone from scratch to work with the buttons and relatively small screens of KaiOS devices, only some of those features can actually be accessed.

Until then, my recommendation would be to have a companion XMPP app installed on your desktop or laptop (or smartphone, if you have one). You can use this companion app to "set things up" and for maintenance like accepting new contact requests, while using Convo for the actual conversing.

Things you can do with Convo

Things you might expect to be able to do but actually can't (yet)

Most of the above features can easily be fixed once I or someone else (maybe you?) get around to implementing the UI for it.

End-to-end encryption

If implemented, this would make Convo the first Free Software messaging app for KaiOS to support end-to-end encryption. (With the possible exception of WhatsApp, I believe it would be the first KaiOS messaging app to support it at all.)

End-to-end encryption with OMEMO is already supported by ConverseJS, but due to the way it is implemented it can't be used directly by Convo.

Specifically, Convo uses a "headless" version of ConverseJS without the UI, so that it can implement its own custom UI. Right now, the OMEMO code for ConverseJS is mixed up with the UI code: it needs to be separated into general and UI-specific parts so that the general part can go into "headless". I started working on this last year, but didn't have the time to finish.

There's also the question of whether KaiOS can handle running the encryption/decryption algorithms. For one, this requires the JavaScript encryption libraries to run on the relatively old browser engine of KaiOS. Secondly, the KaiOS devices would need to have enough memory and processing power to be able to handle the encryption.

OMEMO encryption can become slow on large encrypted group chats even on desktop, but I'm betting that it'll be performant on mobile for smaller conversations (especially 1-to-1 ones).

The road to v1.0

Now, thanks to financial contributions on Liberapay I may be able to get back to it soon! If you want to help out, check out the button below:

Liberapay goal progress

My first priority is to set up end-to-end encryption, which will make Convo usable for everyone whose friends use encryption (which is more or less standard these days). It took me two weeks to get "almost there", but the ConverseJS code has changed in the meantime. Hopefully, another three weeks (whenever I find them) should be enough to get the ConverseJS side sorted out, after which the UI will have to be added on to Convo.

In the meantime, I'll also aim to implement the basic usability features mentioned above (especially adding new contacts!). You can check out the tentative project board for details.

Once that's done, Convo will be more or less usable without a companion app, and ready for version 1.0 (possibly with a new name?).

Publishing to app stores

Convo has already come out on the BananaHackers WebStore, the unofficial store set up by KaiOS developers and enthusiasts.

Get it on the BananaHackers WebStore

The official KaiOS store currently only accepts apps that are monetised through the proprietary KaiAds SDK. This means we would have to add in-app advertisements to Convo before it can be published on the KaiStore. Also, the KaiStore version of Convo wouldn't be fully Free Software as the KaiAds part would be proprietary.

In this case, it is probably worth the trade-off. The BananaHackers WebStore is as easy to use as the KaiStore, but only after it has been set up—which involves rooting the phone and using developer tools to set the store up. Publishing on the KaiStore would make Convo accessible to the large number of people using KaiOS who do not have the skills to set up the BananaHackers WebStore.

JioPhone devices would be running the JioStore instead of the KaiStore. (Jio devices are also notoriously hard, if not impossible, to unlock.) According to tbrrss, creator of various KaiOS and JioPhone apps including the popular PodLP, this store is even more restrictive than the KaiStore. The JioStore disallows a lot of features, including file storage and push notifications. They also have a high quality bar, and perform QA testing on all chipsets in a process that takes many months—after submitting the package to the head of JioStore via the proprietary messaging service WhatsApp.

Looking into the future

Convo provides the app, but you will also need an XMPP provider for messaging. There are many free providers run by volunteer groups, such as durare.org which I am a part of.

However, this disjoint setup would be unfamiliar to anyone using a centralised messaging platform, where the app and server are tied together and there is no question of choosing a server separately from an app.

Quicksy and Prav address this by providing an easy onboarding process and contact autodiscovery, at the expense of having a centralised server and directory. The idea is that people can start with Quicksy or Prav, and then move on to a more customised setup when they see fit. (Thanks to the federated nature of XMPP, this won't affect their ability to talk to their contacts.)

If Convo becomes stable enough, perhaps it could be integrated with Quicksy and/or Prav to bring the same easy onboarding to KaiOS too.

From the other end, the Snikket project lets groups (such as families, clubs, or even small organisations) quickly start their own XMPP server, and invite whomever they want onto that. This is another project that could be integrated, allowing people to accept Snikket signup invitations through "Snikket for KaiOS".

Software Freedom

Perhaps this goes without saying, but Convo is Free Software. It is released under a licence that gives people the "Four Freedoms":

These freedoms, of course, and unfortunately, do not apply to KaiAds.

Get involved

Convo is currently developed by one person (me) but I'm open to collaboration, both in terms of development and in terms of planning what to do next. If there is enough interest, I could move to a collective decision-making model that is being tried out by projects like Prav (that I am also involved with).

In the meantime, here are some things you could do to help out:

If you don't have KaiOS, you can still use XMPP through ConverseJS or other apps and services. Or, of course, you can do yourself a treat and get a KaiOS phone.

Update: This post was updated to clarify that chooj has experimental support for audio calls (not "VoIP" as originally stated)

Thanks to Benson for reviewing this post.