InspIRCd is a modular Internet Relay Chat (IRC) server written in C++ for Linux, BSD, Windows and Mac OS X systems which was created from scratch to be stable, modern and lightweight.

As InspIRCd is one of the few IRC servers written from scratch, it avoids a number of design flaws and performance issues that plague other more established projects, such as UnrealIRCd, while providing the same level of feature parity.

InspIRCd is one of only a few IRC servers to provide a tunable number of features through the use of an advanced but well documented module system. By keeping core functionality to a minimum we hope to increase the stability, security and speed of InspIRCd while also making it customisable to the needs of many different users.

InspIRCd was designed primarily for use on the ChatSpike IRC Network but has been released under version 2 of the GNU General Public License so that the IRC community as a whole can benefit from our work.

If you have any questions about InspIRCd then you can contact our development team by visiting the #InspIRCd channel on ChatSpike.

To begin, take a look at our installation guide followed by our configuration guide.

News Atom Feed
v2.0.20 released!

InspIRCd v2.0.20 is now available, download it from the releases page.

This release fixes an issue with STARTTLS handling which can potentially cause a crash. Only servers using m_ssl_gnutls with STARTTLS enabled are affected, m_ssl_openssl is unaffected. To mitigate this problem, disable STARTTLS by setting <gnutls starttls="off">.

Moreover, an option was added to the m_restrictmsg module to allow sending messages to users on ulined servers, which is useful if m_restrictmsg is used with services.

View the complete changelog here.

v2.0.19 released!

InspIRCd v2.0.19 is now available, download it from the releases page.

This release fixes the issues discovered since 2.0.18, containing multiple important stability and correctness related improvements, including a fix for a bug which allowed malformed DNS records to cause netsplits on a network. Triggering this issue is non-trivial and it may not occur in all circumstances, but all users are advised to upgrade. If that’s not possible, disabling DNS lookups for connecting users (nouserdns setting) mitigates the problem.

See the issue tracker for a list of reported bugs that got fixed in this version and for the pull requests that were merged.

View the complete changelog here.

Thanks to the following people for their work on this release:

Adam (1):

  • Rebuild clone counts on rehash

Attila Molnar (35):

  • Allow setting a limit of less than 64 entries for non-ban listmodes via
  • Remove formatting from the IRC link in README.md
  • Fix a couple of helpop issues
  • Validate module reload callback before use in PURE_STATIC builds
  • Don’t submit a reload worker if the module doing the reload is scheduled for unload
  • Reject empty mode parameters in ModeParser::Process() instead of relying on ModeHandlers to do it
  • m_httpd On module unload close all connections hooked by the module being unloaded
  • m_check Fix non-standard format specifier %s passed to strftime() causing problems on systems not supporting it (Windows)
  • Fix User::age being incorrectly used in some places instead of signon
  • Fix signon time of clients being off by dns_timeout seconds
  • Fix harmless uninitialized variable usage on startup if the config is incorrect
  • Increase penalty for some core commands
  • Always penalize clients executing a command which fails before running the handler, even if the command has 0 penalty
  • Fix elines not matching elined users when rechecking elined status
  • m_hideoper Fix wrong /WHO output for hidden opers if the channel name contains ‘*’
  • Update year in resource file for Windows
  • Don’t bind ports after an unsuccessful rehash
  • m_operprefix Fix force joined opers not being given the operprefix mode
  • Fix numeric ERR_NOTREGISTERED not containing the user’s nick
  • m_abbreviation Fix typo in numeric text
  • threadengine_pthread Throw CoreExceptions instead of CoreException pointers
  • m_spanningtree Fix TreeRoot UserCount being possibly wrong if loaded after startup
  • cmd_userhost List 5 users in the reply even if the query (incorrectly) contains more than 5 nicks
  • Remove outdated ircservices and neostats config examples
  • m_timedbans Store Channel pointer in struct TimedBan
  • m_timedbans On channel destruction remove all timed bans belonging to the channel from internal bookkeeping
  • m_timedbans Extract IsBanSet() to a function
  • m_timedbans Notice user when trying to set a ban that’s already set
  • Reject replies to DNS PTR requests that contain invalid characters
  • m_sasl Add missing validation for server-to-server SASL message
  • Revert c8b344ea748d62d9f37cacd4dd785f15b186725c to fix regression
  • cmd_userhost Fix +H hidden opers being shown as opers
  • m_dccallow Validate tokens before use
  • m_sasl Update description, SASL is no longer exclusive to Atheme
  • Release v2.0.19

