Brief: Riot is a free and open source decentralized instant messaging application that can be considered an alternative to Slack. We take a look at features of Riot, installation procedure and usage.

It’s surprising that many Linux users and open source projects use a proprietary messaging service like Slack. Even we at It’s FOSS use Slack for our internal communication which I don’t like. This is why I came up with the proposal of using an open source alternative to Slack, called Riot.

But before I tell you about Riot, let’s go back in time and know a little about instant messaging on Linux.

Once upon a time, there was Internet Relay Chat

When most people think of Instant Messaging they think of clients like Skype, Telegram and many of its ilk. The grandfather of all these Instant Messaging has been IRC . The beauty of IRC was it didn’t need many resources, was quick to setup and was distributed in nature and the code was open right from the very start.

By distributed I mean you could either add or remove servers or channels to fit the audience. It was like the wild wild west all over again. While today’s Instant Messaging networks are more civilized in many ways with decorum to maintain, those times you were one of the three things, a bully, a person with quick wit/riposte or you got owned. The most interesting channels were usually the .alt. channels but at times used to overwhelm networks.

The IRC has a rich history and played pretty much an important role (and still continues to do) in setting up the world of Free software as well as the World Wide Web.

And Voice over Internet Protocol

Around the same time VOIP started gaining currency but for a long time, it didn’t work as every service provider did their own thing. The major turning point came when Google Talk announced federation for chat but only with XMPP, voice calling/mailing which it dropped later in 2014.

Now introducing Riot-web

I shared the above history as Riot does all of the above and more. It’s actually Matrix which does all the work while riot.im gives the GUI, theming necessary to make it work. Without one, the other would not work. Without Matrix, Riot would be like a body without a soul. For Matrix, Riot is the reference implementation but others are welcome to make as many clients as possible. In other words, riot.im simply exposes the functionality that matrix has.

Feature-set of Riot-web

Some of the functionalities that riot/matrix has are as follows –

Make as many rooms or channels

The ability to have bridges to many platforms

As data is cheap, Matrix has persistence, backup logging and presence notifications etc, although all of that is usually configured at the home server level.

Share, upload and download files with friends, colleagues and forget about them.

As files, conversations are time-stamped, de-centralized there is remotest possibility of the channel/rooms you are in ever going down as multiple servers are there and auto-sync between themselves.

Just in case if it ever goes down, you could always have your home server as an additional backup device which will backup all the conversations your and your friends in the channels you are in.

The matrix development is quite modular as can be seen from its GitHub page . Every day and every so often new bridges are being made, see purple-matrix as an example.

Matrix is also being ported to various languages such as Go or Rust so you could develop Matrix, the underlying protocol and stack in your favorite language.

End-to-End encryption whose code has been audited by NCC. In today’s world of data leaks, proprietary/closed work and third-party access to anyone’s data this comes as somewhat of a relief.

Each user and his device has a separate hash key so tampering, identity-theft is lower but then identity verification can be that much harder.

Voice and video calling integrated into the client itself.

Installing Riot on Debian and other Linux distributions

All of the above features make for taking a compelling look at riot.im

Getting riot.im is not much of an issue if you are on any Debian-derivative GNU/Linux distribution, just go to their website and follow the instructions therein.

For me, I just followed the above instructions and put it in –

cat /etc/apt/sources.list | grep riot deb https://riot.im/packages/debian/ stretch main

Basically, I put the deb https://riot.im/packages/debian/ stretch main in /etc/apt/sources.list in Debian . I am running Debian testing.

I did it as I often forget if I put any additional services in /etc/apt/sources.list.d/ and at times have made additional entries both in /etc/apt/sources.list and /etc/apt/sources.list.d/ which confuses whichever package manager I use (apt/apt-get/aptitude) whenever you want to update the index. The above slight deviation makes it much more easy/efficient for me.

Make sure to get the apt-repo key

curl -L https://riot.im/packages/debian/repo-key.asc | sudo apt-key add -

At least in Debian and guess ubuntu too, each software should have a signature.

After that, the only thing I needed to do was update the apt database index and installed riot-web 0.13.5

sudo apt update sudo apt install riot-web

Tip: Wouldn’t recommend setting up mixed repos. in your Debian installation unless you really know what you are doing. At times there will be a fallout of running mixed repos. Debian stable is good enough, if you want more recent versions you could either add/use backports or if you are brave enough, you could use Debian-testing and help the Debian developer team to see if anything is broken.

In case if you are on a different GNU/Linux distribution then use/refer notes on the GitHub page

Running Riot (I know it sounds strange but…)

While there are console clients, if you want to use the full richness of riot, would recommend you to use riot-web.

Once riot is installed, you just need to run riot-web –

riot-web

Riot uses your web browser to display its window and the various bits and pieces so make sure you have installed either Firefox or Chromium in your system.

You will have to provide a username, e-mail address and password in order to run riot. Username can be anything but needs to be tied down to a real e-mail address as a token/hash will be issued to your email where you will need to verify.

Tip – As of date riot doesn’t have its own password management services, so use a password manager or something to retain the password and username for future reference.

On the first run you will see something like this:

The above image was shared by mocchy99 who just installed riot on his desktop on my insistence :)

Once you have that, you will have to deal with the settings window –

Tip – Use Dark theme so you can see people better.

Integration

If you use a recent version of riot then most integrations are already there. I would use oftc as this is the server where most Debian users live –

Start a new chat (bottom left second icon) @appservice-irc:matrix.org and then do !nick irc.oftc.net

this will change your current nick which Matrix advertises as for e.g. mine would be shirish[m] and if I were to do –

!nick irc.oftc.net

Then in IRC channels, it would advertise as shirish and not shirish[m] identifying that I am using a matrix client. From security perspective that is good.

You should also identify to your IRC server in case you already have an account therein.

In which case, start a direct chat with @oftc_NickServ:matrix.org amd do a IDENTIFY $username $password so that the server knows you are who you say you are. The username and password are variables which you will need to change with your unique username and password.

For e.g. it could be IDENTIFY shirish 12345 the first being my username and the second my password, although this is for illustrative purposes only.

Tip: In the real world it is now recommended to have at least 10-12 digit alphanumeric string or passphrase with symbols just to be safe. You can read my earlier article about generating passwords in Linux.

Once you have done that, you could use ‘/’ and see a range of options that you could do with lots of options which can be used.

The last thing that is left to add channels, if talking on the IRC side. This is accomplished by doing:

/join #_oftc_#debian:matrix.org

where you put your messages. Riot would be able to decode the meaning and give you the respective channel.

what essentially we are trying to do is saying

/join #_someirc-server_#somechannel:matrix.org

Will you Riot?

I am a FOSS fanboy and I like to use and promote free and open source software. I have started using Riot and I am loving it. While I am discussing if It’s FOSS team can ditch Slack for Riot, why don’t you share your views on using Riot?