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.
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?
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
- lower-income groups who can save by buying a budget phone
- people from higher-income groups looking to digitally detox or reduce usage of smartphones in their lives, either by getting a "dumbphone" as a secondary or weekend device or using it to replace their smartphone entirely
- dumbphone enthusiasts who want to practice digital minimalism and/or eschew today's trend of having one's whole life on a single device
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.
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
- Sign in to your XMPP account. Only one account at a time.
- Start a conversation with existing contacts. This includes contacts on other platforms, provided you have set up transports separately in some other XMPP client
- Browse saved (bookmarked) group chats and rejoin them. Convo doesn't auto-join group chats opened on other devices since group chats tend to have a lot of messages, leading to performance issues. Instead you can manually join the groups you're interested in, and Convo will save them to reopen next time
- Read and reply to incoming messages. Convo will automatically open a private conversation if someone messages you while Convo is running (but not when the app is closed)
- Close an open conversation. If the conversation is a known contact or a bookmarked group chat, you will have the option of rejoining
- View images shared by other people. You can't share your own images yet, though
Things you might expect to be able to do but actually can't (yet)
- Search through existing contacts. You have to just keep scrolling till you find them.
- Interact with someone not in your contact list. This includes sending a message and accepting a contact request. The only exception is that, if a non-contact messages you when Convo is running, that message might appear in your conversation list and allow you to reply.
- Join a group chat you haven't already bookmarked
- Share images from your KaiOS device
- Get notified when you receive a message. Convo does not yet run in the background to listen for messages. Even when the Convo app is open, it doesn't support displaying notifications in any way.
- See unread messages. The app doesn't highlight unread messages in any way. If someone messaged you while you were offline and the conversation wasn't open, it won't even appear in your conversation list: you'll have to manually open a chat with that person to see that person's message
- Register for and activate transports, to be able to message people on non-XMPP platforms
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:
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.
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":
- The freedom to use and run Convo without restrictions on which devices you use it on, or on how many, or for what purpose
- The freedom to study and change the software as you see fit, including digging into the source code and making your own customisations to it (or getting someone to do it for you)
- The freedom to share and redistribute the software with whomever you want, in private or in public
- The freedom to modify and share your modified versions of the software—including releasing your own version of it (which would be helpful if I turn evil or disappear or something)
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:
- Test run the app on your KaiOS device. You can download the latest version from the BananaHackers WebStore, the Releases page, or directly from the git repo.
- Send me your feedback! There's this group chat about Convo that you can join from any XMPP messaging app
- Tell other people about it. You could share this post or the main Convo repo, which is functioning as the home page for now
- Contribute code. KaiOS apps are written using the familiar web technologies of HTML, JavaScript, and CSS, and you can (sortof) figure out things in the browser even if you don't have a KaiOS device. (It always helps to have one, though.) To get started, check out the open issues, create a new one, or contact me at the group chat mentioned above
- Contribute money. This will help me (and/or other people) put more time into Convo. In case you missed the link earlier in the post, here is the Liberapay donation page for Convo
- Find me on XMPP or on the Fediverse and—to quote the podcast from the photo I shared earlier—say hi. I like it when people say hi :)
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.