Command Line IRC Clients

The Breakdown

IRC has somehow (unjustly) been branded by general casual computer users as the exclusive domain of basement-dwelling, roleplay-gaming geeks.  While I won’t deny there are indeed quite a few of those around, IRC is definitely useful to, and being used by, a much much larger crowd.  While it’s true that a good chat room (or channel) is not quite as easy to get to as installing a client and logging on with a name and password, I think the end result is more gratifying.  With an IM client, you install, sign in, and wait for somebody to pop up and chat with you, or  go hunt somebody down and pester them.  Either way, it’s pretty much one-on-one, and that’s it.

With IRC, it’s more like an online party.  Joining an IRC channel is like walking into a real world room filled with strangers and friends alike.  Everybody can read what everybody else has to say.  On large networks, this can make things a bit confusing, but you can still chat privately one-on-one through private messages, much like stepping out to the patio with a friend to talk more privately, if you so desire.

In Linux, there are two primary ways to get onto an IRC network.  Of course, there are GUI-based apps that place all of the options for the client within one or two mouse clicks.  However, IRC is really little more than text-based chat, so of course there are options strictly for the command line as well.

The advantages of using a console-based (or CLi-based) client are numerous.  Chief among these is to couple the running client with a handy little app called Screen.  Screen lets you set up a terminal instance that you can attach to and detach from at-will, without killing the program(s) that may be running in it.  Start Screen, then start the client, and now you have a terminal instance that’s perpetual.  While “in” the screen, hit CTRL-A then D, and you “detach” from the screen, letting you drop out to the original termal prompt, and keeping the client running at the same time.  Why does this matter?  Well, for one thing it’s almost trivial to login to a Linux terminal from just about anywhere in the world.  Let’s say you’re running Ubuntu.  Pretty desktop graphics and all.  You open a terminal, start screen, then start your client.  You then detach from the screen and close the terminal window.  Later that day, your flight lands hundreds of miles from home and you’ve got a three hour layover.  Pop open the lappy, hook up to the airport’s wireless internet, and shell in to home.  Reattach to the screen you left running, and look!  Everything that happened in your favorite channels has been captured, and you haven’t missed a thing!  If this doesn’t seem like a big deal, consider that most of today’s “smartphones” can use terminal access too, which means you don’t have to buy or install any special programs to gain access to your favorite IRC networks!

Okay, on to the main event.  There are two apps that are the current top dogs as far as CLi IRC clients go.



CMack -

Weechat is one of those simple, purposeful apps that just simply works, and works very well while it’s at it.  In the few months that I’ve been using it, it has effortlessly worked its way into permanent use in my console.  It’s interface is simple, without putting on the pretentious snobbery of being “minimalist”.  Setup is a tad more involved, but then, what console app doesn’t require a little more work than its GUI counterpart?  The documentation is quite thorough, though, so it’s a snap to be up and running within just a few minutes or so.

Weechat screenshot

Weechat screenshot

Once you do get logged in, you’re presented with an interface that contains just about everything you might expect to see in a GUI-based IRC client.  There are the channel- and nicklists all laid out, and unique nick coloring in the message area, though not quite perfect in its choice of unique colors, works pretty well and is turned on by default.  Don’t like the default interface?  Well fine!  Weechat offers the ability to change the layout and sizing of various elements via direct commands in the interface, or by changing the relevant entries in its configuration file before run time.  There is no theming system, at least not as people have come to know such things.  You can change the coloring of various elements, but you have to make these changes by hand; there is no single theme file you can drop in to change everything at once.  Personally, I’ve found the default scheme to be quite pleasant, even though I’ve been prone to becoming borderline obssesive with other GUI and console clients.

Weechat is extendable, with a variety of plugin scripts already available, despite the app being a relative newcomer to the playing field, and even with a few random scripts installed, it’s extremely stable and reliable, never once stumbling and forcing me to issue a /redraw to refresh the screen layout.  An example of such a script would be the ability to enter “/specs” in a chat room, and watch as Weechat posts your system’s configuration in the channel for all to see.  Why?  Well why not!  We’re geeks!  We like to show off now and then!
What’s more, Weechat supports a wide array of scripting languages.  From Python to Perl to C, your language of choice is probably usable for Weechat extension scripting.  Heck, even LUA is supported!  Who the heck writes in LUA?!  :D
The point is that if just chatting in IRC isn’t enough, Weechat’s solidly in your corner if you want to extend its capabilities.  [EDIT: At the time of this writing, there is no actual system specs script included in WeeChat.  Sounds like a slot that needs filling, coders!  *wink wink*]  For a starting point for WeeChat scripts, check out the plugins page for WeeChat at FlashTux.

Navigation among the windows (or screens or whatever you like) is simple, but does take a little getting used to at first, if you’re used to GUI-based clients.  As you join more channels, you will see numbered entries begin to march into place on the channels list.  You can access individual channel windows by holding the Alt (or Option) key, and then pressing the number of the window you wish to bring to the front.  You can also hop sequentially through them by holding Alt (or Option) and using the side arrow keys.  Closing a window varies, depending on what the window actually is.  For example, if you want to close a private message window, just type in /close in the message bar.  To leave and close a channel, /part.  Most commands are pretty easy to figure out, even without any kind of documentation, but if you need it, it’s easy enough to switch to the “main” window, usually the first in the list, and enter /help.