Dan Parsons (1):

  • Updated inspircd init script template to make it chkconfig compatible.

Daniel Vassdal (1):

  • cmd_list: Give +s precedence to +p

JD Horelick (2):

  • Add missing oper-only commands to oper class blocks
  • Make some config strings a bit more professional and use RFC reserved TLD’s everywhere

Peter Powell (11):

  • Fix modulemanager not being able to download modules (again!).
  • Fix a snotice in m_spanningtree incorrectly using an unsigned long.
  • Don’t load Data::Dumper in the configure script.
  • Fix a blank error message when trying to load a module with a path.
  • Fix modules not being versioned on Windows.
  • Fix erroneous error messages in configure.
  • Fix a minor crash when a user has no class after OnCheckReady.
  • Fix various Clang warnings.
  • Upgrade Doxyfile from to
  • Fix various Doxygen warnings.
  • Fix building when VERBOSE is already set in the environment.

Renegade334 (1):

  • Remove non-existant extban M: from docs

Thanks to B00mX0r, Christoph Kern (Sheogorath) and Filippo Cortigiani (Simos) for running development snapshots and providing feedback during the development of this release.

v2.0.18 released!

InspIRCd v2.0.18 is now available, download it from the releases page.

This release fixes the issues discovered since 2.0.17.

Several new config options are now available for OpenSSL making it possible to disable SSLv3 among other things. For details please see the updated OpenSSL wiki page.

See the issue tracker for a list of reported bugs that got fixed in this version and for the pull requests that were merged.

View the complete changelog here.

Thanks to the following people for their work on this release:

Adam (4):

  • Do not use the result of the dns cache when the query type of the result is different from the type of the query. #66
  • Remove IPv6 address compaction.
  • Fix watch away numerics, #937
  • Fix m_banredirect causing bans added for hosts being rewritten as nicks

Attila Molnar (32):

  • m_sqlite3 Fix cleanup of unsuccessful database connections
  • Don’t try to set a mode in Channel::SetDefaultModes() if it needs a parameter but does not have one
  • Reject parameters that begin with a colon in Channel::SetDefaultModes()
  • m_ssl_gnutls Re-set DH params when the gnutls_certificate_credentials_t struct is reallocated
  • m_ssl_openssl Clear the error queue before every SSL_* call
  • m_ssl_openssl Enable single (EC)DH use and disable SSL v2
  • m_ssl_openssl Disable session caching and session tickets
  • m_ssl_openssl Allow configuring raw OpenSSL context options
  • m_nationalchars Rebuild core hashmaps when the national_case_insensitive_map changes
  • m_nationalchars Rebuild the hash map in m_watch when the national_case_insensitive_map changes
  • m_spanningtree Rebuild serverlist and sidlist when receiving a specific Request
  • m_nationalchars Ask m_spanningtree to rebuild its hashmaps when the national_case_insensitive_map changes
  • m_ssl_openssl Add user-friendly config options for setting a few OpenSSL context options
  • m_ssl_openssl Return an error from the IOHook read and write functions if the handshake returns 0
  • m_ssl_openssl Remove bogus errno assignment from CloseSession()
  • m_ssl_openssl Free the ssl_cert object as soon as the session is closed instead of waiting for the next VerifyCertificate() or new connection
  • m_ssl_openssl Reset data_to_write for new sessions
  • m_ssl_openssl Fix debug message
  • m_ssl_gnutls Refcount GnuTLS objects, free them when they are no longer in use instead of at /rehash ssl time
  • Add interface to SSL modules that allows other modules to obtain the raw SSL session of a socket
  • Initialize all fields of issl_session on module load in SSL modules
  • m_delayjoin Only send JOIN on mode change if the mode being changed is a prefix mode
  • Update <nationalchars> tag documentation
  • m_ssl_gnutls Add compile time option for allowing sha256 certificate fingerprints
  • m_ssl_openssl Add compile time option to enable ECDH
  • m_ssl_openssl Add compile time option that allows disabling renegotiations
  • Set the parameter of -b to the banmask actually removed
  • Check the return value of getnameinfo() on Windows in insp_inet_ntop() and return NULL if it fails
  • Fail AAAA DNS queries if inet_ntop() fails
  • m_delaymsg Add option to disallow NOTICEs too
  • Remove some dead code found by Coverity
  • Release v2.0.18

