Recent from talks
Nothing was collected or created yet.
| Communication protocol | |
| Abbreviation | IRC |
|---|---|
| Purpose | Instant messaging |
| Developer(s) | Jarkko Oikarinen |
| Introduction | August 1988 |
| Influenced | IRCv3 (standards process working group) |
| OSI layer | Application layer |
| Port(s) | 6667, 6697 |
| RFC(s) | 1459 |
| Internet protocol suite |
|---|
| Application layer |
| Transport layer |
| Internet layer |
| Link layer |

IRC (Internet Relay Chat) is a text-based chat system for instant messaging. IRC is designed for group communication in discussion forums, called channels,[1] but also allows one-on-one communication via private messages[2] as well as chat and data transfer,[3] including file sharing.[4]
Internet Relay Chat is implemented as an application layer protocol to facilitate communication in the form of text. The chat process works on a client–server networking model. Users connect, using a client—which may be a web app, a standalone desktop program, or embedded into part of a larger program—to an IRC server, which may be part of a larger IRC network. Examples of ways used to connect include the programs Mibbit, KiwiIRC, mIRC and the paid service IRCCloud.
IRC usage has been declining steadily since 2003, losing 60 percent of its users by 2012.[5] In April 2011, the top 100 IRC networks served more than 200,000 users at a time.[6]
History
[edit]IRC was created by Jarkko Oikarinen in August 1988 to replace a program called MUT (MultiUser Talk) on a BBS called OuluBox at the University of Oulu in Finland, where he was working at the Department of Computer Science. Jarkko intended to extend the BBS software he administered, to allow news in the Usenet style, real time discussions and similar BBS features. The first part he implemented was the chat part, which he did with borrowed parts written by his friends Jyrki Kuoppala and Jukka Pihl. The first IRC network was running on a single server named tolsun.oulu.fi.[7] Oikarinen found inspiration in a chat system known as Bitnet Relay, which operated on the BITNET.[8]
Jyrki Kuoppala pushed Oikarinen to ask Oulu University to free the IRC code so that it also could be run outside of Oulu, and after they finally got it released, Jyrki Kuoppala immediately installed another server. This was the first "IRC network". Oikarinen got some friends at the Helsinki University of Technology and Tampere University of Technology[8] to start running IRC servers when his number of users increased and other universities soon followed. At this time Oikarinen realized that the rest of the BBS features probably would not fit in his program.[7]
Oikarinen contacted people at the University of Denver and Oregon State University. They had their own IRC network running and wanted to connect to the Finnish network. They had obtained the program from one of Oikarinen's friends, Vijay Subramaniam—the first non-Finnish person to use IRC. IRC then grew larger and got used on the entire Finnish national network—FUNET—and then connected to Nordunet, the Scandinavian branch of the Internet. In November 1988, IRC had spread across the Internet and in the middle of 1989, there were some 40 servers worldwide.[7]
EFnet
[edit]In August 1990, the first major disagreement took place in the IRC world. The "A-net" (Anarchy net) included a server named eris.berkeley.edu. It was all open, required no passwords and had no limit on the number of connects. As Greg "wumpus" Lindahl explains:[9] "it had a wildcard server line, so people were hooking up servers and nick-colliding everyone". The "Eris Free Network", EFnet, made the eris machine the first to be Q-lined (Q for quarantine) from IRC. In wumpus' words again:[9] "Eris refused to remove that line, so I formed EFnet. It wasn't much of a fight; I got all the hubs to join, and almost everyone else got carried along." A-net was formed with the eris servers, while EFnet was formed with the non-eris servers. History showed most servers and users went with EFnet. Once A-net disbanded, the name EFnet became meaningless, and once again it was the one and only IRC network.[7]
Around that time IRC was used to report on the 1991 Soviet coup d'état attempt throughout a media blackout.[10] It was previously used in a similar fashion during the Gulf War.[11] Chat logs of these and other events are kept in the ibiblio archive.[12]
Undernet fork
[edit]Another fork effort, the first that made a lasting difference, was initiated by "Wildthang" in the United States in October 1992. (It forked off the EFnet ircd version 2.8.10). It was meant to be just a test network to develop bots on but it quickly grew to a network "for friends and their friends". In Europe and Canada a separate new network was being worked on and in December the French servers connected to the Canadian ones, and by the end of the month, the French and Canadian network was connected to the US one, forming the network that later came to be called "The Undernet".[7]
The "undernetters" wanted to take ircd further in an attempt to make it use less bandwidth and to try to sort out the channel chaos (netsplits and takeovers) that EFnet started to suffer from. For the latter purpose, the Undernet implemented timestamps, new routing and offered the CService—a program that allowed users to register channels and then attempted to protect them from troublemakers. The first server list presented, from 15 February 1993, includes servers from the U.S., Canada, France, Croatia and Japan. On 15 August, the new user count record was set to 57 users.[7]
In May 1993, RFC 1459[13] was published and details a simple protocol for client/server operation, channels, one-to-one and one-to-many conversations.[7] A significant number of extensions like CTCP, colors and formats are not included in the protocol specifications, nor is character encoding,[14] which led various implementations of servers and clients to diverge. Software implementation varied significantly from one network to the other, each network implementing their own policies and standards in their own code bases.
DALnet fork
[edit]During the summer of 1994, the Undernet was itself forked. The new network was called DALnet (named after its founder: dalvenjah), formed for better user service and more user and channel protections. One of the more significant changes in DALnet was use of longer nicknames (the original ircd limit being 9 letters). DALnet ircd modifications were made by Alexei "Lefler" Kosut. DALnet was thus based on the Undernet ircd server, although the DALnet pioneers were EFnet abandoners. According to James Ng, the initial DALnet people were "ops in #StarTrek sick from the constant splits/lags/takeovers/etc".[7]
DALnet quickly offered global WallOps (IRCop messages that can be seen by users who are +w (/mode NickName +w)), longer nicknames, Q:Lined nicknames (nicknames that cannot be used i.e. ChanServ, IRCop, NickServ, etc.), global K:Lines (ban of one person or an entire domain from a server or the entire network), IRCop only communications: GlobOps, +H mode showing that an IRCop is a "helpop" etc. Much of DALnet's new functions were written in early 1995 by Brian "Morpher" Smith and allow users to own nicknames, control channels, send memos, and more.[7]
IRCnet fork
[edit]In July 1996, after months of flame wars and discussions on the mailing list, there was yet another split due to disagreement in how the development of the ircd should evolve. Most notably, the "European" (most of those servers were in Europe) side that later named itself IRCnet argued for nick and channel delays whereas the EFnet side argued for timestamps.[7] There were also disagreements about policies: the European side had started to establish a set of rules directing what IRCops could and could not do, a point of view opposed by the US side.[15]
Most (not all) of the IRCnet servers were in Europe, while most of the EFnet servers were in the US. This event is also known as "The Great Split" in many IRC societies. EFnet has since (as of August 1998) grown and passed the number of users it had then. In the (northern) autumn of the year 2000, EFnet had some 50,000 users and IRCnet 70,000.[7]
Modern IRC
[edit]IRC has changed much over its life on the Internet. New server software has added a multitude of new features.
- Services: Network-operated bots to facilitate registration of nicknames and channels, sending messages for offline users and network operator functions.
- Extra modes: While the original IRC system used a set of standard user and channel modes, new servers add many new modes for features such as removing color codes from text,[16] or obscuring a user's hostmask ("cloaking") to protect from denial-of-service attacks.[17]
- Proxy detection: Most modern servers support detection of users attempting to connect through an insecure (misconfigured or exploited) proxy server, which can then be denied a connection. This proxy detection software is used by several networks, although that real time list of proxies is defunct since early 2006.[18]
- Additional commands: New commands can be such things as shorthand commands to issue commands to Services, to network-operator-only commands to manipulate a user's hostmask.[citation needed]
- Encryption: For the client-to-server leg of the connection TLS might be used (messages cease to be secure once they are relayed to other users on standard connections, but it makes eavesdropping on or wiretapping an individual's IRC sessions difficult). For client-to-client communication, SDCC (Secure DCC) can be used.[citation needed]
- Connection protocol: IRC can be connected to via both IPv4 and IPv6
As of 2016[update], a new standardization effort is under way under a working group called IRCv3, which focuses on more advanced client features such as instant notifications, better history support and improved security.[19] As of 2019[update], no major IRC networks have fully adopted the proposed standard.[20]
As of June 2021,[update] there are 481 different IRC networks known to be operating,[21] of which the open source Libera Chat, founded in May 2021, has the most users, with 20,374 channels on 26 servers; between them, the top 100 IRC networks share over 100 thousand channels operating on about one thousand servers.[22]
After its golden era during the 1990s and early 2000s (240,000 users on QuakeNet in 2004), IRC has seen a significant decline, losing around 60% of users between 2003 and 2012, with users moving to social media platforms such as Facebook or Twitter,[5] but also to open platforms such as XMPP which was developed in 1999. Certain networks such as Freenode have not followed the overall trend and have more than quadrupled in size during the same period.[5] However, Freenode, which in 2016 had around 90,000 users, has since declined to about 9,300 users.[23]
The largest IRC networks have traditionally been grouped as the "Big Four"[24][25][26][27]—a designation for networks that top the statistics. The Big Four networks change periodically, but due to the community nature of IRC there are a large number of other networks for users to choose from.
Historically the "Big Four" were:[24][25][26]
IRC reached 6 million simultaneous users in 2001 and 10 million users in 2004–2005, dropping to around 350k in 2021.[citation needed]
The top 100 IRC networks have around 230k users connected at peak hours.[28]
Timeline
[edit]Timeline of major networks:
- EFnet, 1990 to present
- Undernet, 1992 to present
- DALnet, 1994 to present
- freenode, 1995 to 2021
- IRCnet, 1996 to present
- QuakeNet, 1997 to present
- ChatIRCnet, 2000 to present
- Open and Free Technology Community, 2001 to present
- Rizon, 2002 to present
- Libera Chat, 2021 to present
Technical information
[edit]

IRC is an open protocol that uses TCP[13] and, optionally, TLS. An IRC server can connect to other IRC servers to expand the IRC network.[29] Users access IRC networks by connecting a client to a server.[30] There are many client implementations, such as mIRC, HexChat and irssi, and server implementations, e.g. the original IRCd. Most IRC servers do not require users to register an account but a nickname is required before being connected.[31]
IRC was originally a plain text protocol[13] (although later extended), which on request was assigned port 194/TCP by IANA.[32] However, the de facto standard has always been to run IRC on 6667/TCP[33] and nearby port numbers (for example TCP ports 6660–6669, 7000)[34] to avoid having to run the IRCd software with root privileges.
The protocol specified that characters were 8-bit but did not specify the character encoding the text was supposed to use.[14] This can cause problems when users using different clients and/or different platforms want to converse.
All client-to-server IRC protocols in use today are descended from the protocol implemented in the irc2.4.0 version of the IRC2 server, and documented in RFC 1459. Since RFC 1459 was published, the new features in the irc2.10 implementation led to the publication of several revised protocol documents (RFC 2810, RFC 2811, RFC 2812 and RFC 2813); however, these protocol changes have not been widely adopted among other implementations.[citation needed]
Although many specifications on the IRC protocol have been published, there is no official specification, as the protocol remains dynamic. Virtually no clients and very few servers rely strictly on the above RFCs as a reference.[citation needed]
Microsoft made an extension for IRC in 1998 via the proprietary IRCX.[35] They later stopped distributing software supporting IRCX, instead developing the proprietary MSNP.
The standard structure of a network of IRC servers is a tree.[36] Messages are routed along only necessary branches of the tree but network state is sent to every server[37] and there is generally a high degree of implicit trust between servers. However, this architecture has a number of problems. A misbehaving or malicious server can cause major damage to the network[38] and any changes in structure, whether intentional or a result of conditions on the underlying network, require a net-split and net-join. This results in a lot of network traffic and spurious quit/join messages to users[39] and temporary loss of communication to users on the splitting servers. Adding a server to a large network means a large background bandwidth load on the network and a large memory load on the server. Once established, however, each message to multiple recipients is delivered in a fashion similar to multicast, meaning each message travels a network link exactly once.[40] This is a strength in comparison to non-multicasting protocols such as Simple Mail Transfer Protocol (SMTP)[citation needed] or Extensible Messaging and Presence Protocol (XMPP)[citation needed].
An IRC daemon can be used on a local area network (LAN). IRC can thus be used to facilitate communication between people within the local area network (internal communication).[41][42]
Commands and replies
[edit]IRC has a line-based structure. Clients send single-line messages to the server,[43] receive replies to those messages[44] and receive copies of some messages sent by other clients. In most clients, users can enter commands by prefixing them with a '/'. Depending on the command, these may either be handled entirely by the client, or (generally for commands the client does not recognize) passed directly to the server, possibly with some modification.[45]
Due to the nature of the protocol, automated systems cannot always correctly pair a sent command with its reply with full reliability and are subject to guessing.[46]
Channels
[edit]The basic means of communicating to a group of users in an established IRC session is through a channel.[47] Channels on a network can be displayed using the IRC command LIST,[48] which lists all currently available channels that do not have the modes +s or +p set, on that particular network.
Users can join a channel using the JOIN command,[49] in most clients available as /join #channelname. Messages sent to the joined channels are then relayed to all other users.[47]
Channels that are available across an entire IRC network are prefixed with a '#', while those local to a server use '&'.[50] Other less common channel types include '+' channels—'modeless' channels without operators[51]—and '!' channels, a form of timestamped channel on normally non-timestamped networks.[52]
Modes
[edit]Users and channels may have modes that are represented by individual case-sensitive letters[53] and are set using the MODE command.[54] User modes and channel modes are separate and can use the same letter to mean different things (e.g. user mode "i" is invisible mode while channel mode "i" is invite only.[55]) Modes are usually set and unset using the mode command that takes a target (user or channel), a set of modes to set (+) or unset (-) and any parameters the modes need.
Some channel modes take parameters and other channel modes apply to a user on a channel or add or remove a mask (e.g. a ban mask) from a list associated with the channel rather than applying to the channel as a whole.[56] Modes that apply to users on a channel have an associated symbol that is used to represent the mode in names replies[57] (sent to clients on first joining a channel[49] and use of the names command) and in many clients also used to represent it in the client's displayed list of users in a channel or to display an own indicator for a user's modes.
In order to correctly parse incoming mode messages and track channel state the client must know which mode is of which type and for the modes that apply to a user on a channel which symbol goes with which letter. In early implementations of IRC this had to be hard-coded in the client but there is now a de facto standard extension to the protocol called ISUPPORT that sends this information to the client at connect time using numeric 005.[58][59]
There is a small design fault in IRC regarding modes that apply to users on channels: the names message used to establish initial channel state can only send one such mode per user on the channel,[57] but multiple such modes can be set on a single user. For example, if a user holds both operator status (+o) and voice status (+v) on a channel, a new client will be unable to see the mode with less priority (i.e. voice). Workarounds for this are possible on both the client and server side; a common solution is to use IRCv3 "multi-prefix" extension.[60]
Standard (RFC 1459) modes
[edit]| Letter | Symbol | Description |
|---|---|---|
| i | Invisible—cannot be seen without a common channel or knowing the exact name | |
| s | Receives server notices | |
| w | Receives wallops[61] | |
| o | User is an IRC operator (ircop) |
| Letter | Symbol | Parameter(s) | Description |
|---|---|---|---|
| o | @ | Name of affected user | Channel operator—can change channel modes and kick users out of the channel among other things |
| s | Secret channel—not shown in channel list or user whois except to users already on the channel | ||
| p | Private channel—listed in channel list as "prv" according to RFC 1459 | ||
| n | Users cannot send messages to the channel externally | ||
| m | Channel is moderated (only those who hold channel operator or voice status on the channel can send messages to it) | ||
| i | Only users with invites may enter the channel. | ||
| t | Only channel operators can change the channel topic. | ||
| l | Limit number | Limits number of users able to be on channel (when full, no new users can join) | |
| b | Ban mask (nick!user@host with wildcards allowed) | Bans hostmasks from channel | |
| v | + | Name of affected user | Gives a user voice status on channel (see +m above) |
| k | New channel key | Sets a channel key such that only users knowing the key can enter |
Many daemons and networks have added extra modes or modified the behavior of modes in the above list.[62][63][64][65]
Channel operators
[edit]A channel operator is a client on an IRC channel that manages the channel. IRC channel operators can be easily seen by the symbol or icon next to their name (varies by client implementation, commonly a "@" symbol prefix, a green circle, or a Latin letter "+o"/"o"). On most networks, an operator can:
- Kick a user.
- Ban a user.
- Give another user IRC Channel Operator Status or IRC Channel Voice Status.
- Change the IRC Channel topic while channel mode +t is set.
- Change the IRC Channel Mode locks.
Operators
[edit]There are also users who maintain elevated rights on their local server, or the entire network; these are called IRC operators,[66] sometimes shortened to IRCops or Opers (not to be confused with channel operators). As the implementation of the IRCd varies, so do the privileges of the IRC operator on the given IRCd. RFC 1459[66] claims that IRC operators are "a necessary evil" to keep a clean state of the network, and as such they need to be able to disconnect and reconnect servers. Additionally, to prevent malicious users or even harmful automated programs from entering IRC, IRC operators are usually allowed to disconnect clients and completely ban IP addresses or complete subnets. Networks that carry services (NickServ et al.) usually allow their IRC operators also to handle basic "ownership" matters. Further privileged rights may include overriding channel bans (being able to join channels they would not be allowed to join, if they were not opered), being able to op themselves on channels where they would not be able without being opered, being auto-opped on channels always and so forth.
Hostmasks
[edit]A hostmask is a unique identifier of an IRC client connected to an IRC server.[67][68] IRC servers, services, and other clients, including bots, can use it to identify a specific IRC session.
The format of a hostmask is nick!user@host. The hostmask looks similar to, but should not be confused with an e-mail address.
The nick part is the nickname chosen by the user and may be changed while connected. The user part is the username reported by ident on the client.[69] If ident is not available on the client, the username specified when the client connected is used after being prefixed with a tilde.[70]
The host part is the hostname the client is connecting from. If the IP address of the client cannot be resolved to a valid hostname by the server, it is used instead of the hostname.
Because of the privacy implications of exposing the IP address or hostname of a client, some IRC daemons also provide privacy features, such as InspIRCd or UnrealIRCd's "+x" mode. This hashes a client IP address or masks part of a client's hostname, making it unreadable to users other than IRCops. Users may also have the option of requesting a "virtual host" (or "vhost"), to be displayed in the hostmask to allow further anonymity. Some IRC networks, such as Libera Chat or Freenode, use these as "cloaks" to indicate that a user is affiliated with a group or project.[71]
URI scheme
[edit]There are three provisional recognized uniform resource identifier (URI) schemes for Internet Relay Chat: irc, ircs, and irc6.[72] When supported, they allow hyperlinks of various forms, including
irc://<host>[:<port>]/[<channel>[?<channel_keyword>]] ircs://<host>[:<port>]/[<channel>[?<channel_keyword>]] irc6://<host>[:<port>]/[<channel>[?<channel_keyword>]]
(where items enclosed within brackets ([,]) are optional) to be used to (if necessary) connect to the specified host (or network, if known to the IRC client) and join the specified channel.[73] (This can be used within the client itself, or from another application such as a Web browser). irc is the default URI, irc6 specifies a connection to be made using IPv6, and ircs specifies a secure connection.
Per the specification, the usual hash symbol (#) will be prepended to channel names that begin with an alphanumeric character—allowing it to be omitted. Some implementations (for example, mIRC) will do so unconditionally resulting in a (usually unintended) extra (for example, ##channel), if included in the URL.
Some implementations allow multiple channels to be specified, separated by commas.[74]
Challenges
[edit]Issues in the original design of IRC were the amount of shared state data[75][76] being a limitation on its scalability,[77] the absence of unique user identifications leading to the nickname collision problem,[78] lack of protection from netsplits by means of cyclic routing,[79][80] the trade-off in scalability for the sake of real-time user presence information,[81] protocol weaknesses providing a platform for abuse,[82] no transparent and optimizable message passing,[83] and no encryption.[84] Some of these issues have been addressed in Modern IRC.
Attacks
[edit]Because IRC connections may be unencrypted and typically span long time periods, they are an attractive target for DoS/DDoS attackers and hackers. Because of this, careful security policy is necessary to ensure that an IRC network is not susceptible to an attack such as a takeover war. IRC networks may also K-line or G-line users or servers that have a harming effect.
Some IRC servers support SSL/TLS connections for security purposes. This helps stop the use of packet sniffer programs to obtain the passwords of IRC users, but has little use beyond this scope due to the public nature of IRC channels. SSL connections require both client and server support (that may require the user to install SSL binaries and IRC client specific patches or modules on their computers). Some networks also use SSL for server-to-server connections, and provide a special channel flag (such as +S) to only allow SSL-connected users on the channel, while disallowing operator identification in clear text, to better utilize the advantages that SSL provides.[85][86]
IRC served as an early laboratory for many kinds of Internet attacks, such as using fake ICMP unreachable messages to break TCP-based IRC connections (nuking) to annoy users or facilitate takeovers.
Abuse prevention
[edit]One of the most contentious technical issues surrounding IRC implementations, which survives to this day, is the merit of "Nick/Channel Delay" vs. "Timestamp" protocols. Both methods exist to solve the problem of denial-of-service attacks, but take very different approaches. The problem with the original IRC protocol as implemented was that when two servers split and rejoined, the two sides of the network would simply merge their channels. If a user could join on a "split" server, where a channel that existed on the other side of the network was empty, and gain operator status, they would become a channel operator of the "combined" channel after the netsplit ended; if a user took a nickname that existed on the other side of the network, the server would kill both users when rejoining (a "nick collision"). This was often abused to "mass-kill" all users on a channel, thus creating "opless" channels where no operators were present to deal with abuse. Apart from causing problems within IRC, this encouraged people to conduct denial-of-service attacks against IRC servers in order to cause netsplits, which they would then abuse.
The nick delay (ND) and channel delay (CD) strategies aim to prevent abuse by delaying reconnections and renames. After a user signs off and the nickname becomes available, or a channel ceases to exist because all its users parted (as often happens during a netsplit), the server will not allow any user to use that nickname or join that channel, until a certain period of time (the delay) has passed. The idea behind this is that even if a netsplit occurs, it is useless to an abuser because they cannot take the nickname or gain operator status on a channel, and thus no collision of a nickname or "merging" of a channel can occur. To some extent, this inconveniences legitimate users, who might be forced to briefly use a different name after rejoining (appending an underscore is popular).
The timestamp protocol is an alternative to nick/channel delays which resolves collisions using timestamped priority. Every nickname and channel on the network is assigned a timestamp – the date and time when it was created. When a netsplit occurs, two users on each side are free to use the same nickname or channel, but when the two sides are joined, only one can survive. In the case of nicknames, the newer user, according to their TS, is killed; when a channel collides, the members (users on the channel) are merged, but the channel operators on the "losing" side of the split lose their channel operator status.
TS is a much more complicated protocol than ND/CD, both in design and implementation, and despite having gone through several revisions, some implementations still have problems with "desyncs" (where two servers on the same network disagree about the current state of the network), and allowing too much leniency in what was allowed by the "losing" side. Under the original TS protocols, for example, there was no protection against users setting bans or other modes in the losing channel that would then be merged when the split rejoined, even though the users who had set those modes lost their channel operator status. Some modern TS-based IRC servers have also incorporated some form of ND and/or CD in addition to timestamping in an attempt to further curb abuse.
Most networks today use the timestamping approach. The timestamp versus ND/CD disagreements caused several servers to split away from EFnet and form the newer IRCnet. After the split, EFnet moved to a TS protocol, while IRCnet used ND/CD.
In recent versions of the IRCnet ircd, as well as ircds using the TS6 protocol (including Charybdis), ND has been extended/replaced by a mechanism called SAVE. This mechanism assigns every client a UID upon connecting to an IRC server. This ID starts with a number, which is forbidden in nicks (although some ircds, namely IRCnet and InspIRCd, allow clients to switch to their own UID as the nickname).
If two clients with the same nickname join from different sides of a netsplit ("nick collision"), the first server to see this collision will force both clients to change their nick to their UID, thus saving both clients from being disconnected. On IRCnet, the nickname will also be locked for some time (ND) to prevent both clients from changing back to the original nickname, thus colliding again.
Clients
[edit]Client software
[edit]
Client software exists for various operating systems or software packages, as well as web-based or inside games. Many different clients are available for the various operating systems, including Windows, Unix and Linux, macOS and mobile operating systems (such as iOS and Android). On Windows, mIRC is one of the most popular clients.[87] Some Linux distributions come with an IRC client preinstalled, such as Linux Mint which comes with HexChat preinstalled.
Some programs which are extensible through plug-ins also serve as platforms for IRC clients. For instance, a client called ERC, written entirely in Emacs Lisp, is included in v.22.3 of Emacs. Therefore, any platform that can run Emacs can run ERC.
A number of web browsers have built-in IRC clients, such as:
- Opera used to have a client, but no longer supports IRC
- ChatZilla add-on for Mozilla Firefox (for Firefox 56 and earlier; included as a built-in component of SeaMonkey).
Web-based clients, such as Mibbit and open source KiwiIRC, can run in most browsers.
Games such as War§ow,[88] Unreal Tournament (up to Unreal Tournament 2004),[89] Uplink,[90] Spring Engine-based games, 0 A.D. and ZDaemon have included IRC.[91]
Ustream's chat interface is IRC with custom authentication[92] as well as Twitch's (formerly Justin.tv).[93][94]
Bots
[edit]A typical use of bots in IRC is to provide IRC services or specific functionality within a channel such as to host a chat-based game or provide notifications of external events. However, some IRC bots are used to launch malicious attacks such as denial of service, spamming, or exploitation.[95]
Bouncer
[edit]A program that runs as a daemon on a server and functions as a persistent proxy is known as a BNC or bouncer. The purpose is to maintain a connection to an IRC server, acting as a relay between the server and client, or simply to act as a proxy.[citation needed] Should the client lose network connectivity, the BNC may stay connected and archive all traffic for later delivery, allowing the user to resume their IRC session without disrupting their connection to the server.[96]
Furthermore, as a way of obtaining a bouncer-like effect, an IRC client (typically text-based, for example Irssi) may be run on an always-on server to which the user connects via ssh. This also allows devices that only have ssh functionality, but no actual IRC client installed themselves, to connect to the IRC, and it allows sharing of IRC sessions.[97]
To keep the IRC client from quitting when the ssh connection closes, the client can be run inside a terminal multiplexer such as GNU Screen or tmux, thus staying connected to the IRC network(s) constantly and able to log conversation in channels that the user is interested in, or to maintain a channel's presence on the network. Modelled after this setup, in 2004 an IRC client following the client–server, called Smuxi, was launched.[98][99]
Search engines
[edit]There are numerous search engines available to aid the user in finding what they are looking for on IRC.[100][101] Generally the search engine consists of two parts, a "back-end" (or "spider/crawler") and a front-end "search engine".
The back-end (spider/webcrawler) is the work horse of the search engine. It is responsible for crawling IRC servers to index the information being sent across them. The information that is indexed usually consists solely of channel text (text that is publicly displayed in public channels). The storage method is usually some sort of relational database, like MySQL or Oracle.[citation needed]
The front-end "search engine" is the user interface to the database. It supplies users with a way to search the database of indexed information to retrieve the data they are looking for. These front-end search engines can also be coded in numerous programming languages.
Most search engines have their own spider that is a single application responsible for crawling IRC and indexing data itself; however, others are "user based" indexers. The latter rely on users to install their "add-on" to their IRC client; the add-on is what sends the database the channel information of whatever channels the user happens to be on.[citation needed]
Many users have implemented their own ad hoc search engines using the logging features built into many IRC clients. These search engines are usually implemented as bots and dedicated to a particular channel or group of associated channels.
Character encoding
[edit]IRC still lacks a single globally accepted standard convention for how to transmit characters outside the 7-bit ASCII repertoire. IRC servers normally[clarification needed] transfer messages from a client to another client just as byte sequences, without any interpretation or recoding of characters. The IRC protocol (unlike e.g. MIME or HTTP) lacks mechanisms for announcing and negotiating character encoding options. This has put the responsibility for choosing the appropriate character codec on the client. In practice, IRC channels have largely used the same character encodings that were also used by operating systems (in particular Unix derivatives) in the respective language communities:
- 7-bit era: In the early days of IRC, especially among Scandinavian and Finnish language users, national variants of ISO 646 were the dominant character encodings. These encode non-ASCII characters like Ä Ö Å ä ö å at code positions 0x5B 0x5C 0x5D 0x7B 0x7C 0x7D (US-ASCII: [ \ ] { | }). That is why these codes are always allowed in nicknames. According to RFC 1459, { | } in nicknames should be treated as lowercase equivalents of [ \ ] respectively.[14] By the late 1990s, the use of 7-bit encodings had disappeared in favour of ISO 8859-1, and such equivalence mappings were dropped from some IRC daemons.
- 8-bit era: Since the early 1990s, 8-bit encodings such as ISO 8859-1 have become commonly used for European languages. Russian users had a choice of KOI8-R, ISO 8859-5[citation needed] and CP1251, and since about 2000, modern Russian IRC networks convert between these different commonly used encodings of the Cyrillic script.
- Multi-byte era: For a long time, East Asian IRC channels with logographic scripts in China, Japan, and Korea have been using multi-byte encodings such as EUC or ISO-2022-JP. With the common migration from ISO 8859 to UTF-8 on Linux and Unix platforms since about 2002, UTF-8 has become an increasingly popular substitute for many of the previously used 8-bit encodings in European channels. Some IRC clients are now capable of reading messages both in ISO 8859-1 or UTF-8 in the same channel, heuristically autodetecting which encoding is used. The shift to UTF-8 began in particular on Finnish-speaking IRC (Merkistö (Finnish)).
Today, the UTF-8 encoding of Unicode/ISO 10646 would be the most likely contender for a single future standard character encoding for all IRC communication, if such standard ever relaxed the 510-byte message size restriction. UTF-8 is ASCII compatible and covers the superset of all other commonly used coded character set standards.
File sharing
[edit]Much like conventional P2P file sharing, users can create file servers that allow them to share files with each other by using customised IRC bots or scripts for their IRC client. Often users will group together to distribute warez via a network of IRC bots.[102]
Technically, IRC provides no file transfer mechanisms itself; file sharing is implemented by IRC clients, typically using the Direct Client-to-Client (DCC) protocol, in which file transfers are negotiated through the exchange of private messages between clients. The vast majority of IRC clients feature support for DCC file transfers, hence the view that file sharing is an integral feature of IRC.[103] The commonplace usage of this protocol, however, sometimes also causes DCC spam. DCC commands have also been used to exploit vulnerable clients into performing an action such as disconnecting from the server or exiting the client.
See also
[edit]Citations
[edit]- ^ "One-to-many". Internet Relay Chat Protocol. p. 11. sec. 3.2. doi:10.17487/RFC1459. RFC 1459.
- ^ "One-To-One Communication". Internet Relay Chat: Architecture. p. 5. sec. 5.1. doi:10.17487/RFC2810. RFC 2810.
- ^ Rollo, Troy. "A Description of the DCC Protocol". IRCHelp.org. Retrieved 8 April 2011.
- ^ Wang, Wallace (25 October 2004). "Instant Messaging and Online Chat Rooms: Internet Relay Chat (IRC)". Steal this File Sharing Book (1st ed.). San Francisco, California: No Starch Press. pp. 61–67. ISBN 978-1-59327-050-6.
- ^ a b c "IRC is dead, long live IRC". Pingdom. 24 April 2012. Archived from the original on 15 August 2017. Retrieved 25 April 2016.
- ^ "IRC Networks – Top 100". irc.netsplit.de. Retrieved 26 October 2023.
- ^ a b c d e f g h i j k Stenberg, Daniel. "History of IRC (Internet Relay Chat)". Retrieved 25 April 2016.
I did not experience all of this. I found information on various places and I received information from various people in order to write this. People that have helped me with this include: Greg "wumpus" Lindahl, Vesa "vesa" Ruokonen, James Ng, Tuomas Heino, Richard (eagle`s on undernet), Ari Lemmke
- ^ a b Oikarinen, Jarkko. "Founding IRC". mIRC. Archived from the original on 27 April 2011. Retrieved 8 April 2011.
- ^ a b "History of IRC (Internet Relay Chat)". daniel.haxx.se. Retrieved 22 July 2023.
- ^ "IRC transcripts from the time of the 1991 Soviet coup d'état attempt". Chapel Hill, North Carolina: ibiblio. Archived from the original on 28 June 2009. Retrieved 8 April 2011.
- ^ "IRC logs of events of the Gulf War". Chapel Hill, North Carolina: ibiblio. Retrieved 8 April 2011.
- ^ "Logs of major events in the online community". Chapel Hill, North Carolina: ibiblio. Retrieved 8 April 2011.
- ^ a b c "Introduction". Internet Relay Chat Protocol. p. 4. sec. 1. doi:10.17487/RFC1459. RFC 1459.
- ^ a b c "Character codes". Internet Relay Chat Protocol. p. 7. sec. 2.2. doi:10.17487/RFC1459. RFC 1459.
- ^ Engen, Vegard (May 2000). "The Great Split". IRC.org. Retrieved 25 April 2016.
- ^ "Channel Modes". UnrealIRCd documentation wiki. Retrieved 6 January 2018.
- ^ "Cloaking". UnrealIRCd documentation wiki. Retrieved 6 January 2018.
- ^ "Blitzed Open Proxy Monitor Shuts Down".
The Open Proxy Monitor which has been provided by the Blitzed IRC network has been shut down…The database was so large that it is near to impossible for the team to backup, or find a new location to continue the service. Added to that, most of the team members do not possess the time anymore to keep the service running.
- ^ "IRCv3". IRCv3 Working Group. 2016. Retrieved 25 April 2016.
The IRCv3 Working Group is a collection of IRC client and server software authors working to enhance, maintain and standardize the IRC protocol using backwards-compatible extensions.
- ^ "Networks - IRCv3". 2019. Retrieved 9 August 2019.
- ^ "IRC Networks - in alphabetical order". netsplit.de. Retrieved 12 January 2022.
- ^ "IRC Networks - Top 100". netsplit.de. Retrieved 12 January 2022.
- ^ "netsplit.de top 10". Retrieved 15 January 2021.
- ^ a b Charalabidis, Alex (15 December 1999). "IRCing On The Macintosh: Ircle". The Book of IRC: The Ultimate Guide to Internet Relay Chat (1st ed.). San Francisco, California: No Starch Press. p. 61. ISBN 978-1-886411-29-6.
On large networks such as the Big Four— EFnet, IRCnet, Undernet, and DALnet— trying to list the thousands of channels with Ircle always causes you to disconnect due to the flood of information, while other clients can usually manage the feat, if you are on a direct Ethernet connection.
- ^ a b Jones, Steve, ed. (10 December 2002). "Internet Relay Chat". Encyclopedia of New Media: An Essential Reference to Communication and Technology (1st ed.). Thousand Oaks, California: SAGE Publications. p. 257. ISBN 978-0-7619-2382-4.
Today there are hundreds of independent IRC networks, but the "Big Four" are EFNet, UnderNet, Dalnet, and IRCnet.
- ^ a b Rittner, Don (3 March 1999). The iMac Book (1st ed.). Scottsdale, Arizona: Coriolis Group. p. 215. ISBN 978-1-57610-429-3.
There are several large networks: EFnet, UnderNET, DALnet, and IRCnet make up the Big Four.
- ^ Turban, Efraim; Leidner, Dorothy; McLean, Ephraim; Wetherbe, James (7 February 2005). "Communication". Information Technology for Management: Transforming Organizations in the Digital Economy (5th ed.). Hoboken, New Jersey: John Wiley & Sons. pp. 106–107. ISBN 978-0-471-70522-2.
The largest networks have traditionally been grouped as the "Big Four": EFNet, IrcNet, QuakeNet, and UnderNet.
- ^ "IRC Networks – Top 100". irc.netsplit.de. netsplit.de. Retrieved 15 January 2021.
- ^ "Servers". Internet Relay Chat Protocol. p. 4. sec. 1.1. doi:10.17487/RFC1459. RFC 1459.
- ^ "Clients". Internet Relay Chat: Architecture. p. 3. sec. 2.2. doi:10.17487/RFC2810. RFC 2810.
- ^ "Clients". Internet Relay Chat Protocol. p. 5. sec. 1.2. doi:10.17487/RFC1459. RFC 1459.
- ^ "Port Numbers". Marina del Rey, California: Internet Assigned Numbers Authority. 6 April 2011. Retrieved 5 April 2021.
- ^ "Connect message". Internet Relay Chat Protocol. p. 29. sec. 4.3.5. doi:10.17487/RFC1459. RFC 1459.
- ^ Lucas, Mark; Singh, Abhishek; Cantrell, Chris (5 October 2006). "Defining a Firewall". In Henmi, Anne (ed.). Firewall Policies and VPN Configurations. Rockland, Massachusetts: Syngress Publishing. p. 93. ISBN 978-1-59749-088-7.
- ^ Abraham, Dalen (June 1998). Extensions to the Internet Relay Chat Protocol (IRCX). IETF. I-D draft-pfenning-irc-extensions-04. Retrieved 8 April 2011.
- ^ "Architecture". Internet Relay Chat: Architecture. pp. 3 – 4. sec. 3. doi:10.17487/RFC2810. RFC 2810.
- ^ "Introduction". Internet Relay Chat: Architecture. p. 2. sec. 1. doi:10.17487/RFC2810. RFC 2810.
- ^ "Algorithms". Internet Relay Chat Protocol. p. 64. sec. 9.3. doi:10.17487/RFC1459. RFC 1459.
- ^ "Network Congestion". Internet Relay Chat: Architecture. pp. 7 – 8. sec. 6.3. doi:10.17487/RFC2810. RFC 2810.
- ^ "To A Channel". Internet Relay Chat: Architecture. pp. 5 – 6. sec. 5.2.1. doi:10.17487/RFC2810. RFC 2810.
- ^ "IRC daemons for LAN". Retrieved 2 October 2014.
- ^ "Running an own IRC server". Archived from the original on 6 October 2014. Retrieved 2 October 2014.
- ^ "Message format in 'pseudo' BNF". Internet Relay Chat Protocol. p. 8. sec. 2.3.1. doi:10.17487/RFC1459. RFC 1459.
- ^ "Numeric replies". Internet Relay Chat Protocol. p. 10. sec. 2.4. doi:10.17487/RFC1459. RFC 1459.
- ^ IRC Chat Rooms
- ^ "IRC List Modes – List mode extension showing pair confusion for lists". 25 November 2009. Retrieved 8 April 2011.
- ^ a b "To a group (channel)". Internet Relay Chat Protocol. p. 11. sec. 3.2.2. doi:10.17487/RFC1459. RFC 1459.
- ^ "List message". Internet Relay Chat Protocol. p. 24. sec. 4.2.6. doi:10.17487/RFC1459. RFC 1459.
- ^ a b "Join message". Internet Relay Chat Protocol. p. 19. sec. 4.2.1. doi:10.17487/RFC1459. RFC 1459.
- ^ "Channel Scope". Internet Relay Chat: Channel Management. pp. 3 – 4. sec. 2.2. doi:10.17487/RFC2811. RFC 2811.
- ^ "Channel Properties". Internet Relay Chat: Channel Management. p. 4. sec. 2.3. doi:10.17487/RFC2811. RFC 2811.
- ^ "Channel lifetime". Internet Relay Chat: Channel Management. p. 5. sec. 3. doi:10.17487/RFC2811. RFC 2811.
- ^ "Channel Modes". Internet Relay Chat: Channel Management. p. 7. sec. 4. doi:10.17487/RFC2811. RFC 2811.
- ^ "Mode message". Internet Relay Chat Protocol. p. 21. sec. 4.2.3. doi:10.17487/RFC1459. RFC 1459.
- ^ "Channel modes". Internet Relay Chat Protocol. pp. 21 – 22. sec. 4.2.3.1. doi:10.17487/RFC1459. RFC 1459.
- ^ "Channel Access Control". Internet Relay Chat: Channel Management. pp. 10 – 11. sec. 4.3. doi:10.17487/RFC2811. RFC 2811.
- ^ a b "Command responses: 353 RPL_NAMREPLY". Internet Relay Chat Protocol. p. 51. doi:10.17487/RFC1459. RFC 1459.
- ^ Roeckx, Kurt (14 October 2004). "The 005 numeric: ISUPPORT". irc.org. Retrieved 10 April 2011.
- ^ Brocklesby, Edward (September 2002). IRC RPL_ISUPPORT Numeric Definition. IETF. I-D draft-brocklesby-irc-isupport-03. Retrieved 10 April 2011.
- ^ "'multi-prefix' Extension - IRCv3".
- ^ "Operwall message". Internet Relay Chat Protocol. p. 41. sec. 5.6. doi:10.17487/RFC1459. RFC 1459.
- ^ Butcher, Simon (12 January 2005). "IRC User Modes List". alien.net.au. Retrieved 10 April 2011.
- ^ Butcher, Simon (12 January 2005). "IRC Channel Modes List". alien.net.au. Retrieved 10 April 2011.
- ^ Butcher, Simon (12 January 2005). "IRC Server Modes List". alien.net.au. Retrieved 10 April 2011.
- ^ Olsen, Tommy. "IRCd Modes". webtoman.com. Archived from the original on 15 October 2011. Retrieved 10 April 2011.
- ^ a b "Operators". Internet Relay Chat Protocol. p. 5. sec. 1.2.1. doi:10.17487/RFC1459. RFC 1459.
- ^ Döring, Nicola; Schestag, Alexander (23 September 2003). "Soziele Norman in virtuellen Gruppen: ein empirische Analyse am Beispiel ausghewähiter Chat-Channels". In Thiedeke, Udo (ed.). Virtuelle Gruppen: Charakteristika und Problemdimensionen (in German) (2nd ed.). Springer VS. pp. 314, 337. ISBN 978-3-531-33372-4. Retrieved 30 March 2010.
- ^ Rogers, Russ (1 December 2004). "The Mind of Terror". In Devost, Matthew G. (ed.). Hacking a Terror Network: The Silent Threat of Covert Channels (1st ed.). Rockland, Massachusetts: Syngress Publishing. p. 10. ISBN 978-1-928994-98-5. Retrieved 30 March 2010.
- ^ Petersen, Julie K., ed. (29 May 2002). "Internet Relay Chat". The Telecommunications Illustrated Dictionary (2nd ed.). CRC Press. p. 500. ISBN 978-0-8493-1173-4. Retrieved 30 March 2010.
- ^ "Frequently-Asked Questions". freenode. Archived from the original on 26 March 2010. Retrieved 30 March 2010.
- ^ "IRC/Cloaks". Meta-wiki. Retrieved 27 November 2011.
- ^ "Uniform Resource Identifier (URI) Schemes". Internet Assigned Numbers Authority. Retrieved 14 October 2012.
- ^ Butcher, Simon (January 2003). Uniform Resource Locator Schemes for Internet Relay Chat Entities. IETF. I-D draft-butcher-irc-url-04. Retrieved 10 April 2011.
- ^ "node-irc". npm. 26 January 2020. Retrieved 30 July 2021.
- ^ "Size". A Discussion on Computer Network Conferencing. pp. 5 – 6. sec. 2.5.1. doi:10.17487/RFC1324. RFC 1324.
- ^ "Scalability". Internet Relay Chat: Architecture. p. 7. sec. 6.1. doi:10.17487/RFC2810. RFC 2810.
- ^ Loesch 2003 1.2.1 Growth
- ^ "User identification". A Discussion on Computer Network Conferencing. p. 10. sec. 5.4.1. doi:10.17487/RFC1324. RFC 1324.
- ^ "Trees and cycles". A Discussion on Computer Network Conferencing. p. 10. sec. 5.4.2. doi:10.17487/RFC1324. RFC 1324.
- ^ Loesch 2003 1.2.2 Network failures
- ^ "State Information problems". A Discussion on Computer Network Conferencing. p. 4. sec. 2.1. doi:10.17487/RFC1324. RFC 1324.
- ^ Loesch 2003 1.2.3 Sociological and security aspects
- ^ "Message passing". A Discussion on Computer Network Conferencing. p. 7. sec. 5.2.1. doi:10.17487/RFC1324. RFC 1324.
- ^ "Conference security". A Discussion on Computer Network Conferencing. p. 8. sec. 5.2.4. doi:10.17487/RFC1324. RFC 1324.
- ^ "Getting Help on EsperNet". The EsperNet IRC Network. Retrieved 31 July 2012.
- ^ brandon (18 May 2010). "New Feature: SSL For Users". DALnet. Retrieved 31 July 2012.
- ^ Smith, Roderick W. (8 April 2000). "The Internet: Using IRC to Get Help". The Multi-Boot Configuration Handbook. Handbook Series. Upper Saddle River, New Jersey: Que Publishing. p. 289. ISBN 978-0-7897-2283-6. Retrieved 25 July 2010.
mIRC is one of the most popular Windows IRC clients.
- ^ "Warsow Wiki: IRC Module". Archived from the original on 25 April 2011. Retrieved 10 April 2011.
- ^ Guenter, Daniel (21 June 2004). "UT2004 Review". BCCHardware. Retrieved 10 April 2011.
- ^ "The Ultimate Uplink Guide". Retrieved 10 April 2011.
- ^ "ZDaemon – The Doom Wiki: Other utilities". Retrieved 10 April 2011.
- ^ "How to setup [sic] an IRC client to connect and login [sic] to Ustream". Ustream-Helpers. 29 January 2012. Archived from the original on 21 March 2013. Retrieved 27 April 2013.
- ^ Mauldor (20 June 2010). "Ustream vs. Justin.tv". LiquidSilver. Retrieved 13 July 2011.
- ^ "Twitch IRC". Twitch Help Center. 7 April 2017. Archived from the original on 12 February 2019. Retrieved 30 October 2017.
- ^ Canavan, John. "The Evolution of Malicious IRC Bots" (PDF). Symantec. Symantec Security Response. Archived from the original (PDF) on 15 March 2006.
- ^ "psyBNC Readme". psybnc.at. Retrieved 10 April 2011.
- ^ Carey, Chris (18 July 2009). "IRC with irssi-proxy + screen". chriscarey.com. Retrieved 10 April 2011.
- ^ "Detachable Frontend (Core Rewrite) / UML / Windows Port (kicking Glade)". smuxi.org. 25 December 2004. Retrieved 25 July 2010.
- ^ "About Smuxi". smuxi.org. Retrieved 10 April 2011.
- ^ Mutton, Paul (27 July 2004). "Users and Channels". IRC Hacks (1st ed.). Sebastopol, California: O'Reilly Media. pp. 44–46. ISBN 978-0-596-00687-7.
- ^ Wang, Wallace (25 October 2004). "Instant Messaging and Online Chat Rooms: Internet Relay Chat (IRC)". Steal this File Sharing Book (1st ed.). San Francisco, California: No Starch Press. pp. 65–67. ISBN 978-1-59327-050-6.
- ^ Vamosi, Robert (8 May 2002). "Pirated movies: Now playing on a server near you". ZDNet. Retrieved 10 April 2011.
- ^ Sasaki, Darla (4 April 2002). "IRC 101: What Is It & How Do I Use It?". Macobserver.com. Archived from the original on 6 January 2012. Retrieved 10 April 2011.
General bibliography
[edit]- Reed, Darren (May 1992). A Discussion on Computer Network Conferencing. IETF. doi:10.17487/RFC1324. RFC 1324. Retrieved 30 October 2009.
- Oikarinen, Jarkko; Reed, Darren (May 1993). Internet Relay Chat Protocol. IETF. doi:10.17487/RFC1459. RFC 1459. Retrieved 30 October 2009.
- Kalt, Christophe (April 2000). Internet Relay Chat: Architecture. IETF. doi:10.17487/RFC2810. RFC 2810. Retrieved 30 October 2009.
- Kalt, Christophe (April 2000). Internet Relay Chat: Channel Management. IETF. doi:10.17487/RFC2811. RFC 2811. Retrieved 30 October 2009.
- Loesch, Carl (17 July 2003). "Functionality Provided by Systems for Synchronous Conferencing". psyc.eu. Retrieved 10 April 2011.
Further reading
[edit]- Kalt, Christophe (April 2000). Internet Relay Chat: Client Protocol. IETF. doi:10.17487/RFC2812. RFC 2812. Retrieved 30 October 2009.
- Kalt, Christophe (April 2000). Internet Relay Chat: Server Protocol. IETF. doi:10.17487/RFC2813. RFC 2813. Retrieved 30 October 2009.
- "Logs of major events in the online community". Chapel Hill, North Carolina: ibiblio. Retrieved 8 April 2011.
- Butcher, Simon. "IRC technical information". alien.net.au. Retrieved 10 April 2011.
External links
[edit]
IRC channel URL (P1613) (see uses)
- IRC Numerics List
- History of IRC
- IRC.org – Technical and Historical IRC6 information; Articles on the history of IRC
- IRChelp.org – Internet Relay Chat (IRC) help archive; Large archive of IRC-related documents
- IRCv3 – Working group of developers, who add new features to the protocol and write specs for them
- IRC-Source Archived 8 October 2020 at the Wayback Machine – Internet Relay Chat (IRC) network and channel search engine with historical data
- irc.netsplit.de – Internet Relay Chat (IRC) network listing with historical data
History
Origins and invention
Internet Relay Chat (IRC) was invented by Jarkko Oikarinen in August 1988 while he was a student at the University of Oulu in Finland.[9] Oikarinen developed IRC as an enhancement to the OuluBox bulletin board system (BBS), initially to address limitations in the existing MultiUser Talk (MUT) program and to enable real-time discussions in a style similar to the threaded groups of USENET newsgroups.[10] Drawing inspiration from the BITNET Relay Chat system, which facilitated multi-user conversations across academic networks, Oikarinen aimed to create a more efficient and scalable chat solution for local university users.[11] The initial implementation consisted of a single IRC server running on the machine tolsun.oulu.fi, designed primarily for internal use within the Department of Information Processing Science at the University of Oulu.[9] This early version quickly expanded to link servers across Finnish universities, including those in Tampere and Helsinki, forming the backbone of the first IRC network via the FUNET academic backbone.[12] At its core, IRC adopted a client-server architecture that allowed multiple users to connect remotely, enabling text-based group communication through named channels for organized discussions.[11] The protocol emphasized real-time messaging, delivering text instantaneously without any persistent storage of conversations, which prioritized immediacy and simplicity over archival features.[9] Early adoption accelerated in 1989, as IRC spread beyond Finland to other Nordic countries through connections on the NORDUnet research network.[12] By 1990, the network had achieved global reach, with transatlantic links established via the Internet to servers in the United States, such as those at MIT and the University of Denver, and further propagation facilitated by UUCP (Unix-to-Unix Copy Protocol) gateways.[11] This expansion marked IRC's transition from a localized tool to an international communication platform, attracting users from academic and hobbyist communities worldwide.[10]Major network forks
EFnet emerged as the primary IRC network following its formation in August 1990 from a split in the original network, driven by disputes over open server policies that allowed unlimited connections and lacked passwords, leading to instability.[12] As user numbers surged into the early 1990s, reaching thousands daily by 1993, EFnet experienced frequent netsplits—temporary disconnections between servers—exacerbating chaos in channels and enabling operator takeovers during reconnections.[12] This rapid growth, while solidifying EFnet's dominance with servers across North America and Europe, highlighted scalability issues in the original ircd software, prompting the development of forks to address these limitations.[13] The Undernet forked from EFnet in late 1992, initially as a small test network of U.S. servers seeking to mitigate bandwidth waste and channel disruptions from frequent splits.[14] By January 1993, it had merged with French and Canadian servers, expanding internationally and introducing timestamp-based synchronization to resolve conflicts over channel ownership and user states during reconnections, unlike EFnet's first-come, first-served approach.[14] Disagreements over centralized services like nickname registration further fueled the split, leading Undernet to implement persistent nicknames via NickServ and channel protections through ChanServ, features that empowered users with greater control and reduced takeover vulnerabilities.[12] DALnet branched from Undernet in the summer of 1994, motivated by frustrations among operators in channels like #StarTrek over persistent lags, splits, and inadequate user protections.[12] Founders, including James Ng, prioritized enhanced services for a larger, more stable community, adopting the DreamForge ircd fork and introducing user-friendly tools such as extended nickname lengths, WallOps for operator messaging, and robust K-lines to ban abusive users network-wide.[12] These innovations, including improved ChanServ for channel registration on a first-come basis, attracted users seeking a less anarchic environment, quickly growing DALnet into a major network with a focus on accessibility and community moderation.[13] IRCnet split from EFnet in July 1996 during the "Great Split," stemming from transatlantic operator disputes over protocol enhancements, particularly the adoption of timestamping versus delay mechanisms for nick and channel claims.[15] European administrators, favoring stricter policies and nick/channel delays to prevent rapid takeovers, established IRCnet with a core of continental servers, emphasizing reliability and governance over EFnet's more permissive U.S.-centric model.[12] By autumn 2000, IRCnet had amassed around 70,000 users, becoming a hub for European IRC activity with policies that prioritized operator accountability and reduced spam.[12] Later forks catered to regional or thematic needs, such as AustNet in March 1998, which diverged from Undernet due to unreliable trans-Pacific links, using adapted ChanServ code to serve Australian and Oceanic users with localized stability.[12] Similarly, GameSurge launched in 1999 as a gaming-focused network, providing dedicated channels and services for clans and multiplayer communities, drawing from Undernet's protocol to support real-time coordination in online games.[16]Key developments and timeline
The first IRC server was launched in August 1988 by Jarkko Oikarinen at the University of Oulu in Finland, replacing an earlier BBS-based chat system called MUT and initially running on the server tolsun.oulu.fi.[9] This marked the birth of IRC as a multi-user, real-time communication protocol designed for group discussions across connected servers.[12] By 1990, IRC expanded internationally with connections to the broader Internet, including links to U.S. servers such as ai.ai.mit.edu, where the first non-Scandinavian user, Mike Jacobs, connected, enabling global access beyond its Finnish origins.[9] This growth coincided with the formation of early networks like EFnet following initial splits, setting the stage for worldwide adoption.[12] In May 1993, RFC 1459 was published by Oikarinen and Darren Reed, providing the first formal standardization of the IRC protocol, defining its client-server architecture, message formats, and core features like channels for group communication.[4] Throughout the 1990s, IRC experienced rapid user growth, peaking during the dot-com boom with networks like EFnet reaching tens of thousands of concurrent users by the late decade, driven by increasing Internet accessibility. Bots emerged as a key innovation around this time, with services like those on Undernet (introduced in 1992) and Dalnet (1994) automating moderation tasks such as channel protection, user registration, and spam filtering to manage the expanding scale.[12] Culturally, IRC played a pivotal role in early online activism, serving as a coordination hub for hacker groups like the Cult of the Dead Cow, which leveraged it for communication and tool distribution in the mid-1990s.[17] It also facilitated real-time global information sharing during events like the 1991 Gulf War, where concurrent users surged above 300 for live updates.[12] In April 2000, a series of updates to the protocol were released as RFCs 2810 through 2813 by Christoph Kalt, refining IRC's architecture, channel management, client protocol, and server-to-server communication to address ambiguities in the original specification and support larger networks.[18] During the 2010s, IRC saw a decline in mainstream popularity, with overall user numbers dropping significantly from their 1990s peaks as alternatives like instant messaging apps and social platforms rose.[12] Nonetheless, it persisted strongly in open-source and technical communities, where networks like Freenode maintained peaks of around 65,000 users by 2011 for developer collaboration and project support.[12] In June 2021, Freenode underwent a controversial takeover by its founder, prompting a fork to Libera.Chat, which quickly became the largest IRC network for open-source projects, attracting over 90,000 peak users from Freenode's community.[19]Technical Standards
Protocol specifications and RFCs
The Internet Relay Chat (IRC) protocol was first formally specified in RFC 1459, published in May 1993 by Jarkko Oikarinen and Darren Reed as an experimental standard.[20] This document established the foundational syntax and mechanics of IRC, including the text-based message structure limited to 512 characters per message terminated by carriage return and line feed (CR-LF), client-server connections over TCP, and core commands such as JOIN for entering channels, PART for leaving them, and PRIVMSG for sending private or channel messages.[20] It emphasized a client-server model where clients register with servers using commands like NICK and USER to establish identity and connection.[20] In April 2000, a series of informational RFCs updated and refined the IRC specifications to address evolutions in implementation while maintaining backward compatibility with RFC 1459. RFC 2810, authored by Christophe Kalt, outlines the overall architecture.[1] RFC 2811 details channel management protocols, specifying how servers handle channel creation, joining, and properties.[21] RFC 2812 updates the client protocol, formalizing interactions between clients and servers with enhanced reply codes and clarifications.[5] Finally, RFC 2813 defines the server-to-server protocol, governing how servers exchange messages and state information to form interconnected networks.[6] These documents collectively superseded the original RFC 1459 in non-experimental contexts, providing a more precise framework for interoperability.[5] A core architectural element of IRC, as defined in these RFCs, is its decentralized structure, where servers link directly to one another via server-to-server connections to form a spanning tree topology, enabling message propagation without a central authority or registry.[1] This design supports scalable, peer-like networks where any server can connect to others, relaying client messages globally while maintaining local state synchronization.[6] The absence of a central hub ensures resilience but relies on operators to manage linking and trust between servers.[1] IRC messages follow a standardized format across the RFCs: an optional prefix (e.g., server or user identifier), a command (case-insensitive), up to 15 space-separated parameters, and an optional trailing parameter preceded by a colon for longer text.[20] Commands and nicknames are case-insensitive to promote consistency, while channel names are case-insensitive only in the ASCII range.[5] This structure, parsed using augmented Backus-Naur Form (BNF), ensures reliable transmission over TCP streams.[20] The base IRC protocol, as specified in these RFCs, includes no built-in encryption, authentication beyond basic passwords, or secure transport mechanisms, leaving communications vulnerable to interception and requiring external extensions for security.[20] This limitation stems from the protocol's origins in the early 1990s, prioritizing simplicity over modern security standards.[1]Commands, replies, and messaging
In Internet Relay Chat (IRC), users interact with the network primarily through text-based commands sent to servers, which respond with numeric codes indicating success, failure, or other status updates. These commands enable essential functions such as registration, channel participation, and message transmission, forming the core of client-server communication. The protocol defines a message format consisting of an optional prefix, a command or reply code, and up to 15 parameters, ensuring structured and efficient exchanges.[20] Common user commands include those for initial connection and basic navigation. The NICK command sets or changes a user's nickname, with the syntaxNICK <nickname>, and is typically sent first upon connecting to assign an identifier visible to others on the network.[22] The USER command registers additional user details, using the format USER <username> <hostname> <servername> <realname>, which must follow NICK to complete registration and is not resent after initial connection.[23] To enter a channel, the JOIN command is used in the form JOIN <channel>{,<channel>}, allowing a client to start listening and participate in discussions, with the server broadcasting the join to all channel members.[24] Conversely, the PART command removes the user from specified channels via PART <channel>{,<channel>}, notifying participants of the departure without ending the overall session.[25] For sending messages, the PRIVMSG command delivers private or channel messages in the syntax PRIVMSG <msgtarget> <text>, where QUIT [<quitmessage>], prompting the server to close the connection and propagate a quit notice to affected channels.[27]001 <nick> :Welcome to the Internet Relay Network <nick>!<user>@<host>, confirming the user's entry into the network.[28] Error replies include 403 (ERR_NOSUCHCHANNEL) as <channel> :No such channel, returned when attempting to join or message a nonexistent channel.[29] If a desired nickname is unavailable, 433 (ERR_NICKNAMEINUSE) is issued with <nick> :Nickname is already in use, prompting the client to choose another.[29] Commands lacking required parameters trigger 461 (ERR_NEEDMOREPARAMS) in the form <command> :Not enough parameters, ensuring protocol compliance.[29] These replies, along with others like 421 for unknown commands, facilitate error handling by guiding clients on corrective actions without disrupting the session.[29]
Messaging in IRC operates through targeted delivery mechanisms, with PRIVMSG enabling both one-to-one private messages and broadcasts to channels or masks (the latter restricted to operators). When sent to a channel, the message is relayed to all connected members via server propagation, optimizing for low-latency delivery across the network.[26] Direct messages to a user follow the same path but reach only the specified recipient, with the server queuing undeliverable messages until reconnection if needed.[26] To prevent abuse, IRC implements flood protection, limiting clients to one message every two seconds; excess messages incur a penalty timer increasing by two seconds per violation, throttling rapid-fire inputs to maintain network stability.[30] This combination of commands, replies, and safeguards ensures reliable, interactive communication while handling errors gracefully.[20]
Channels, modes, and permissions
In Internet Relay Chat (IRC), channels serve as named discussion rooms where multiple users can participate in group conversations. These channels are identified by names prefixed with a hash symbol (#) for network-wide distributed channels or an ampersand (&) for local server-only channels, with names limited to up to 200 characters excluding spaces, control-G characters, or commas.[31] Channels enable broadcasting messages to all members, facilitating organized discussions on specific topics.[31] Channels are categorized into three primary types based on visibility and access: public, private, and secret. Public channels are openly listed and discoverable via server queries, allowing any user to join without restrictions beyond general permissions. Private channels, set with the +p mode, appear in lists but conceal their topic from non-members, requiring users to know the name to join. Secret channels, enabled by the +s mode, are entirely hidden from listings and whois queries unless a user has already joined, enhancing privacy for sensitive discussions.[32][33] A channel is implicitly created when the first user issues a JOIN command to a non-existent channel name, at which point the joining user automatically becomes a channel operator with full control. The channel persists as long as at least one user remains; however, persistence rules can vary across IRC networks, with some implementing configurations to maintain empty channels temporarily or indefinitely. Users join channels using the JOIN command, subject to any active modes or restrictions.[31][34] Channel modes, configured via the MODE command, control access, behavior, and visibility, with basic modes including +i for invite-only access, +p for private status, +s for secret status, +m for moderated discussions, and +n to prevent messages from external (non-channel) sources. The +i mode restricts joining to users explicitly invited via the INVITE command, returning an error like "Cannot join channel (+i)" otherwise. Moderated channels (+m) limit speaking rights to voiced users or operators, while +n ensures messages originate only from channel members, blocking external relays. These modes can be toggled by channel operators, with a limit of three changes per command to prevent abuse.[32][33] User permissions within channels are managed through specific modes that grant varying levels of control and participation. The +v mode provides voice status, allowing a user (denoted by a '+' prefix) to send messages in moderated (+m) channels, where unvoiced users are silenced. Full channel operators (+o, prefixed with '@') hold comprehensive authority, including kicking users, changing modes, setting topics, and inviting others, and are automatically assigned to the creator of a new channel. These permissions ensure structured moderation while accommodating different collaboration needs.[35][33]Operators, hostmasks, and security features
In Internet Relay Chat (IRC), operators, commonly known as IRCOps, are privileged users designated to perform administrative tasks across the network. These individuals gain operator status by issuing the OPER command with a valid operator name and password, which authenticates them against server configuration files that specify allowed hosts and credentials.[36][37] Once authenticated, IRCOps receive elevated privileges, including the ability to execute commands such as KILL, which forcibly terminates a client's connection to the server with a specified reason, and global MODE changes that affect user or channel settings network-wide.[38][39] The KILL command, for instance, sends a QUIT message to the affected user and notifies others of the disconnection, but it is restricted to operators to prevent abuse, with servers typically logging such actions for accountability.[38] Global MODE operations allow IRCOps to set or unset modes like +o (operator status) on users or enforce network policies, though exact capabilities depend on the server software implementation.[40][41] Hostmasks serve as a core mechanism for user identification and access control in IRC, formatted as<nickname>!<username>@<hostname>, where the nickname is the user's chosen alias, the username (or ident) is provided during connection, and the hostname represents the client's origin, often an IP address or domain.[42] This structure enables precise targeting in administrative actions, such as bans, where wildcards like * (zero or more characters) or ? (single character) allow partial matching—for example, *!*@*.example.com to ban all users from a specific domain.[43] Servers propagate hostmasks in messages to maintain consistency across the network, and they form the basis for many security enforcements, including mode lists.[44]
IRC incorporates several server-enforced security features to protect channels and the network, primarily through channel modes and authentication protocols. The +k mode requires a channel key (password) for entry, rejecting JOIN attempts without the correct parameter, which helps restrict access to private discussions.[33] Similarly, the +l mode imposes a user limit on the channel, denying new joins once the threshold is reached to prevent overcrowding or resource exhaustion.[33] Server-side authentication for operators relies on the OPER command's password verification, while broader client authentication can use SASL (Simple Authentication and Security Layer) extensions, negotiated via capabilities, to verify accounts without exposing credentials in plain text.[45] These features are managed via the MODE command, with parameters tied to hostmasks for granularity.[33]
Ban-related modes enhance security by controlling participation based on hostmasks. The +b mode adds a ban list entry, preventing matching users from joining or speaking in the channel, with servers checking masks against incoming connections.[44] To counter over-restrictive bans, exception lists (+e) exempt specific hostmasks from +b effects, enabling trusted users to bypass restrictions—for example, granting access to registered operators despite a broad ban.[46] These list modes are queried via RPL_BANLIST numerics, and their management is typically limited to channel operators or IRCOps for global enforcement.[44][47]
URI schemes and protocol extensions
The IRC URI scheme provides a standardized method for identifying and accessing IRC resources, such as servers, channels, and users, in a format compatible with broader web and application ecosystems. The scheme is provisionally registered with the Internet Assigned Numbers Authority (IANA) and follows the syntaxirc://<host>[:<port>]/[<channel>[?[<key>]]], where <host> specifies the IRC server hostname or network alias, <port> is optional (defaulting to 6667), <channel> indicates the target channel (prefixed with # for standard channels), and <key> is an optional channel password.[48] A variant, ircs://, supports secure connections using TLS, with a default port of 6697.[49] This scheme originated from early Internet-Drafts aiming to enable uniform resource locators for IRC sessions.[50]
In practice, IRC URIs function as hyperlinks that initiate connections to specified servers and optionally join channels or initiate private messages. For instance, a link like irc://irc.example.net/#chat directs a client to connect to the server at irc.example.net and join the #chat channel upon activation.[50] Supporting applications, including web browsers and desktop IRC clients, handle these URIs by launching or prompting the default IRC handler, facilitating seamless transitions from web content to live chat sessions.[50] Optional parameters, such as ?nick=example, can pre-set a nickname for the connecting user.[50]
Early protocol extensions enhanced IRC's capabilities beyond the core specifications, enabling richer client interactions. The Client-to-Client Protocol (CTCP), introduced in the early 1990s, allows direct querying between clients for features like latency measurement via PING or emote actions via ACTION (e.g., displaying "user waves"), encapsulated within PRIVMSG notices delimited by ASCII 001 characters to distinguish them from standard text.[51] Similarly, SASL (Simple Authentication and Security Layer) support, implemented in servers like Charybdis around 2009, permits clients to authenticate credentials during connection establishment using mechanisms such as PLAIN, improving security without relying on post-registration services.[52]
These elements promote interoperability by bridging IRC with external systems. URI schemes enable embedding in web pages for direct channel access from browsers, while extensions like CTCP and SASL support integration with services that require authenticated or timed interactions, such as linking chat sessions in email invitations or hybrid web-IRC interfaces.[50]
Software and Tools
Client applications
Client applications for IRC are software programs designed for end-users to connect to IRC networks, join channels, and participate in real-time text-based conversations. These clients vary in interface and platform support, ranging from graphical user interfaces (GUIs) for visual ease to text-based terminals for lightweight operation, and web or mobile options for accessibility without dedicated installations. They implement the IRC protocol to handle commands, messaging, and channel management, often including enhancements like multi-server support and customizable notifications.[53] Graphical clients provide intuitive interfaces with visual elements such as windows, menus, and toolbars, making them suitable for users preferring a desktop-like experience. mIRC, first released in 1995 for Windows, is a shareware IRC client known for its robust feature set, including file transfers via DCC and extensive customization options.[54] HexChat, a free cross-platform fork of the earlier XChat client, supports Windows, Linux, and other Unix-like systems, offering tabbed or tree-based channel views for organized navigation.[55] Pidgin serves as a multi-protocol messenger with built-in IRC support, allowing users to manage IRC alongside other chat networks like XMPP in a single application.[56] Text-based clients operate in terminal environments, prioritizing efficiency and scriptability for advanced users on resource-constrained systems. irssi is a modular console client with native IRC support, highly scriptable through Perl extensions for automation and customization of behaviors like logging and notifications.[57] WeeChat, another modular text-mode client, emphasizes extensibility with plugins for features such as multi-server connections, IPv6 support, and SASL authentication, while maintaining a lightweight footprint across Linux, Windows, and macOS.[58] Web and mobile clients enable IRC access via browsers or portable devices, often without requiring software downloads. KiwiIRC is a browser-based client designed for ease of use, supporting direct connections to IRC networks with a modern interface for joining channels and managing multiple sessions.[59] The Lounge is a self-hosted web IRC client, forked from Shout, providing a responsive interface that maintains persistent connections to networks for users hosting it on their own servers.[60] For mobile use, multi-protocol apps like those integrating IRC, such as IRCCloud's mobile client, allow on-the-go access with push notifications and synchronization across devices.[61] Common key features across IRC clients include tabbed interfaces for switching between channels and servers without cluttering the screen, scripting support for automating tasks—such as mIRC's proprietary mSL for creating custom commands and aliases—and theme customization to adjust colors, fonts, and layouts for personal preferences.[54][57] Some clients also support connection persistence through integration with bouncers, ensuring messages are relayed even when the user is offline.[58]Server software
The original IRC server software, known as ircd, was developed by Jarkko Oikarinen in late August 1988 at the University of Oulu in Finland as a replacement for the MUT (MultiUser talk) program on the local BBS system OuluBox.[9] This initial implementation, written in C, introduced the client-server model for text-based conferencing and was first deployed on the server tolsun.oulu.fi, the hardware of which is preserved on display at the University of Oulu computer centre.[19] Oikarinen's ircd formed the foundation for early IRC networks, enabling server-to-server linking to propagate messages across connected hosts.[62] As IRC networks grew, the original ircd underwent numerous forks to address scalability, feature needs, and network-specific policies, particularly on EFnet, the oldest major network descended from the initial Finnish implementation. EFnet's evolution involved custom modifications to ircd, leading to specialized forks like those incorporating timestamp (TS) protocols to resolve channel conflicts during netsplits, a common issue in early decentralized networks.[63] These forks, such as the hybrid-7 series used historically on EFnet, emphasized robustness for large-scale operations while maintaining compatibility with the core IRC protocol defined in RFC 1459.[64] Among contemporary implementations, InspIRCd stands out as a modular, high-performance IRC daemon written in C++ from scratch, designed for stability across Linux, BSD, Windows, and macOS platforms since its initial release in 2003.[65] It supports IRCv3 extensions for modern features like message tags and account registration, with a plugin architecture allowing dynamic loading of modules for custom functionality without recompiling the core server.[66] UnrealIRCd, originating in 1999 as a fork of the DreamForge ircd, is a feature-rich, open-source server widely deployed on thousands of networks, offering built-in SSL/TLS encryption, cloaking for user privacy, advanced anti-flood mechanisms, and GeoIP integration for geographic user tracking.[67] Its configuration system includes support for remote includes and JSON-based logging to facilitate monitoring and auditing of network activity.[68] For smaller setups, ngIRCd provides a lightweight, portable alternative developed in C since 2001 under the GNU General Public License, optimized for private networks with minimal resource usage and straightforward configuration for basic server linking and channel management.[69][70] Server linking protocols, such as those extending the original ircd's server-to-server communication via virtual links, enable interconnected topologies where messages are relayed efficiently across nodes, often using timestamp synchronization to maintain consistency during partitions.[71] Module systems in implementations like InspIRCd and UnrealIRCd allow extensibility for features such as custom authentication or anti-spam filters, loaded at runtime to adapt the server without altering the base code. Logging capabilities, including channel and user activity records, are integral for operational oversight, with options like UnrealIRCd's JSON output supporting structured analysis of events. All major IRC server software is distributed under open-source licenses, primarily the GPL, permitting free modification and deployment; configurations typically include directives for integrating services like NickServ through module hooks or uplink definitions to external services daemons.[68][72][69]Bots and automated systems
Bots and automated systems in IRC refer to non-human clients that perform predefined tasks, enhancing network functionality, moderation, and user experience without direct human intervention. These systems connect as standard clients but execute scripts or protocols to automate responses, manage resources, and interact with users. They are essential for maintaining order on large networks and providing utilities that would otherwise require manual effort. Service bots, such as NickServ and ChanServ, handle core network operations like nickname registration and channel management. NickServ allows users to register and protect nicknames, preventing unauthorized use and enabling features like password authentication. ChanServ supports channel registration, access lists, and operator assignments, ensuring persistent control even when founders are offline. These services operate as pseudo-clients on many IRC networks, using dedicated servers to enforce policies across the system. Additionally, BotServ on networks like EsperNet and GeekShed provides users with assignable bots for channels, offering basic moderation and interaction without requiring personal hosting.[73][74][75] Channel bots focus on real-time management within specific rooms, such as Eggdrop, which is the world's oldest actively maintained IRC bot designed for robust channel protection. Eggdrop automates tasks like kicking disruptive users, enforcing bans on spammers, and maintaining operator status through customizable modules. Utility bots extend functionality beyond moderation, providing services like weather updates, random quotes, or trivia games to engage users. For instance, bots can log channel transcripts for archival purposes or respond to queries with informational snippets, reducing the load on human moderators. Scripting enables customization of bot behaviors, with popular languages including Tcl for Eggdrop's core extensions, Python for Supybot (now evolved into Limnoria), and Perl for general-purpose automation. Tcl scripts in Eggdrop allow modules for advanced features like party-line communication between linked bots. Supybot's Python-based plugin system supports over 400 commands via more than 60 built-in plugins, facilitating easy development of utility and moderation tools. These scripting approaches permit operators to tailor bots while adhering to network security features, such as hostmask restrictions for bot privileges.[76][77][78]Bouncers and connection managers
IRC bouncers, also known as BNCs or connection managers, are proxy servers that maintain persistent connections to IRC networks on behalf of users, allowing clients to disconnect and reconnect without losing their session state or chat history.[79] These tools act as intermediaries between the user's IRC client and the server, buffering incoming messages and relaying them upon reconnection to ensure continuity.[80] The primary purpose is to mitigate issues from unstable connections, such as network interruptions, by keeping the user "always online" from the IRC network's perspective.[81] Early examples include BNC, an original Unix-based bouncer developed in the early 1990s to provide persistent IRC access on shared systems.[82] A prominent modern open-source implementation is ZNC, first released in 2004 and actively developed since, which supports modular extensions for customization.[83] ZNC runs as a daemon, connecting to multiple IRC networks and enabling users to attach multiple clients simultaneously.[84] Hosted services like IRCNow offer free bouncer access, utilizing ZNC under the hood to provide users with dedicated connections across unlimited networks.[85] Key features of bouncers include message buffering, where missed conversations are stored with timestamps for playback, allowing users to catch up on channel activity and private messages. They support multiple client connections per user, facilitating use across devices without session conflicts.[80] SSL/TLS encryption passthrough is commonly implemented, securing the link between the bouncer and IRC server while preserving end-to-end privacy where supported by the network.[86] Configuration options often include virtual hosts (vhosts) to mask the user's real IP address, enhancing anonymity.[87] Bouncers offer significant advantages for reliability, such as automatically handling network drops by replaying buffered content, which is particularly useful for mobile users switching between Wi-Fi and cellular data.[88] This persistence reduces join/quit spam in channels and enables seamless integration with various IRC clients, like irssi or HexChat, for a consistent experience across platforms.[85] By proxying connections, they also improve accessibility for users behind restrictive firewalls or in transient environments.[89]Network Operations
Major IRC networks
EFnet, established in 1990 as the original IRC network, remains one of the oldest and most decentralized platforms, characterized by its anarchic structure without centralized services like NickServ or ChanServ, emphasizing user autonomy and minimal operator intervention.[63][90] It operates with 14 servers and hosts approximately 9,000 active users (as of November 2025), fostering a raw, unmoderated chatting environment popular among long-time enthusiasts.[63] Undernet, founded in 1994 as a response to EFnet's instability, is the third-largest IRC network and features unique channel services accessed via the X@ bot, which provides tools for channel registration, protection, and management without traditional pseudo-servers.[91][92] With about 40 servers worldwide, it maintains roughly 15,000 concurrent users (as of 2025), supporting a diverse array of international communities through features like join limiting to combat floods.[93][94][95] DALnet, launched in 1994, prioritizes user-centric services including robust NickServ, ChanServ, and MemoServ for nickname and channel protection, alongside community-driven support through IRCops and help channels to resolve disputes and assist newcomers.[96][97] Comprising 39 servers, it sustains a stable population of around 6,800 users across 3,400 channels (as of 2025), focusing on a welcoming atmosphere for social and hobbyist interactions.[98] IRCnet, originating from a 1996 split from EFnet, is predominantly European-based with servers mainly in Finland, Germany, and Sweden, enforcing strict connection rules for shell providers to ensure network stability and limit abuse.[99][100] It operates without extensive network services, relying on operator discretion, and sees more than 20,000 daily users (as of 2025), appealing to those seeking a rule-oriented, low-service environment.[101] Libera.Chat, formed in May 2021 as a community-led fork from Freenode amid governance controversies, serves as a dedicated platform for free and open-source software projects, hosting technical discussions for groups like the Free Software Foundation and various Linux distributions.[102][7] With a focus on peer-directed collaboration, it supports around 32,000 average concurrent users and 22,700 channels (as of 2025), emphasizing open governance and TLS-secured connections.[103][104]Search engines and discovery
Discovery of IRC channels, users, and content relies on a combination of built-in protocol commands, network services, and external tools that index and search across distributed networks. These mechanisms enable users to locate active discussions by querying attributes such as topics, user counts, languages, or geographic regions, often aggregating data from multiple IRC networks in real time. While the core IRC protocol provides basic listing capabilities via the/list command, specialized search engines and services enhance discoverability by crawling channels and compiling searchable databases.[105]
Traditional tools like Netsplit.de provide comprehensive real-time statistics and channel searches across approximately 500 IRC networks, allowing queries by channel name, topic keywords, user population, and language to identify relevant discussions.[106] For instance, users can filter results to find channels with specific user thresholds or thematic focuses, drawing from periodic crawls of network data. Similarly, SearchIRC.com functions as a dedicated search engine for channel listings and network overviews, enabling users to browse active channels and monitor connection statistics to gauge popularity and activity levels.[107]
Network-specific services further facilitate discovery within individual IRC ecosystems. On Undernet, the Channel Service (CS) offers tools for registered channel founders to manage and promote their spaces, including searchable databases that help users locate topic-based or language-specific channels through integrated queries.[108] DALnet provides search features via its services and documentation, where the /list command can be refined to query by topic or user count, supplemented by public listings of registered channels to aid in finding moderated communities.[109]
Core functions of these discovery tools include advanced querying capabilities, such as filtering by topic relevance, minimum user counts for active channels, or primary languages to match user preferences. IRC crawler bots automate this process by connecting to networks as clients, systematically joining and indexing channels to build databases for external searches, often running on dedicated servers to maintain up-to-date listings without disrupting normal operations.[110]
Modern web-based tools build on these foundations with user-friendly interfaces. KiwiIRC's directory features a global channel search engine that scans over 166,000 channels across numerous networks, supporting queries by keyword in names or topics to direct users to live chats via web clients.[111] These platforms prioritize accessibility, allowing non-IRC users to discover and join discussions without installing software, while emphasizing real-time updates to reflect dynamic network changes.
Character encoding and internationalization
The original Internet Relay Chat (IRC) protocol, as defined in RFC 1459 from 1993, operates using 8-bit octets for message transmission but does not prescribe a specific character set, emphasizing compatibility with 7-bit US-ASCII terminals through its delimiters and keywords.[4] This design effectively limited early IRC to ASCII characters (codes 0-127), restricting support to basic English text and symbols while excluding accented or non-Latin characters.[4] As a result, initial implementations focused on 7-bit clean transmission to maintain interoperability across heterogeneous networks and clients. During the 1990s, as IRC gained popularity in Europe and other regions, client and server software evolved to incorporate support for the ISO-8859 series of 8-bit encodings, enabling representation of accented characters in Western, Central, and Eastern European languages.[112] For instance, ISO-8859-1 (Latin-1) became a common extension for handling languages like French, German, and Spanish, allowing users to transmit diacritics without corrupting messages on compatible systems.[112] Following the standardization of Unicode in the late 1990s, UTF-8 adoption accelerated post-2000 through network-specific policies, with major networks encouraging or requiring it to support global multilingual communication while preserving backward compatibility with ASCII.[113] Despite these advancements, the absence of a universal encoding standard in the core protocol has led to persistent challenges, particularly charset mismatches that produce mojibake—visibly garbled text when messages encoded in one scheme (e.g., ISO-8859-1) are decoded using another (e.g., UTF-8).[112] To address this, many IRC networks implement per-channel encoding configurations, permitting operators or users to specify charsets for individual discussion forums, though this requires manual intervention and can complicate server-to-server relaying.[114] Modern standards under IRCv3, particularly from version 3.2 onward, promote UTF-8 as the default encoding, with servers able to advertise the UTF8ONLY capability to enforce its exclusive use for all text-based messages, topics, and metadata.[113] This mandate ensures consistent handling of international scripts, including non-Latin alphabets like Cyrillic, Arabic, and CJK ideographs, reducing legacy encoding issues.[113] Complementary tools in clients, such as recode filters in irssi, automatically transliterate incoming and outgoing text between legacy charsets and UTF-8, facilitating seamless participation in mixed-encoding environments.[114]File sharing protocols
File sharing in Internet Relay Chat (IRC) primarily relies on the Direct Client-to-Client (DCC) protocol, which enables users to transfer files directly between clients without routing data through the IRC server, thereby avoiding bandwidth limitations and potential server restrictions. Developed in the early 1990s as an extension to the core IRC protocol, DCC uses Client-to-Client Protocol (CTCP) messages to negotiate and establish these peer-to-peer TCP connections.[115][116] The DCC negotiation begins when one client sends a CTCP query in the formatPRIVMSG <target> :\001DCC <type> <argument> <address> <port>\001, where <type> specifies the connection purpose, <argument> provides additional details like a filename, <address> is the initiator's IP in decimal integer form for IPv4 (or hexadecimal for IPv6), and <port> indicates the listening socket.[116] The receiving client must respond affirmatively and then connect to the specified address and port to initiate the transfer. This direct approach allows for faster data exchange but requires both parties to accept the connection explicitly.[115]
DCC includes several variants tailored to different sharing needs. The most common, DCC SEND, facilitates file transfers by streaming binary data in fixed-size packets, typically 1024 bytes each, until the entire file is sent; the protocol supports basic progress tracking but lacks built-in error correction.[115] DCC CHAT establishes a private, direct messaging channel for real-time conversation outside the IRC server, sending line-based text similar to standard IRC but without server mediation.[116] Additionally, DCC RESUME allows interrupted SEND transfers to be paused and resumed from the point of failure, using a similar CTCP extension to specify the byte offset for continuation, which helps mitigate issues from unstable connections.[116]
Despite its utility, DCC has notable limitations that hinder reliability in modern networks. The protocol does not include encryption, leaving transfers vulnerable to interception and exposing participants' IP addresses during negotiation, which can compromise user privacy.[115][116] Firewalls and Network Address Translation (NAT) devices often block incoming connections, complicating setups where one party is behind such barriers; while passive DCC (using port 0 to reverse the connection direction) addresses some NAT issues, it does not resolve firewall restrictions universally.[115] These challenges have persisted since DCC's inception, making it less suitable for environments with strict security policies.[116]
As an alternative to direct DCC SEND, the eXtended DCC (XDCC) protocol emerged in the mid-1990s, primarily used by bots to manage and distribute file packs, such as media collections. XDCC extends DCC by allowing clients to query a bot for a list of available files via CTCP commands like XDCC LIST, then request a specific pack with XDCC SEND <pack_number>, prompting the bot to initiate a standard DCC SEND session.[116] This bot-mediated approach simplifies large-scale sharing, particularly in communities focused on content distribution like anime or software archives, though it still inherits DCC's security and connectivity drawbacks.[117]
In contemporary IRC clients, some implementations incorporate HTTP-based gateways to circumvent DCC's limitations, enabling file uploads to a temporary web server and sharing links via chat rather than direct peer connections, though this is not part of the core IRC protocol.[118]