Category Archives: Polari

To Polari 3.22 and beyond

This summer I am co-mentoring Rares Visalom and Kunaal Jain for a Google Summer of Code internship in Polari.

Kunaal Jain is working on search and Rares Visalom is working on various user experience improvements. In this relation I’ve had the chance to be involved with designing some of the new features.


Being able to search is one of the major milestones expected of a chat client and includes:

  • Searching for conversations
  • Searching for links
  • Searching for users

The design is tailored to IRC communication. Results are divided into chunks of conversations and the search prioritizes conversations where you participated or conversations where a link was shared. There are still some details to be thought out but Allan Day made wires as a foundation of how searching would work. Here is a screenshot of one of them:

One of the work-in-progress wires from Allan’s Search mockup.

User Popover

There’s also plans for implementing a popover which can be activated by clicking a user. One of the goals with doing this is to make it faster to message users from the chat context. One feature I’m particularly excited about here is the ability to enable notifications for certain offline users so you will know when they become online again. The popover is also a nice opportunity to convey the blue/grey convention used to indicate online/offline status.

One of the work-in-progress wires from my user popover mockup.

It is planned that many of these features also will be available from Polari’s user list.

One of the work-in-progress wire of updated userlist details.

Initial Setup

Last year during my own internship I worked on improving the initial setup experience by providing a blank state. Allan has made designs for initial setup to facilitate even faster setup of Polari which in some future also could feature easy migration from other IRC clients.

One of the work-in-progress wires from Allan’s Initial Setup mockup.


We are anticipating other features for Polari in the near future including:

  • Nickserv automation
  • Show a roomlist in the join room dialog
  • Various interface smarts based on history

More details are also available in Polari’s Roadmap. It’s pretty exciting! Those interested in contributing can help make the list even longer by checking out Polari’s homepage on how to get started. I would be more than happy to help anyone getting started should they should chime into #polari.

Enter Polari 3.20: ‘The Chicken has landed’

Yesterday was a big milestone for GNOME, as 3.20 landed. And just the day before Polari 3.20 was released. I have had a ton of fun this cycle designing and merging my GSoC work for Polari. Without further ado, I’ll now take you on an adventure showcasing what’s new in Polariland.


The big

As part of Isabella Riberio’s Outreachy internship Polari now has a much better workflow for managing networks. Instead of a management dialog hidden away in the application menu, you can now access your networks directly from the sidebar. Much more intuitive.

Another new contributor, Kunaal Jain, implemented support for image pasting – a feature I use almost daily now. Florian complimented the enhanced image pasting by adding support for inline pasting. This way you can paste text and images and write text around the resulting URLs.

As part of the connection management overhaul Florian also made adding servers and joining rooms much faster. Polari now ships with a predefined list of networks which means you can get Polari set up in just a few clicks. Another nice advantage is that this enables us to connect more securely to the networks – SSL is enabled by default on all predefined networks which support it.

The small and cool details

Polari 3.20 also got a much needed visual overhaul near the entry area. Below is a comparison between the old entry area (top) and new entry area (bottom).
The overhauled look also meant changing your nickname now happens via a popover. There’s still some more work to do here as there’s not enough distinguishment between changing nicknames temporarily and changing nicknames permanently (something I hope to adress next cycle).

What I’m over-hyped the most about is this 2-line change – we now animate the text. It’s really incredible how such a small detail can make such a huge impact on my chatting experience.

A nice other detail is that Polari now tab-completes IRC commands.

During the ContentApps Hackfest my status compression branch from last years Google Summer of Code also landed in Polari 3.20..
06-30-15 compressed-status-message-thumb well as my IRC URL Handling branch, which was further enhanced to match against the new list of predefined networks. Polari also detects mentions of chatrooms and linkifies them for your convenience.

Finally I want to higlight the new keyboard shortcuts Alt+Shift+up and Alt+Shift+down that Rares Visalom implemented this cycle. It’s a super addicting way of checking up on the new messages in various chatrooms.

Getting Polari 3.20

It is most likely that Polari and other GNOME 3.20 apps haven’t reached your repository yet. XDG-App to the rescue! You can check out Polari nightly by following Alexander larssons tutorial at.

In Polari we plan to participate in Google Summer of Code. If all goes well, we’ll have Kunaal and Rares work on implementing search and implementing a improved initil user experience. These are two milestones that I personally look much forward to achieve.

