1 History
1.1 Origins and early development (1988‑1990)
Internet Relay Chat was created in August 1988 by Jarkko Oikarinen, a Finnish computer science student at the University of Oulu. The initial motivation was to extend the BBS‑style messaging system on the university’s local network into a real‑time chat platform. Oikarinen wrote the first server software (later known as ircd) and client, and the first IRC session took place between Oulu and Tampere University of Technology. The protocol quickly spread to other universities in Finland and then to the rest of the world. By 1990, the original IRC network had split into two major branches—EFnet and IRCnet—due to disagreements over network management and server linking policies.
1.2 Expansion and standardization (1990‑2000)
Throughout the 1990s, IRC grew exponentially. New networks such as Undernet (founded 1992) and DALnet (1994) emerged, offering alternative rules and channel‑management services. IRC became the de‑facto chat system for early internet users, particularly in technical, gaming, and hacker communities. The protocol underwent informal standardization through the Internet Engineering Task Force (IETF), with RFC 1459 published in 1993.
1.2.1 RFC 1459 and later protocol extensions
RFC 1459, authored by Jarkko Oikarinen and Darren Reed, formally codified the core IRC protocol, including commands, replies, and network topology rules. It defined the basic client‑server and server‑server communication. Later, RFC 2810–2813 (published in 2000) refined the architecture, introducing concepts like service bots and channel modes. However, many IRC networks implemented proprietary extensions (e.g., NickServ, ChanServ) that were never standardized in RFCs.
1.3 Decline and legacy (2000‑present)
After 2000, IRC faced competition from graphical instant messaging platforms (AIM, MSN Messenger) and later from web‑based chat (Discord, Slack). While IRC usage declined in the mainstream, it retained a strong niche among open‑source developers, Linux users, and privacy‑conscious groups. Networks like Freenode and later Libera Chat became central hubs for free‑software communities. The introduction of IRCv3 extensions (see §7.2) modernized the protocol, adding features like message tags and SASL authentication. IRC remains operational on dozens of networks, with thousands of channels active daily.
2 Protocol and architecture
2.1 Client–server model
IRC operates on a client–server architecture. A client program (e.g., mIRC, HexChat) connects to an IRC server (a daemon running ircd or a derivative). The server relays messages to other servers in the network and to clients on the same server. Each user is identified by a unique nickname. Communication is text‑based, with commands and replies sent over TCP connections (typically port 6667 for plaintext, 6697 for SSL/TLS).
2.2 IRC commands and reply codes
IRC uses a simple line‑based protocol. Clients send commands starting with a keyword (e.g., NICK, JOIN), and servers respond with numeric reply codes (e.g., 001 for welcome, 353 for user list, 433 for nickname already in use). Commands may include parameters separated by spaces.
2.2.1 Basic commands (NICK, USER, JOIN, PRIVMSG)
NICKsets or changes a user’s nickname.USERprovides the user’s real name and hostname upon connection.JOINenters a channel (e.g.,JOIN #example).PRIVMSGsends a private message to a user or a channel (PRIVMSG #channel :Hello).QUITdisconnects from the network.
2.2.2 Channel modes and operator commands
Channel modes control channel behavior. Examples: +t (only operators can change topic), +n (no external messages), +i (invite‑only). Operator commands include KICK (remove a user), BAN (ban a mask), MODE (set channel modes), and TOPIC (change channel topic). Server operators and channel operators have different privilege levels.
2.3 Channel types
2.3.1 Standard channels (#channel)
The most common type, prefixed with #. These channels are visible on all servers in the network. Users can join any standard channel unless it is invite‑only or password‑protected.
2.3.2 Local channels (&channel)
Prefixed with &. These channels exist only on the local server and are not propagated to other servers. They are rarely used in modern networks.
2.3.3 Secure channels (+channel, !channel)
+channel(modeless channel) requires users to be invited by an operator before joining. It does not have channel modes; the server treats it as a temporary space.!channel(safe channel) uses a unique channel ID generated by the server to prevent collisions. It is commonly used on networks with channel registration services (e.g., Undernet’s !channels).
2.4 User modes and privileges
User modes control a user’s privileges on the network. Common modes: +o (channel operator), +v (voice, able to speak in moderated channels), +i (invisible, not shown in /WHO output), +w (receives wallops messages). Server operators have additional modes like +O (local operator) and +a (services administrator). Privileges are granted by other operators or services.
3 Network topology
3.1 Server linking and spanning tree
IRC networks are formed by linking multiple servers together in a spanning‑tree topology. Each server connects to one or more “uplink” servers, forming a tree where messages propagate from the root outward. This design prevents loops but creates a single point of failure at the root. Modern networks often use a mesh or partial mesh for redundancy, but the spanning‑tree logic remains core to the protocol.
3.2 IRC daemons (example: ircd, Charybdis, UnrealIRCd)
The server software that implements the IRC protocol is called an IRC daemon (ircd). Major implementations include:
- ircd – The original daemon by Jarkko Oikarinen, later forked into many variants.
- Charybdis – A modern, high‑performance ircd used by networks like EFnet.
- UnrealIRCd – Feature‑rich ircd supporting SSL, services integration, and advanced channel modes.
- InspIRCd – Modular and extensible, popular on smaller networks.
3.3 Major IRC networks
3.3.1 EFnet
Eris Free Network, formed in 1990 after the first split. EFnet is one of the oldest and largest networks, with a policy of minimal server‑side services (no NickServ). It hosts many general‑interest and technical channels.
3.3.2 Undernet
Founded in 1992, Undernet introduced the concept of channel registration via the X bot and later UWorld services. It became popular for casual chat and later for file‑sharing communities.
3.3.3 IRCnet
Split from EFnet in 1990 over server‑linking policies. IRCnet remains large in Europe, with a strong emphasis on user privacy and minimal “services” interference.
3.3.4 QuakeNet
Launched in 1997, QuakeNet grew out of the Quake gaming community. It became one of the largest networks for online gaming, providing specialized channel services (Q, L). At its peak, it had over 200,000 concurrent users.
3.3.5 Freenode and Libera Chat
Freenode (founded 2002) became the leading network for open‑source projects, hosting channels for Linux, GNU, and countless free‑software communities. In 2021, after a controversial management change, many projects migrated to Libera Chat, a new network founded by former Freenode staff. Libera Chat now serves as the primary IRC home for many open‑source organizations.
4 Client software
4.1 Desktop clients
4.1.1 mIRC
A shareware Windows client first released in 1995. mIRC popularized IRC with its graphical interface, scripting language (mIRC Scripting), and support for DCC file transfers. It remains one of the most widely known IRC clients.
4.1.2 HexChat
An open‑source fork of XChat, available on Linux, Windows, and macOS. HexChat features a tabbed interface, plugin support (Python, Perl, Lua), and built‑in SSL/TLS support. It is a common choice among privacy‑focused users.
4.1.3 WeeChat
A terminal‑based, highly extensible client. WeeChat runs in a console, supports multiple protocols (IRC, XMPP via plugins), and can be scripted in Python, Ruby, or Lua. It is popular among power users and developers who prefer keyboard‑driven interfaces.
4.2 Web‑based clients
4.2.1 KiwiIRC
A modern web IRC client with a polished interface, support for IRCv3 features, and easy integration into websites. It runs entirely in the browser and can connect via WebSocket relays.
4.2.2 The Lounge
A self‑hosted web client that maintains a persistent connection even when the user closes the browser. It supports push notifications, file uploads, and multiple networks.
4.3 Mobile clients
Mobile IRC clients have limited usage due to the textual interface. Notable examples include AndroIRC (Android), Colloquy (iOS, desktop), and Palaver (iOS, discontinued). Many users resort to terminal emulators (e.g., Termux) to run WeeChat on mobile devices.
5 Features and usage
5.1 Channel operations
5.1.1 Channel registration and services
On networks with services (e.g., Freenode, Undernet), users can register a channel using a bot like ChanServ. Registration protects the channel from being taken over when all operators leave. Registered channels have fixed founders and access lists (founder, OP, voice). Services also provide nick‑name registration (NickServ) and message storage (MemoServ).
5.1.2 Bans and access lists
Channel operators can ban users by hostmask (e.g., *!*@*.bad.domain). Bans are enforced by the server; a banned user cannot join. Access lists (e.g., ircd‑based +b, +e, +I for ban, exception, invite) allow fine‑grained control. Services like ChanServ offer additional ban lists and timed bans.
5.2 Private messaging and DCC
5.2.1 Direct Client‑to‑Client (DCC) file transfer
DCC allows two clients to establish a direct TCP connection, bypassing the IRC server. The sender initiates a DCC SEND request with a filename and file size; the receiver can accept or reject. This is commonly used to share files within channels. DCC supports resume functionality but lacks encryption by default.
5.2.2 DCC Chat
A variant of DCC that establishes a direct text chat session between two clients, independent of the IRC server. This is useful for private conversations when server latency is an issue.
5.3 IRC bots
5.3.1 Eggdrop
One of the oldest and most popular IRC bot frameworks, written in C with Tcl scripting. Eggdrop can manage channels, log activity, play trivia games, and interact with databases. It has been in development since 1993.
5.3.2 Supybot/Limnoria
A Python‑based IRC bot framework. Supybot (now maintained as Limnoria) is known for its modular plugin system, sophisticated access control, and extensive documentation. It is widely used by open‑source project channels.
5.4 IRC over SSL/TLS
Early IRC transmitted everything in plaintext. Modern networks and clients support IRC over SSL/TLS, typically on port 6697. This encrypts the entire session, protecting nicknames, messages, and login credentials (e.g., NickServ passwords). SASL authentication via SSL is now standard on many networks.
6 Culture and community
6.1 Etiquette and norms
6.1.1 Nickname selection
Nicknames are the primary identifier. Users typically choose a handle and stick to it. Many networks register nicknames via NickServ to prevent impersonation. Common conventions: avoid offensive names, do not use nicknames of known users or bots.
6.1.2 Flood protection
Sending repeated messages rapidly (flooding) is considered abusive. Servers enforce “flood limits” (e.g., maximum lines per second). Clients often implement “anti‑flood” delays. In channels, operators may kick or ban flooders. The phrase “no spam” is a fundamental IRC rule.
6.2 Spam, wars, and takeovers
6.2.1 Nick collision attacks
A nick collision occurs when two servers both attempt to register the same nickname, causing a desync. Attackers sometimes exploit protocol weaknesses to force collisions and takeover identities. Modern ircds use timestamping (TS) logic to prevent collisions.
6.2.2 Channel takeover methods
Methods include flooding the channel with joins/parts, using a botnet to mass‑kick operators, or tricking a founder into removing protections. Well‑maintained channels with registered services and strict access lists are largely resistant. Historical “war” scenarios (e.g., the 1990s EFnet–Dalnet conflicts) involved massive channel takeovers.
6.3 IRC in open‑source development
6.3.1 Real‑time coordination and help channels
IRC remains the primary real‑time chat for many open‑source projects. Channels like #linux, #git, #python, and #debian host thousands of developers and users. Project maintainers use IRC for bug triage, code review, and release coordination. Help channels provide immediate support for users.
6.4 Memes and historical incidents
IRC has spawned many internet memes. The phrase “/me does something” originated from the CTCP ACTION command in IRC. The “user is typing” gag, “nobody cares”, and “lurk more” are classic IRC‑specific expressions. Notable incidents: the 1993 “IRC War” between EFnet and Undernet, the “IRCpocalypse” (2007) when a botnet attacked Freenode, and the 2021 Freenode drama that led to Libera Chat. The “###” channel (a backronym for “hash hash hash”) is a famous meeting place for IRC history enthusiasts.
7 Extensions and derivatives
7.1 IRCX (Microsoft extension)
In the late 1990s, Microsoft developed IRCX (Internet Relay Chat eXtensions) for its Microsoft Chat client. IRCX added graphical emoticons, better user‑list controls, and server‑side commands. It never gained widespread adoption outside of Microsoft’s own chat service (MSN Chat), which shut down in 2006.
7.2 IRCv3 working group
Formed in 2010, the IRCv3 working group aims to modernize the IRC protocol while maintaining backward compatibility. It produces specifications for new capabilities.
7.2.1 Message tags and IRCv3 capabilities
Message tags (client‑to‑server and server‑to‑client) allow metadata such as message ID, time‑stamp, and client‑side highlighting. Capabilities are negotiated during connection (e.g., CAP LS, CAP REQ). This enables gradual feature introduction without breaking old clients.
7.2.2 SASL authentication
SASL (Simple Authentication and Security Service) provides a secure way to authenticate with services (e.g., NickServ) during the connection phase. IRCv3 SASL (message‑based, not textual) prevents password sniffing. It is widely supported by modern clients and networks.
7.3 Matrix and IRC bridging
Matrix is an open‑standard real‑time communication protocol that can bridge to IRC via Matrix‑IRC bridges (e.g., matrix-appservice-irc). This allows Matrix users to participate in IRC channels and vice versa. Bridges preserve nicknames, history, and some formatting. Many Freenode/Libera Chat channels are bridged to the Matrix network, extending their reach.
8 Comparison with other messaging systems
8.1 IRC vs. Discord
Discord, launched in 2015, is a proprietary platform combining voice and text chat with modern features like file uploads, reaction emoji, and server‑wide roles. Unlike IRC, Discord stores message history indefinitely on its servers. IRC offers greater user control (no central authority), lower bandwidth usage, and full privacy with self‑hosted servers. Discord is more user‑friendly and integrated, while IRC is more decentralized and customizable.
8.2 IRC vs. Slack
Slack is a proprietary team‑oriented messaging app with rich formatting, threaded conversations, and integrations. It uses a client‑server model but stores data on company servers. IRC lacks built‑in threading and file hosting but is simpler, open‑source, and free of commercial tracking. Many open‑source projects still prefer IRC due to its neutrality and low barrier to entry.
8.3 IRC vs. XMPP
XMPP (Extensible Messaging and Presence Protocol) is a federated standard for instant messaging. It supports presence notifications, multi‑user chat (MUC), and extensibility (XEPs). XMPP is more feature‑rich than IRC in terms of contact lists and offline messaging, but IRC is simpler for large‑scale real‑time group chat. Both are decentralized, but IRC’s channel model is more popular for open‑source communities.