For me, Weechat took a lot of the complexity and busy-work out of getting an IRC console client up and running.  Features that I had to add or change after installation in other clients to make me feel comfortable with them were already included and set as default in this one, and interestingly enough, just happen to almost perfectly coincide with what I had in mind when I first heard the words “Linux console IRC client”.  There are actually many more features available than I even have a use for, but it’s really nice to know that they are there for me if I want them, which is one of the major points that make me feel like I’ve found THE app for console-based IRC clients.

JDHore -

WeeChat is designed to be a fast and light, while incredibly powerful and extensible CLI IRC client, and I believe it pulls off that job quite well. It supports plugins and scripts written in C, Perl, Python, Ruby, TCL and LUA, which is extremely impressive, considering that most IRC clients only support one or 2 scripting languages.

Weechat Screenshot 2

Weechat Screenshot 2

It is also very easy to setup and use everyday. All the settings are recommended to be changed with the /set command, although you can also manually edit the configuration file if you’re feeling a little more bold, but be careful, because you can break things in an interesting manner that way! ;)

It has one feature which is incredibly rare in a CLI IRC client, It has a simple nicklist enabled on the left side of the screen (default positioning). You can customize the way everything works and looks.  How nicks are completed, if the client will automatically reconnect you after a disconnect, how the nicklist and action list are sorted and where everything is (want the input bar at the top of the window? WeeChat can do that).