Peter Powell (13):

  • Fix listmodes when the config does not specify a wildcard size entry.
  • Fix pkg-config not being used for OpenSSL on non-FreeBSD systems.
  • Add a work around for trampling over PKG_CONFIG_PATH.
  • Fix unit-cc not loading configure cache when building files.
  • Fix hash_map.h on non-GNU C++ standard library implementations.
  • Fix various warnings when building with LLVM 3.5.
  • Avoid calling methods on NULL pointers wherever possible.
  • Replace dodgy use of const char* and memcpy with std::string.
  • Kill some logically dead code detected by Coverity.
  • Add a workaround for compiling modules with Windows line endings.
  • Fix some small bugs in the makefile template.
  • Use clang++ on FreeBSD 10 instead of g++.
  • Use gnutls_rnd instead of gcry_randomize on newer GnuTLS versions.

Robin Burchell (2):

  • Fix an off-by-one on registration timeout handling.
  • Revert “Fix an off-by-one on registration timeout handling.”
v2.0.17 released!

InspIRCd v2.0.17 is now available, download it from the releases page.

This is a bugfix-only release, bringing several improvements and fixes for the Windows version, better compiler support and stability and correctness related improvements. An issue has been fixed that caused m_joinflood to wrongly lock down channels on netbursts in some cases.

Upgrading is strongly recommended.

See the issue tracker for a list of reported bugs that got fixed in this version and for the pull requests that were merged.

View the complete changelog here.

Thanks to the following people for their work on this release:

Adam (5):

  • Change Windows libraries to be dynamically linked
  • Do not export callers
  • Fix m_permchannels and m_xline_db on Windows
  • m_hideoper: Hide hidden opers from /stats P. #874
  • Update aliases/anope.conf.example

Attila Molnar (21):

  • m_watch Be more strict when checking whether the watch list of a user is full
  • Filter out newlines from error messages on Windows
  • Change FormatMessage() usage in DLLManager::RetrieveLastError() to match SocketEngine::LastError()
  • m_ojoin Remove pointless FindChan() call
  • Ignore NULL callbacks in ModuleManager::Reload()
  • m_auditorium Handle NULL return from Channel::GetUser() in OnSendWhoLine()
  • Allow uppercase letters in IPv6 CIDR masks
  • m_ssl_openssl Avoid Applink on Windows by calling PEM_read_bio_DHparams() instead of PEM_read_DHparams()
  • Compress the Windows installer with zlib to reduce AV false positives
  • Fix undefined symbol error on module load if compiled with Clang 3.4
  • m_spanningtree Set the bursting flag in the FJOIN handler based on whether the source of the FJOIN is bursting or not
  • m_spanningtree Advertise the availability of m_globops in CAPAB CAPABILITIES
  • m_cgiirc Call User::InvalidateCache() after changing host and dhost in OnCheckReady()
  • Update year in resource file for Windows
  • m_spanningtree Fix cleanup of connections when unloading a module that provides an IOHook
  • m_spanningtree Forward NICK messages when they cause a collision with the new nick param rewritten to the uuid
  • m_chghost Allow ulined servers to change the host of unregistered users (for SASL)
  • Make sure the DN strings obtained from the SSL mods are always valid
  • m_spanningtree Always treat the remote client as the winner on nick collision if the nick is used by a (local) client that isn’t fully registered
  • Update example configuration files, fix typos and case
  • Release v2.0.17

