ngIRCd is a small C IRC daemon for private and in-house networks
Free, portable and lightweight Internet Relay Chat server
At a glance
- What is it?
- ngIRCd is a lightweight Internet Relay Chat server written from scratch in C, aimed at small or private networks, with IPv6, TLS, PAM authentication and character set conversion in the box. It suits an operator who wants a controlled IRC server of their own, and it is not a replacement for a full featured ircd with services and bouncers.
- Who is it for?
- Adopt ngIRCd if you run an internal or hobby IRC network and want a daemon that is small, well documented and easy to configure, especially if you need PAM authentication or TLS on client links. Do not adopt it if you need the full RFC edge cases, since the project states explicitly that reproducing the nasty behaviors of the original ircd is not the goal, and not if you want a modern chat platform with message history or web clients.
- Can I use it commercially?
- Yes, with conditions. GPL-2.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 24, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A deliberate goal: the useful parts of IRC, not the nasty ones
ngIRCd is a free, portable and lightweight Internet Relay Chat server for small or private networks, written from scratch in C and developed under the GNU General Public License, with the COPYING file holding the licensing information. The status section is unusually honest about scope. Development started back in 2001, the server tries to follow all relevant standards, and it is not based on the forefather, the daemon of the IRCNet. Then comes the sentence that tells you what to expect: it is not the goal of ngIRCd to implement all the nasty behaviors of the original ircd or the corner cases in the RFCs, but to implement most of the useful commands and semantics that are used by existing clients. That is the right brief for a private network. A server for a group of colleagues or a hobby community does not need every obscure mode or a bug compatible quirk, and the project's stated deployment record is that ngIRCd is used as the daemon in real world in-house and public IRC networks and is included in the package repositories of various operating systems.
Single node or a network of servers, with TLS between them
The deployment shapes are two. The server runs as a single node server, or it can be part of a network of ngIRCd servers in a LAN or across the internet, and the configuration is described as quite easy to set up. The link layer is where the network topology gets decided, since server to server links are TLS protected, and client to server links are protected as well. The optional feature set covers IPv6 protocol support, SSL and TLS protected client and server links, the Pluggable Authentication Modules system for user authentication, IDENT requests, and character set conversion for legacy clients. The character set conversion is the one that gets overlooked. An IRC network with clients from the last two decades has to cope with clients that assume a national encoding rather than UTF-8, and a server that can convert on the fly avoids every client needing to be fixed. The IDENT support serves a similar practical purpose, since some clients and network equipment still use the IDENT protocol to look up the user behind a connection. The cloaking feature is there too, and the documentation lists no problems with servers that have dynamic IP addresses, which matters when the server sits behind a residential connection.
The configuration file, the man pages and the QuickStart guide
Documentation is the strongest part of this project, and there are four places to look. The homepage at ngircd.barton.de carries the news and downloads pages with the most recent stable release, plus a documentation section. The INSTALL.md document describes how to install and upgrade ngIRCd, and it is included in all distribution archives as well as being available on GitHub. The file doc/QuickStart.md covers setting up and running the daemon, and the documentation points at it for information about setting up and running ngIRCd including some real world configuration examples. Then there are two manual pages, ngircd(8) for the daemon and ngircd.conf(5) for its configuration file, which have even more details and list all possible command line parameters and configuration options, readable with the man command when they are installed locally, for example man 8 ngircd and man 5 ngircd.conf, or online. The doc/ directory holds more files, and the configuration file itself is described as well arranged and lean. The upshot for an operator is that the answer to almost any configuration question is a man page, and the answer to any getting started question is the QuickStart file.
Installing ngIRCd, where the documentation points you
There is no install command in the project README, and the reason is that installation is delegated to a separate document. The INSTALL.md document describes how to install and upgrade ngIRCd, it is included in all distribution archives, and it is available online on GitHub, so the source of truth for the build is that file rather than the README. The release route and the development route are different in the same way. The homepage downloads page carries the most recent stable release, and for a first install the archive is the sensible choice, with the tarball unpacked and the build driven by the autotools files in the tree, which are autogen.sh, configure.ng, config.guess, config.sub and Makefile.am. After the binary exists, the first thing worth doing is reading doc/QuickStart.md, because it covers setting up and running the daemon with real world configuration examples, and then checking the two manual pages for the full list of command line parameters and configuration options. The daemon binary is ngircd and its configuration file is ngircd.conf, and the manual pages are named after them, so man 8 ngircd and man 5 ngircd.conf give you the same reference the maintainers read.
Building it, and the autotools layout
The project is a conventional GNU autotools C project, and the top level listing shows the standard parts. There is a Makefile.am, an autogen.sh, a configure.ng, config.guess and config.sub, a src/ directory holding the daemon source, a man/ directory, a doc/ directory, and a contrib/ directory for contributed extras. The advantage of that layout is portability, and the documentation backs the claim with a wide field of supported platforms including AIX, A/UX, FreeBSD, HP-UX, IRIX, Linux, macOS, NetBSD, OpenBSD, Solaris and Windows with WSL or Cygwin. The repository also carries a .clang_complete file, which tells you the C sources are indexed for completion, an .editorconfig for editor settings, a ChangeLog, a NEWS file with release notes, an AUTHORS.md, a .mailmap, and a .dockerignore. The .dockerignore is worth noting because it implies container builds are anticipated even though the README does not describe a container workflow, so anyone packaging ngIRCd in Docker is working slightly ahead of the documented path. The homepage also publishes a Radicle identity for the repository, rad:z2obJaCJQz3XwzHHEGszvZSmPnjNs, browsable on seed.radicle.garden, which is a distribution channel independent of GitHub and a nod to the decentralised hosting conversation.
Where ngIRCd is the wrong choice
The limitations come straight from the stated scope, and they are real. The project says outright that it does not implement the nasty behaviors of the original ircd or the corner cases in the RFCs, so a client or bot that depends on a specific obscure behaviour of a vintage ircd will not find it here, and a network that expects a full service tree will be disappointed. There is no mention of message history, bouncer support, web interfaces, moderation tooling, or any of the conveniences people have come to expect from a modern chat platform, and none of that is claimed. The second limit is the small network assumption baked into the design. The documentation targets small or private networks, and a large public IRC network is a different problem with different failure modes, different abuse handling and different expectations about who is accountable for what. The third is the port and firewall surface. Running a daemon that accepts client connections and opens server to server links, with optional PAM and IDENT integration, means a network service on your host with the usual attendant concerns, and the PAM path in particular hands authentication to the host's own configuration, which has to be right for IRC logins to work at all.
Getting the source and the release
There are two ways to get the code and they serve different purposes. The homepage news and downloads pages carry the latest information about ngIRCd and the most recent stable release, and the source repository on GitHub is where the latest development code lives, which is the place to visit if you want the newest changes rather than the newest release. The release history in the project's own list shows how the numbering works. ngIRCd 27 was released in April 2024, with a release candidate a fortnight earlier, and ngIRCd 28 followed on 2026-07-12, which is also the date of the last push to the repository. That gap between the two releases is worth noting for anyone planning around version numbers, since the daemon and its configuration format evolve together and the manual pages are the reference for the pair. The last push was on 2026-07-12 and the project is not archived, so the tree is still being worked on. For bug reports the issue tracker on GitHub is the route, with pull requests for patches, and there is also a support channel at ngircd.barton.de/support listing the IRC contact, an IRC network at irc.barton.de with the ngircd channel, and a mailing list at [email protected].
Editorial conclusion
Adopt ngIRCd if you run an internal or hobby IRC network and want a daemon that is small, well documented and easy to configure, especially if you need PAM authentication or TLS on client links. Do not adopt it if you need the full RFC edge cases, since the project states explicitly that reproducing the nasty behaviors of the original ircd is not the goal, and not if you want a modern chat platform with message history or web clients. Verify two things before you deploy it: that the platform you run is on the supported list, which covers AIX, A/UX, FreeBSD, HP-UX, IRIX, Linux, macOS, NetBSD, OpenBSD, Solaris and Windows with WSL or Cygwin, and that the release you pick matches the version of the configuration file format, since the daemon and its conf file are documented together in the ngircd(8) and ngircd.conf(5) manual pages. The practical first step is to read doc/QuickStart.md, which carries real world configuration examples, and to write down which modes your users actually need before configuring them.
Frequently asked questions
What is ngIRCd?
It is a free, portable and lightweight Internet Relay Chat server for small or private networks, written from scratch in C under the GNU General Public License. It runs as a single node server or as part of a network of ngIRCd servers in a LAN or across the internet.
Which IRC features does ngIRCd support?
It optionally supports the IPv6 protocol, SSL and TLS protected client-server and server-server links, PAM for user authentication, IDENT requests and character set conversion for legacy clients. The project states that implementing all the nasty behaviors of the original ircd or the RFC corner cases is not the goal, only the commands and semantics used by existing clients.
Where is the ngIRCd configuration documented?
The INSTALL.md document covers installing and upgrading, doc/QuickStart.md covers setting up and running with real world configuration examples, and two manual pages give the full detail, ngircd(8) for the daemon and ngircd.conf(5) for the configuration file, readable with man 8 ngircd and man 5 ngircd.conf or online.
Which platforms does ngIRCd run on?
The documentation lists a wide field of supported platforms including AIX, A/UX, FreeBSD, HP-UX, IRIX, Linux, macOS, NetBSD, OpenBSD, Solaris and Windows with WSL or Cygwin. The project is also included in the package repositories of various operating systems.
How do I get the latest ngIRCd code?
The homepage news and downloads pages carry the most recent stable release, while the GitHub repository holds the latest development code. The project also publishes a Radicle identity for the repository, rad:z2obJaCJQz3XwzHHEGszvZSmPnjNs, browsable on seed.radicle.garden.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/ngircd-ngircd)Was this useful?