adn: Another Distributed Network

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Please see the README on GitHub at

[Skip to Readme]


Change log None available
Dependencies adn, array, base (>=4.7 && <5), binary (>=0.8.8 && <0.8.9), bytestring (>=0.10.12 && <0.10.13), containers (>=0.6.4 && <0.6.6), exceptions (==0.10.4), haskeline (>=0.8.2 && <0.8.3), lens (>=4.19 && <5.1), mtl (>=2.2 && <2.3), network (>=3.1.1 && <3.1.3), optparse-applicative (>=0.16.1 && <0.16.2), parsec (>=3.1.14 && <3.1.15), process (>=1.6.13 && <1.6.14), split (>=0.2.3 && <0.2.4), stm (>=2.5.0 && <2.5.1), suspend (>=0.2.0 && <0.2.1), time (>=1.9.3 && <1.9.4), timers (>=0.2.0 && <0.2.1), unagi-chan (>=0.4.1 && <0.4.2), unix (>=2.7.2 && <2.7.3), utf8-string (>=1.0 && <1.1) [details]
License BSD-3-Clause
Copyright 2021 Lorbam Oltarudesh
Author Lorbam Oltarudesh
Category Network
Home page
Bug tracker
Source repo head: git clone
Uploaded by loltarudesh at 2022-03-26T13:38:39Z



Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Readme for adn-

[back to package description]

Another Distributed Network

ADN is a collection of libraries and tools designed to create free autonomous networks.

The code documentation will soon be available on hackage

You can visit the wiki for more information about the project: goals, current state, outlooks.

We welcome gratefully any comment, reaction, question, suggestion or contribution to this project!

WARNING: this project is in a quite early stage. It has been very crudely tested, and should therefore be considered bugged, and used with caution.

Test the program


git clone """

curl -sSL | sh


A wrapper script called is used to launch the program. It uses stack to download the dependencies and compile the program.

In order to restrict priviledged execution, this process requires two phases to be runned. a first stage is needed to generate internal configurations files, before actually running the program.

The privilleges are required to:

All the relevant parameters can be configured through comand line arguments. Below are a few simple usage example. However, we tried to make this program highly parametrizable, and the option -h (--help) lists the available possibilities.

The gateway

./ genconf link-UDP --wlan-iface wlan0 --phy-ip --warp --server --gateway eth0

./ run link-UDP --wlan-iface wlan0 --phy-ip --warp --id 1 --server --gateway eth0

The client

./ genconf link-UDP --wlan-iface wlan0 --phy-ip --warp --client

./ run link-UDP --wlan-iface wlan0 --phy-ip --warp --id 2 --client

The relay

./ genconf link-UDP --wlan-iface wlan0 --phy-ip --warp

./ run link-UDP --wlan-iface wlan0 --phy-ip --warp --id 3


You can also simulate a network with many user. This is quite useless, but allows you to check out the project, without having to type your password!

./ run test chain ./ genconf test

Autonomous networks

Every computer, phone or any device with Wifi or Bluetooth is in capacity to communicate with every other device in range, which could in turn relay data to any user in their range. By doing so, it seems possible to create entirely autonomous networks, without the need for any central authority or regulation.

Such networks have a wide range of application: allowing communication in isolated place, or in contrary in crowded areas where burst of communication can overwhelm a GSM relay. They would also offer very resilient way of communication against censorship and surveillance.

Our goal

As its name imply, ADN is not at all the first project to look into distributed mesh networking (we must in particular cite the beautiful Open-Mesh). Many communication protocol have been proposed, implemented, and tested. If they have a hard time competing with more structured networks, they have proven many times that it is possible to communicate data, with a reasonable bitrate, through an autonomous network.

The core of ADN is a playground framework to design, implement and test new routing solution, and new distributed application. It has been designed with simplicity has it's primary objective, and does not pretend to be efficient in any way. We tried to make it as user friendly as possible, and hope it to be flexible enough to support all the uses we though of, and maybe some of those we didn't think about.

With this framework, we propose a rudimentary example, Warp. It is intenteded as a (barely) working proof-of-concept of a "free network", with:

At this stage, the only supported usage is tunneling internet traffic through a free network. We thought it to be a key feature, and a strong proof of feasability. However, we believe the true interest of free networks lies in all the new use we have to invent, and encourage the development of application inside ADN.

State of the project

This huge project can only be collective. With a though to Conway's Law, it seems clear that the best way to implement a distributed network is with a distributed project. The ADN core project aims at being a simple common framework, used by many other projects to build a full working network.

This approach is also imposed by the diversity of possible applications, leading to think that there is no good protocol, but many different ways of building networks, each adapted to its own situation.

Done and tested (possibly still bugged, however...)

To do