Dan Parsons (1):

  • Update server.cpp

Peter Powell (4):

  • Backport questions from master’s genssl tool.
  • Replace deprecated entry in launchd config with the modern equivalent.
  • Fix copy/paste error in m_denychans.
  • Fix various small problems with configure.

Robby- (2):

  • Correct the syntax messages of a few modules.
  • Some more helpop config updates.

Tim Heckman (1):

  • remove unneeded whitespace from the docs/examples

Manuel Leiner (satmd) (1):

  • Fix harmless loop off-by-ones found by Moonlightning
v2.0.16 released!

InspIRCd v2.0.16 is now available, downloads are here.

This is a bugfix-only release, containing several stability related and correctness improvements. An issue has also been fixed that prevented clients using NSS for SSL/TLS such as Pidgin (via libpurple), ChatZilla, Instantbird, etc. from reconnecting to a server using OpenSSL after disconnection. See this bug report for more information.

Upgrading is strongly recommended.

The example configuration and the helpop text received a huge update as well, hopefully the new explanations will make things easier to understand. Let us know if you find something in the documentation that is unclear to you.

The issue tracker contains a list of the reported bugs which got fixed in this version. View the complete changelog here.

Thanks to the following people for their efforts that made this release possible:

Adam (3):

  • Set a session id on our server ssl context in m_ssl_openssl. It is required for some clients which try to restore SSL sessions.
  • Fix new file descriptor debug log message in socketengine_poll to show the correct events
  • Fix /who on opers incorrectly showing +i opers to users without the privilege to see them

Attila Molnar (22):

  • m_ssl_openssl Fix memory leaks on /rehash ssl, unload and in VerifyCertificate()
  • m_banredirect Fix typo in a message (transfered -> transferred)
  • socketengine_epoll Initialize CurrentSetSize (only used by m_httpd_stats)
  • socketengine_select Reset the values in the timeval struct on *nix before select()
  • Fix NULL dereference on rehash when there is a fatal error in the configuration of connect classes
  • m_spanningtree Don’t send snotices to servers about remote servers splitting
  • m_spanningtree Do pointer comparison before deleting one of the pointers in TreeSocket::Squit()
  • Improve detection for non-cidr masks to prevent unwanted matches
  • cmd_names Allow opers having the channels/auspex priv to view the NAMES list of +s channels from outside
  • Backport “Refactor Channel::UserList() to use std::string”
  • Fix NAMES list getting truncated on servers having an excessively long server name
  • m_operprefix Don’t set +y on the oper if hideoper is being unset due to deopering
  • m_httpd Fix typo noticed by @SaberUK
  • m_globalload Don’t pass a callback to ModuleManager::Reload() if reloading m_globalload
  • m_watch Validate targ before use, noticed while rewriting m_watch for 2.2
  • Major example configuration and helpop update
  • Fix typos and update text in the configure script
  • Add REG_ALL checks to treat unregistered users as nonexistent in more cases
  • Fix snotice about disabled command usage being sent to the wrong snomask
  • Fix typo in helpop-full that prevented it from loading and other minor helpop issues
  • Fix IPv6 address handling in 6aaf7047297b739377e7d509cb914f32447fb281
  • Release 2.0.16

Peter Powell (2):

  • Fix various problems detected by Clang 3.4.
  • Fix Solaris not being able to find modules without pkg-config.

Daniel Vassdal (1):

  • Fix build problem on Solaris
« Previous
Next »
Page 1 of 5