A lightweight completely decentralized and anti-censorship IRC replacement network.

Nicolás Ortega Froysa 884d1adb42 Line formatting. 3 years ago
build cf9ddf441c Decided on a license. 4 years ago
demo e6be2716f4 Renaming structs to evade conflicts with already existing code. 3 years ago
include b1aa31403b Message system now uses queues instead of vectors. 3 years ago
src 884d1adb42 Line formatting. 3 years ago
.gitignore 2d950fc383 Ignore binaries. 3 years ago
CMakeLists.txt 904a4ce55f Add message.cpp to build. 3 years ago
CONTRIBUTING.md 3a1a94c953 Doxygen-friendly markdown. 4 years ago
Doxyfile 68a5cfd24b Read from neocomm.h 4 years ago
LICENSE.md 3a1a94c953 Doxygen-friendly markdown. 4 years ago
README.md 0553f4eb19 Add reasoning for license. 3 years ago



NeoComm is a lightweight completely decentralized and anti-censorship IRC replacement network. The objective of this network is to create a secure form of group instant communication similar to IRC but decentralizing the network, and as a consequence hindering censorship within the network and protecting the network's endurance against malevolent entities that may try to block access to the network.

The API is C compatible (no C++ name mangling) despite the library itself being written in C++ (in order to work with OpenDHT). This should allow for simple bindings to be made, and rewriting the library to C++ should not be difficult either if someone would like to fork.

This repository provides a library with interfaces by which you can access the network, which you are able to use in your own software under the terms & conditions of the library's license.

Network Model

NeoComm tries to avoid any dependency on any central servers in order to avoid central control and censorship of the network itself. For this reason NeoComm works using a DHT network, the technology used in torrenting to allow for nodes to aid each other in peer discovery. This means that the more you connect to the network the less reliant you are on any given node and that new users can connect to specific peer nodes if they are blocked to the default entry nodes. This is because the address of nodes from the previous session can be exported onto your hard disk and reused in later sessions, removing the need to rely on the default entry nodes.


What follows is a list roadmap of features and the (approximate) versions in which they will be implemented. The API will only change in major versions of the library, while minor versions will be dedicated to internal improvements and patch versions to small fixes that got past the release.

  • v1.0-beta:
    • Node connectivity
    • Channel functionality (TBT)
    • Messages properly sent and received
  • v1.0:
    • Message encryption
    • P2P Private messages
  • v2.0:
    • SOCKS4a/SOCKS5 proxy support
    • HTTP proxy support
  • v3.0:
    • P2P File transfer
    • Memos (with TTL)

TBT = To Be Tested

API Documentation

NeoComm uses Doxygen to generate its documentation (for NeoComm developers please refer to the contributing section) which generates HTML documentation, which you can do by running doxygen in the root directory of the project or by using the graphical wizard.

Public documentation will be published with every major release.

Example Code

In the demo directory there is example code of the project containing a minimal, working node using NeoComm. The program has the following usage: ./demo <local port> [<remote node address> <remote node port>].


There are currently no clients available.


To build this project you will need a C++11 compatible compiler (GCC is recommended), the OpenDHT library (>= v1.4.0), msgpack-c, and the CMake build system. To build run the following commands from the root directory of the project.

$ cd build/
$ cmake ..
$ make

By default this will build a release build, if you require a debug build run the cmake command with the additional flag -DCMAKE_BUILD_TYPE=debug. It will also build a static library by default, in order to compile a dynamic library add the flag -DBUILD_SHARED_LIB=ON.


NeoComm is Free/Libre Open Source Software (FLOSS) and as such is community oriented. Contributions are greatly appreciated in order to keep the project up-to-date. If you would like to contribute something then please read over the contribution guide before making a pull request. If you're looking for something to contribute have a look at our issue tracker for bugs/requests.


This project is licensed under the terms & conditions of the GNU Affero General Public License version 3 or greater unless stated otherwise in the file. The reasoning for using this license is that originally I wanted to use the LGPLv3+, however OpenDHT is licensed under the GPLv3 and therefore I had to choose either between the GPLv3 or the AGPLv3. My final decision was for the AGPLv3 because at least then if a legal institution finds a way using this framework to exploit the network (most likely via modifying the framework itself) then they will be forced to share the code and fixes can hopefully be made.