One of the very huge advantages of Weechat,  in my opinion, is the fact that the main developer actually regularly talks with users in the Support/Development channel (#weechat on Freenode) about new features, and helps them fix issues they’re having and the like. WeeChat is also extremely actively developed. It’s quite rare that there are zero commits to WeeChat’s git development repository in a day. Many other clients with many more users and many more developers don’t do half as much development.

The only downside I can see to WeeChat is that it doesn’t have as many scripts as irssi (see below). WeeChat only has 79 scripts available as of this writing, irssi probably has at least 500 available.  That being said however, everything I did with irssi that required the addition of 10 scripts, I can do in WeeChat usually without any additional scripts. WeeChat also has a significant advantage here, in that it supports so many scripting languages, so if you want to write a script or need a script written, more than likely you can find someone who knows C or Python or Perl or Ruby or TCL or LUA, rather than limited exclusively to Perl.

Tetris?  YES-tris!

Tetris? YES-tris!

WeeChat even amazes you in the little features that are just incredible. For example, being able to scroll a buffer back 7 hours to see what you missed with one simple command (/buffer scroll 7h), support for partial nick completion and showing you the possible completions in the status bar, sort the action list by what’s happened (hilights and queries first, chat second, joins/parts/quits/nickchanges/other crap last), the ability to ignore specific types of information on buffers (ignore joins/parts on #weechat, never show “action” for the server buffer), full text search in buffers and even spell check!

Also, as a small side note: WeeChat has quite possibly the best documentation of any IRC client i’ve ever used, including GUI clients. It’s VERY easy to read, it’s available in multiple formats (single-page HTML, multi-page HTML and PDF) and it has every bit of information you’ll need. What all the API calls do (for developers), what all the default keybindings are, what all the commands do (like /buffer) and all their switches and what every single setting in the /set menu does.

In my opinion, I believe WeeChat is the closest thing to Console IRC perfection anybody will ever find. It may seem a bit daunting at first, but stick with it.  You’ll be glad you did, as it’s quite an amazing client.

Another App


CMack -

IRSSI represented my first foray into console-based IRC clients, which is why it took me a few hours to get it set up and at least connecting to one of my favorite networks.  Initially, satisfaction was quite high with it.  Despite some lengthy documentation, the segments dealing with initial setup and configuration seem to be broken up between two separate locations, which made things a bit cumbersome.  The upshot is that I learned a little more about the very nature of IRC and how it works, since I was now forced to deal with proper naming conventions for each property, instead of having them almost hidden and candied up by a slick GUI interface.  In other words, I had to think in terms of Network > Server > Channel (some networks have more than one server), instead of just Network > Channel, and most of the graphical clients seemed to be trying to protect me from having to dig too deep into it.  This is all well and good for the beginner, but the downside is that the user never really comes to understand how it works.  We must never forsake the experience of trying something new, simply because it makes you do things the way they’re supposed to be done.  I’ve been a PC guy for many years and I know what I like, and what works well, but I still have an appreciation for an app that doesn’t go out of its way to make things too easy at the cost of providing some valuable experience and knowledge.  Yes, there is such a thing.  If you work with video as at least a serious hobby, and have ever tried Windows Movie Maker, you’ll know what I mean.

Irssi screenshot

Irssi screenshot

For that alone IRSSI gets a hearty golf clap, but to be fair, that isn’t what it’s trying to do; it’s simply the nature of working in the console.  Having said all that, it does do a great job, and out of the box, is stable as all heck.  It’s extremely extendable, featuring a huge (and still growing) list of add-on scripts, both in the official library and on other third party sites.

It’s also has a themes engine, which allows you to drop in a file, call it with a simple command, and BOOM!  Instant new color scheme!  Unfortunately, this does not include changes in the actual interface layout;  that must be done by hand, and I must say, it’s no easy task.  Sure there are scripts that change the kind of information displayed on the status bar and such, but to-date, there is no such animal available to display a static nick list.  For me, this was a big pain in particular.  I came to expect the ability to see the channels I had joined at a glance, as well as the user names that were currently logged into a given channel.  You can get a quick current users list with a simple /NAMES command, but it’s just not the same.  Some enthusiasts have shrugged at this complaint and said “Eh, it’s really not that important.  You’ll get over it.”  Unfortunately, I never did.  It was a constant nagging thing to add to a growing list of nit-picks that were beginning to detract from my ability to just forget the app and simply use it.  Little things like nick highlighting (flashing or coloring that indicates somebody just said your name) were missing entirely until you installed an add-on script.

Fast forward through even more time as I hunt down and install the scripts that I believe are relevent to my particular use.  It was hopeless; I just couldn’t get around not having an easy-t0-read listing of joined channels and users.  I did my best to ignore it, but as time went by, their absence only became more pronounced.  For example, in lieu of a channels list, you are given a small segment of the status bar with a series of numbers, representing the windows of channels and networks that you are currently in.  It’s up to you to remember which number represents which window.  With the installation of a specific script, this line is simplified somewhat, showing only the numbers of the windows in which the content has changed since you last viewed them.  It’s helpful, but at the same time, only made matters worse.  The status line is locked to a specific height, and is barely enough to contain the plethora of (extremely simplified) tags and other information that it displays.  With a little bit of coding this can be modified, but it’s not easy to find instructions on how to do this, and the potential resulting fallout can cause even more frustration.

To make matters worse, some of the scripts  seemed prone to glitching every once in a while, with the status bar seeming to break and displaying a portion of an error message that simply does not go away until you manually /REDRAW, and sometimes not even then.  This behavior went away entirely when I removed all of the installed scripts, but I was unable to determine which one was the source of the trouble.  To make matters worse, as I grew as an IRC user, I began to join more channels and talk with more people, many of whom would “ping” me with private messages.  The screen would flash, indicating that somebody had just said something to (or about) me, but thanks to the stark status bar, I had to flip through all of the windows to figure out where they were.  It was a frustrating waste of time that continually made me more and more aware of the tool itself (IRSSI), stealing my focus from what I was supposed to be doing WITH the tool.

In my eyes, this is not a good thing at all.  A tool should never be so cumbersome or attention-grabbing as to make you continually aware of the tool.  A mechanic does not continually take notice of the wrench in his hand; he simply uses it to loosen a nut.  The wrench itself isn’t actually noticed specifically until it’s time to clean the tools, and that’s as it should be.  IRSSI is specific in its purpose and, on its own, fulfills that purpose well.  Unfortunately, just like using a pipe on a wrench to enhance its leverage, you take on the risk of breaking it.

JDHore -

Before I go into my opionion of Irssi, let me be clear on something.  I’ve been using WeeChat for about 2 months prior to this writing. Before I was a WeeChat user, I was an irssi user for close to 18 months.

Irssi is a great and very popular CLI client. There are well over 500 scripts in the official irssi script repository and probably a few hundred more on random peoples’ websites, there’s a #irssi unofficial support channel on every major network (Freenode, EFNet, IRCNet and more) and there are guides for it all over the intertubes, and I can see why.

It’s quite a good client. It’s certainly not amazing like WeeChat, but it’s quite good nevertheless. It doesn’t have a nicklist (you can get one with a script and a bunch of screen hackery however), it ONLY supports Perl scripts and it’s not very customizable compared to WeeChat. The website documentation is also notoriously hard to pore through as it’s not really well done at all (no CSS, not many tables, just blah, mostly raw text). Also, the developers are quite difficult to get in contact with and even with at least 4 core developers and a ton of users, development speed is abysmal. As of the writing of this article, WeeChat has had 5 commits in the past 48 hours, irssi on the other hand hasn’t had a single commit in 7 days. Also, with Irssi, every few days I would get an error messages such as: “You edited your config file while irssi was running, please type /reload or /save to fix this”. In the 2 months i’ve been using Weechat, no such maladies to report.

Irssi is great to get started with if you’re just getting into CLI clients. There are hundreds of guides about how to do everything with it, you don’t need to screw with many configuration options just to get started using it (With WeeChat, you do have to adjust a lot of settings before you can start it).

In short, Irssi is a good client. It’s got some good functionality, it is well-known and decently-documented, (even if those docs are a pain to read through).  It’s a decent place to start if you’re new to the CLi IRC, but chances are you’ll find yourself wanting a little more pretty quickly.

  1. #1 by Evan - July 24th, 2010 at 12:49

    I write in Lua, that’s who >:(

    • #2 by cmack - July 24th, 2010 at 23:38

      Great! Need moar plugins please! :D
      Thanks for posting up!

(will not be published)

  1. No trackbacks yet.