Convos: A Persistent Self-Hosted Web Client for IRC

Published at December 18, 2020 – 9 min read

The IRC Client: Convos

Throughout 2020, in large part due to the lockdown, many people have started to become familiar with internal communication tools. Microsoft Teams, Slack, Telegram, Mattermost, and a few others are the most widely used and recognizable of these tools, but there still seems to be some people using Internet Relay Chat (IRC) ― one of the first online messaging services.

Many of the widely used international communication tools have been inspired by IRC, which is gradually falling into disuse due to the modern UI and UX and additional features being offered by these more well-known messaging applications.

Despite IRC being considered archaic, it is still being used today as a meeting place for many online communities. For example, people who are nostalgic for the early days of the Internet and users of, and contributors to, open-source software projects make IRC a place for discussion ― where it is not the identity that defines who you are, but the content.

In this article, I will illustrate what IRC is and share with you a product that greatly enhances the IRC protocol by adding features that are common to modern messaging applications. If you are searching for a convenient, self-hosted solution to connect to IRC, then this article is for you.

In the following paragraphs, we will discuss:

  • What the IRC communication protocol is;
  • Getting a persistent, always-online chat on IRC;
  • Convos, an alternative to IRCCloud and its features;
  • The installation of Convos on Debian/Ubuntu; and
  • Convos configuration.

The IRC Communication Protocol

IRC is a service that facilitates online communication via messages based on the “client-server” model. In a more technical and precise way, IRC can be considered a network protocol (at the application level) that uses a network composed of servers to easily send messages to network participants.

Developed in 1988 by Jarkko Oikkarinen, a Finnish student who wanted to create a communication system that would enable real time discussions for a network at his university, IRC quickly expanded to the point where more than 200,000 users were connected every day.

To start exchanging messages, the user must first connect to the IRC network via a client (e.g., Pidgin, mIRC), which then connects to the server closest to the user in order to ensure high-speed performance. There are several networks, such as Freenode, Swift IRC, IRCNet, and QuakeNet.

Within IRC, you log in with a nickname (ASCII characters). This allows you to be recognized by the network to which you have connected. To initial a conversation, there are two different ways: start a private chat with another user (query) or connect to a channel.

A channel is a dedicated place to chat with a group of users, without writing to each one separately. It might sound strange nowadays, but in the late 1980s and early 1990s, this was viewed as revolutionary and a game changer with regard to how people connected over the Internet. A channel is typically administered by users, called operators, with special privileges and the ability to turn people away and invite them, make the channel private (invisible to the network), set a password, and much more.

From a technical point of view, an IRC network, currently described by the standard RFC 1459, is composed of several nodes maintained by a centralized entity. When a user with a special client connects to one of the servers, the whole network must be informed about the presence of this client, replicating across all servers the following: nickname, name of the host from which the client has access to the Internet, and the name of the server to which this host is connected.

Regarding the nickname, you might wonder if another person could impersonate your nickname. The solution to this problem is to register your nickname with a password, so that (in the future) the server can ask you to identify yourself with the password. Here you can read about How to register your nickname on Freenode.

As alluded to above, from a historical point of view, IRC represents a consolidated communication protocol that is still used today as a discussion environment for people who are nostalgic for the early days of the Internet and users of, and contributors to, open-source software projects. In a way, this has influenced the basic UI and UX of IRC. Today, this appreciation has gone well beyond these users, as IRC has inspired our modern day messaging applications. As an example, Slack is a sexier version of IRC ― dressed up with better UI and UX and having a few modernized features. At their core, though, IRC and today’s messaging applications are no different, as groups are the channels, queries are the private chats, and operators are the administrators.

If you would like to discover all the commands to better manage your own channel, I suggest you to read the list of commands available on IRC.

For a long time, IRC has been a gathering place for many communities, including Firefox, Bitcoin, Gnome, and many others. IRC has also been the site of many historic “jokes'' on the Internet. It would be remiss of me not to mention some of these most notable moments: Hunter2, the guy who lost a device in his apartment, and the timeless “does anyone speak python here?".

IRC will never die

IRC will never die (gently provided by XKCD)

Arguably the biggest disadvantage of IRC is that you cannot always be connected to a specific server, unless you leave the client on all the time. Unlike normal messaging clients, you will not receive messages if you are not present on the IRC network. In fact, the remote nodes of IRC do not store any messages!

One of the solutions for this problem is to buy a VPS and manage the connection to IRC via a text client with a command line interface. However, this can be inconvenient on mobile devices and, specifically, for a person unfamiliar with the command line. To get around this problem, there is a free self-hosted alternative called Convos that allows you to connect via a web interface to IRC, but that’s not all! The Solution to Always Being Connected

Convos is an open-source, self-hosted client for connecting to IRC maintained by Jan Henning Thorsen and Marcus. The backend was developed with Mojolicious, a Perl framework, while the front-end used the Javascript framework Svelte.

Developed in 2014, Convos has evolved into a very interesting project, despite being maintained by only one person. Among its main features, we find the persistent IRC connection that eliminates the risk of missing some important discussions! The user is connected as long as the Convos daemon is active and each message is stored in a log accessible only to the owner of the server.

Convos is one of the simplest ways to use IRC and it is always online, so initiating and staying in a discussion has never been easier. Its simple interface allows you to send messages on IRC from any device, be it a smartphone or a fridge ― you just need a browser. You can also choose a theme from those available or write your own. Another advantage of Convos is its self-hosted nature. There is no centralized third-party server (like with IRCCloud) that stores your messages. With Convos, no one besides you will see your IRC messages and logs.

Convos User Interface

Convos User Interface

If you need to upload a file, but do not want to share it with third parties, Convos allows you to upload a file of any extension to your server. Drag and drop the file and Convos will do the rest, creating a unique link for you to share in order to access the file. Want to delete it? You can do it without any problem!

Drag and Drop per Convos

For text files, it gets even better. All messages that will have more than four “line breaks” will be uploaded to a personalized pastebin.

As we are all well aware, in 2020, having an Emoji available is a must! Just type :emoji_name to see the list of emojis available on Convos. Note that all Unicode characters are also compatible, so across smartphones there will be no problems. You can also add links and make bold and/or italicize your posts with Markdown.

Given that IRCCloud is a service (with similar features) that is both centralized and expensive, Convos is the leading free alternative. Over the past few years, IRCCloud’s infrastructure has suffered several periods of downtime, which has impacted many (if not all) its users. Unlike IRCCloud, the expenses and stability of running a private server for Convos is more cost-efficient and reliable, especially when compared to the pricing model (per user/per month) and the fragile nature of the IRCCloud infrastructure.

How to Start Chatting with Convos

Installation and configuration of Convos is very simple and does not require any special knowledge of shell scripting. The developers have prepared a very convenient way to run script, so that you will be able to install the Web client quickly.

[email protected]#: curl | sh -

Here is the Script code, if you want to view it. If the script did not show any problems, we can proceed by starting the Convos daemon:

[email protected]#: ./convos/script/convos daemon

Launch your browser and enter http://localhost:3000 to start chatting. There are no additional steps. You only have to choose the IRC network (e.g. Freenode) and Convos will do the rest!

Since you will be the first user, by default you will be set up as the Convos administrator. This will allow you to manage users, reset passwords as needed or create new ones, and set some global environment variables as the default Convos connection.

You can change the listening port or IP address via the --listen flag; although, it is strongly recommended to run Convos behind a proxy server.

If you want to run Convos through a proxy server, I recommend you read the guide “How to Run Convos Behind Your Favourite Server”. A reverse proxy is a particular application that acts as an intermediary, in this case, between the client (the user) and the Convos daemon. It is useful if you want to have features such as SSL management, load balancing, compression, and caching of static resources.

I personally recommend setting it up under NGINX or Apache with a Let’s Encrypt certificate, so that it communicates with the server through a secure connection.

I have been using Convos for more than a year now and I have never had any kind of disruption. When compared to its competitors, such as TheLounge developed in Node.JS, Convos is much faster. Client features including minimal configuration required and ease of use enable Convos to still make IRC a good communication medium in 2020. Internal logs of all chats and the convenient search function allow me to stay up to date on the discussions I follow (yes, I’m referring to #monero).

Want to learn more about the Convos project? Join the discussion in the #convos channel on Freenode IRC or write me to let me know your opinion!

Last update at December 31, 2020


I am a security researcher, a writer, and contributor to the Monero project, a cryptocurrency focused on preserving privacy for transactions data. My publication Mastering Monero has became one of the best rated resources to learn about Monero. More about me

Follow me on Twitter or send me an email. I also appreciate donations, they allow me to continue doing my work and writing.

Mastering Monero book