An IRC server without services is like an apartment building without locks. Technically functional, but you wouldn't want to live there. Services — NickServ for nicknames, ChanServ for channels, MemoServ for messages — are what transform a bare IRC server into a community platform where people can establish persistent identities and manage their spaces.
What Are IRC Services?
IRC services are pseudo-users — programs that connect to the IRC server and appear as special users (NickServ, ChanServ, etc.). They're not regular IRC clients; they connect through a special services link that gives them elevated privileges. Services provide:
- NickServ: Nickname registration and identification. Users can "own" a nickname, set a password, and prevent others from using it.
- ChanServ: Channel registration, access lists, and persistent settings. A registered channel's configuration survives server restarts.
- MemoServ: Offline messaging between registered users.
- HostServ: Custom virtual hostnames (vhosts) for users.
- BotServ: Custom-named bots that sit in channels for ChanServ functions.
- OperServ: Administrative functions — network-wide bans (akills), session management, server statistics.
Why Anope?
Anope and Atheme are the two major IRC services packages. Anope is the direct successor of the Epona/Anope lineage that dates back to the late 1990s. It's widely used, well-documented, and compatible with all major IRC server software.
Anope's key strengths: modular architecture, multiple database backends (flat file, SQL), web panel support, and extensive documentation. It supports linking to UnrealIRCd, InspIRCd, Charybdis, Solanum, ngIRCd, and others.
Installation
Dependencies (Debian/Ubuntu):
sudo apt install build-essential cmake libmysqlclient-dev libssl-dev
Build and install:
cd ~
wget https://github.com/anope/anope/releases/download/2.0.14/anope-2.0.14-source.tar.gz
tar xzf anope-2.0.14-source.tar.gz
cd anope-2.0.14-source
# Enable desired extras (SQL, LDAP, etc.):
cd modules/extra
ln -s extra/stats.cpp ../ # Statistics module
ln -s extra/m_mysql.cpp ../ # MySQL backend (optional)
cd ../..
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=$HOME/anope ..
make
make install
Copy the example configuration:
cd ~/anope/conf
cp example.conf services.conf
NickServ Configuration
In services.conf:
module {
name = "nickserv"
client = "NickServ"
defaults = "kill_quick ns_secure ns_private hide_email"
# Registration settings:
registration = "none" # "none", "email", "admin", "disabled"
# Nickname expiration:
expire = 90d # Nicknames expire after 90 days of inactivity
# Guest nickname for unidentified users:
guestnickprefix = "Guest"
# Enforce registered nicknames:
forceemail = no # Require email for registration
confirmemailchanges = no
# Kill settings (when someone uses a registered nick without identifying):
kill = "quick" # Disconnect after brief warning
killquick = 20s # Seconds before killing
}
Users register with: /msg NickServ REGISTER password email@example.com
Users identify with: /msg NickServ IDENTIFY password
For a more secure setup, encourage users to use SASL authentication instead of NickServ IDENTIFY — it authenticates before the user is visible on the network, preventing the brief window where their unidentified connection is visible.
ChanServ Configuration
module {
name = "chanserv"
client = "ChanServ"
defaults = "keeptopic peace cs_secure"
expire = 120d # Channels expire after 120 days of inactivity
maxregistered = 20 # Max channels per user
# Access levels:
# These define what access level gets what privileges
# Anope uses a numeric access system by default
}
Channel registration: /msg ChanServ REGISTER #channel description
Access list management:
/msg ChanServ ACCESS #channel ADD marco 500 (founder level)
/msg ChanServ ACCESS #channel ADD alice 100 (auto-op)
/msg ChanServ ACCESS #channel ADD bob 50 (auto-voice)
/msg ChanServ ACCESS #channel LIST
ChanServ's access levels (default configuration):
Level | Privilege
-------|----------
3 | Auto-voice
5 | Voice/devoice others
10 | Auto-halfop, kick
13 | Auto-op
15 | Halfop/dehalfop others
20 | Op/deop others, unban, invite
25 | Auto-protect
30 | Protect/deprotect
40 | Set modes, topic
50 | Assign access up to own level - 1
9999 | Founder (full control)
BotServ: Custom Bot Names
BotServ allows channel owners to assign a custom-named bot to their channel instead of having ChanServ sit there directly. This is cosmetic but appreciated by many channel operators:
# Create a bot (OperServ or services admin):
/msg BotServ BOT ADD HelpBot helpbot services.example.com "Channel Helper"
# Assign to a channel (channel owner):
/msg BotServ ASSIGN #help HelpBot
The bot acts as ChanServ's avatar in that channel — kicks, bans, and mode changes appear to come from "HelpBot" instead of "ChanServ." It's a small touch that makes channels feel more personalized.
Database Backends
Anope supports multiple database backends:
Flat file (default): Simple, no dependencies, fine for small-to-medium networks. Data is stored in anope.db in a custom format.
module { name = "db_flatfile" }
db_flatfile {
database = "anope.db"
}
MySQL/MariaDB: Better for large networks, enables web interfaces, and provides standard SQL access to services data.
module { name = "m_mysql" }
mysql {
name = "mysql/main"
database = "anope"
server = "127.0.0.1"
username = "anope"
password = "secure_password"
port = 3306
}
module { name = "db_sql" }
db_sql {
engine = "mysql/main"
}
SQLite: Middle ground — SQL access without running a separate database server.
IRCd Integration
Anope connects to the IRCd through a services link — a special server-to-server connection. Configuration depends on which IRCd you're using.
For UnrealIRCd:
In UnrealIRCd's unrealircd.conf:
ulines {
services.example.com;
};
link services.example.com {
incoming {
mask 127.0.0.1;
};
password "link_password";
class servers;
};
In Anope's services.conf:
uplink {
host = "127.0.0.1"
port = 6900 # IRCd's server link port
password = "link_password"
}
module { name = "unreal4" }
serverinfo {
name = "services.example.com"
description = "Anope IRC Services"
id = "00A" # Unique SID, must not conflict with IRCd SIDs
}
Start services:
~/anope/bin/services
If everything is configured correctly, you'll see services connect in the IRCd log, and NickServ/ChanServ/etc. will appear on the network. Test by messaging NickServ: /msg NickServ HELP
Anope is one of those pieces of software where the initial setup takes an afternoon, but the result serves you for years. The documentation is thorough, the community is helpful, and once it's running, it's remarkably low-maintenance. Get the link password right, set sane expiration policies, and let it do its job.
Frequently Asked Questions
Anope or Atheme?
Both are solid choices. Anope has more active development and a larger user community in 2026. Atheme (now maintained as the fork "atheme-services") has a different access model (flags-based instead of levels) that some prefer. Try both and see which fits your network's culture better.
Can I migrate from Atheme to Anope?
Yes. Anope includes database conversion tools for migrating from Atheme, older Anope versions, and several legacy services packages. The migration process is documented in Anope's wiki. Back up everything before attempting it.
How do I add a services admin?
In services.conf, add an oper block: oper { name = "marco"; type = "Services Root"; }. Then, after identifying to NickServ, use /msg OperServ LOGIN to gain oper access to services commands.
Why aren't services connecting to my IRCd?
The most common causes: password mismatch between the ircd link block and Anope's uplink config, wrong port number, firewall blocking the connection (even on localhost), or mismatched server names. Check both the ircd log and Anope's log (logs/services.log) for specific error messages.
FAQ
What are IRC services?
IRC services are server-side programs that provide nick registration (NickServ), channel registration (ChanServ), memo sending (MemoServ), and other features. They connect to the network as pseudo-servers.
Is Anope free?
Yes. Anope is free and open-source, licensed under the GPL. It's the most widely deployed IRC services package, supporting UnrealIRCd, InspIRCd, and other popular IRCds.
What's the difference between Anope and Atheme?
Both are services packages. Anope has more active development and broader IRCd support. Atheme (now mostly unmaintained) was known for its clean code and GroupServ feature. Most networks that used Atheme have migrated to Anope.