I would like to thank everyone involved with making this release of Polari so magnificent. Chat you later on IRC. (:

Polari 3.18.1

Polari 3.18.1 also commonly known as “It’s Yoghurt. It’s French” was released recently and I wanted in that relation to cover the latest whereabouts in Polari.


To ensure that we can use a paste service which is distro-agnostic, GNOME’s sysadmin team has launch which is based on Sticky Notes. Polari will paste to this service if you attempt to paste more than 5 lines of text into the chat entry.


We have had awesome help from new contributors: Cody Welsh, Kunaal Jain and Jurijs KolomijecS have in total fixed 5 bugs. It’s really awesome to see some new nicks in #polari!

It would please Allan and Andrea to hear that it is no longer possible to ping them when writing words like “nowadays” or “average”. Polari tries to be more strict when to ping you and will avoid such situations now. Other bugfixes include:

  • Private messaging people with capital lettes in their name no longer creates duplicate entries in the sidebar.
  • The roomlist header now higlights on hover if it is sensitive.
  • When a connection is renamed the roomlist is resorted.
  • The join dialog now assumes you wish to join a room on the currently active server of the room in the chatview.

We will soon enter GNOME 3.19 territory and I do plan to get as much of my useful GSoC work landed as possible. At the moment I’m entertaining myself more with some design work which hopefully can make some interesting projects in the future.

Code has landed in Polari

Florian pushed a new release Polari not more than two days ago. This is Polari 3.17.90:

Error Handling

Polari now indicates the status of each connection next to the connection’s name in the sidebar. If Polari encounters an error, an error icon is displayed. Clicking on the connection in the sidebar, will show a popover with error details and an action which can possibly solve it.

Paste service integration is back

Polari 3.17.90 brings back paste service integration with an improved user interface designed by Allan Day. If more than five lines of text are pasted to the chat, Polari will indicate that the text is going to be uploaded to a public paste service. Pressing enter confirms, Ctrl+Z, Delete, Backspace or Escape cancels.

  • The sidebar now sports an improved look by Lapo Calamandrei.
  • The ‘New messages’ line has gotten a more clear design by Allan.
  • A good 16 bugs or so has been fixed since 3.17.3, improving stability and user experience.

Error handling in Polari

At the moment Polari will not tell you much more except logging a debug message in the terminal, should you fail to connect to the IRC server.

08-02-15 polari-current-thumb

There is not much actionable to be done from the UI, nor does it really indicate that anything is wrong. So for the last few weeks I have been working on improving the user experience when encountering errors.

My approach so far has been to use a combination of status indicators in the room list and display error notifications. Polari already has an in-app notification system, currently used for displaying Connecting to


However, the notifications are not really actionable and could therefore easily be replaced by a status indicator. Connecting to a server is now indicated using the sidebar. Furthermore, the sidebar can indicate the status of connecting to each room, if joining one for example would take more than the usual three seconds. If an error is encountered on joining a server or a room, this can be displayed via the status indicator as well.

08-02-15 polari-status-indicators-thumb

The in-app notification system has been revamped to displaying error notifications instead. If Polari for example is unable to connect to a server because the server address has been misspelled, an error notification is shown when you visit any rooms connected to that server.

08-02-15 polari-unable-to-connect

From the error one can press the ‘edit account’ button to edit the account. In the dialog a detailed error will explain what might have gone wrong and the dialog will highlight the entry you need to edit as well.

08-02-15 edit-account-dialog-error-thumb

Another case could be that you have been banned from a room. Here a ‘Retry’ button is provided so you can try connecting to the room once you’ve solved the problem.

08-02-15 banned-from-nautilus

Finally an error is provided when Polari is unable to establish a safe connection to the server. The user can choose to continue anyway with the awareness that the connection is public, or leave the connection as-is.

08-02-15 not-safe

The error handling branch currently handles around 19 errors associated with joining rooms and connecting to servers. Hopefully the groundwork which this branch provides to have error notifications means that error-handling easily can be expanded in the future when future features land in telepathy or in Polari.

Another digest from Polariland

Polari 3.17.4 is around the corner. For this release, I have worked with Florian to get my work towards a better initial setup experience merged. As can be seen below the design has changed a bit too.


The primary change has been to move away from the installer (anti-)pattern and instead move fully towards a design inspired by the empty-app-states pattern.


In Polari 3.17.4 Florian also fixed a memory bug and a bug with direct messages not showing up until you press the notification in GNOME Shell.

In this digest I also want to briefly mention two more patches I have been working on which likely will land in later releases of Polari:

  • SSL Encryption: When you create a new connection Polari will now try to determine if the server supports SSL and use it unless otherwise specified.
  • Server Entry Validation: When adding a new connection, Polari will validate the server name and display a message if you use characters that are not valid in a server address.

Will I meet you at GUADEC this year? (:

irc link handling

Back in 1996 the World Wide Web Consortium made a draft specification for how you can link to an IRC chatroom. The draft does not seem to have developed further, but it is regardless possible to stumble upon these links around the internet now and then. Many other IRC clients support the handling the links too and this week I have enabled Polari to open them.

The links typically take on the following shape:

If I wanted to link to the #polari chatroom, the link could look like so:

Polari can open these links regardless of whether it is running or not. Furthermore, if you open a link to a server you haven’t used before, then Polari will ask you to specify a username to use for that connection.

07-05-15 new-connection-thumb

The bug in question is bug Bug 728593. I am keeping a solution to solving it inside the wip/bastianilso/irc-url-parsing branch. However, there’s a few things I am considering before calling the work in this area done:

  • It would be a good idea to show a notification if Polari is unable to parse the irc link.
  • It might be worth to also support corner cases of the irc link specification such URLs targeting nicknames, URLs containing a passphrase and so on.
  • It could be cool to have a “Copy link adress” menu item per room so you can copy/paste a room’s irc link to other people. The menu item could be placed in the room menu and/or in the right-click menu for each channel.
  • It could be cool if we parsed mentions of rooms (fx #polari) in chats as IRC links you could click or copy/paste.

I’ll be off for a small trip the next four days but will return in the weekend for more polari bug fixing. (:

smarter status hiding

In heavily populated IRC channels such as #debian on Freenode, a lot of idle IRC users are joining and leaving every couple of seconds. At the moment, we display a status message for every user in the room which in some cases results in a lot of visual noise.
06-30-15 visual-noise-thumbanother busy day on #debian. 9 out of 17 messages in the chat view are status messages..

This problem is filed as bug 711542 in GNOME’s bug tracker. I have decided to try addressing this issue with some logic.

The main purpose of status messages is to indicate activity concerning a user, such as the user joining a channel, disconnecting or being renamed. The two primary use cases I see for displaying status messages in the chat view are:

  • ..when a user on a channel is actively participating in a conversation, but then the user’s status suddenly changes. For anyone reading the conversation, it is interesting to know what has happened with the participating users as a change in their status can affect the conversation itself.
  • ..when a channel is idle and no conversation is happening. In this case it is a convenience to display status messages. You might be waiting for someone particular to join the channel for example and thus is checking the channel occasionally to see if the person has joined the room. On the other hand, we also want to avoid flooding the chatView with status messages as it creates more unnecessary extra text to scroll through between conversations in log history.

To adress point one, I have implemented the concept of “active” users and “inactive” users. An active user is any user on the channel who has sent a message to the room within the last X* minutes. If the user is considered active, we allow any status messages related to this user to be displayed in the room.

06-30-15 only-active-users-thumb Only recently active users emit status messages.

So because user Raazeer wrote “jelly, if I’m not back in ten minutes, I’ve destroyed my boot config and won’t be back today”, Polari will allow Raazeer’s status messages to be displayed the next X minutes. As can be seen in the screenshot above, a status message indicated that Raazeer disconnected shortly afterwards.

To address point 2, Polari will display status messages for any users provided there hasn’t been any conversation in the channel within the last X minutes. However, if more than 4 status messages are emitted while the channel is idling, Polari collapses the status messages and displays a single line summary instead. The summary can be expanded to reveal the details at any time.

06-30-15 compressed-status-message-thumb Screenshot of a status summary in action. Clicking the “…” can be clicked to reveal the status messages.

With these changes I hope we’ll have less visual noise from status messages in Polari. Feel free to have try my current branch. With problems like these, I think the best way to find out if it’s solved, is by trying it over a longer period of time.

*duration to be discussed. It’s currently set to 5 minutes, which is unfortunate for Raazeer since he said he would return in 10 minutes. Maybe a good indication that I should use a higher number? d: