/ software

Iridium

This write-up is a bit delayed, but after two years of on-and-off development, Iridium is finally available!

Iridium is a native Linux IRC client built in Vala and GTK, and designed for elementary OS.

The original goal for this project was twofold:

  1. Learn Vala in a practical way
  2. Contribute to the elementary OS community

At some point I will write shorter, detailed posts about various aspects of the development and the challenges I ran into, but for now I'll stay at a high level.

Design

Connection Management

Each connection to a server is handled by a separate thread, with a ServerConnectionManager object to direct requests to the appropriate connection and send signals from the connections.

Data Persistence

Connection information is stored in a SQLite database so that connections can be automatically re-created when the application launches. All credentials are stored using libsecret.

Connection Visibility

The main design goal was to be intuitive. As such, the application is very much "what you see is what you get". Connected IRC servers are visible in a list on the left side of the screen. You can also disconnect from the server but leave it in the list to rejoin later.

When you join a channel, it will appear in the list nested beneath the associated server. Channels can also be saved as a favorite, which will bump them to a pinned section at the very top of the list, making it easier to access them.

Challenges

Testing

It's a good idea to do most of the testing against an IRC server that I own so as not to spam connection attempts. I relied heavily on the InspIRCd containerized server for my testing. This allowed my to quickly tweak server settings to test authentication, but most importantly un-ban myself for too many connection attempts!

Storing Secrets

One unusual problem that I ran into was storing and retrieving secrets. For some reason I was unable to retrieve a secret without first storing one. On startup, the application attempts to pull any connection secrets using libsecret and should pop the dialog to unlock the keyring, but the user wasn't being prompted! The current workaround is to store a "dummy" secret on startup (only if there is something to retrieve - we don't want to unnecessarily interact with the keyring), which will always prompt the user. Subsequent requests are then successful.

Resources

Several applications were invaluable during development:

  • quickDocs - Vala documentation
  • LookBook - Discovering available icon and image resources
  • Sequeler - Browsing the SQLite database and UI inspiration

The one page that I kept open most often while getting familiar with the Vala programming language was Vala for Java Programmers.

Finally, the elementary OS documentation for developers is fantastic. The team has done a great job digesting design goals and guidelines in a very accessible way.

Screenshots

iridium-screenshot-01
Welcome screen

iridium-screenshot-02
The chat view, including a marker line of the last read message

iridium-screenshot-03
The chat view in dark mode, including URL detection within messages

iridium-screenshot-04
Favorite channels, more connections, and the menu

What's Next?

There's plenty more to do! You can follow along with future efforts at the projects page on GitHub.

Finished Product

Iridium is available on AppCenter!

Get it on AppCenter

To download and build from source, check out the GitHub project page:

GitHub: https://github.com/avojak/iridium