This page describes the basic installation and configuration of NNCP.
If you aren’t already familiar with how NNCP works, I highly recommend you start with NNCP Concepts.
This is a companion to, and often a parallel of, the Workflow section of the NNCP manual.
Main documentation: NNCP Manual: Installation Section.
On that page, you can find links to packages for various operating systems.
Building from source
To build from source, you’ll need Go installed.
Then, from within the NNCP source tree, run something like:
export PREFIX=$HOME/nncp ./contrib/do install
Adjusting PREFIX, of course, to where you want it to go. Another popular value may be
/usr/local/nncp for a systemwide installation.
First, you’ll generate a new NNCP config file:
$PREFIX/bin/nncp-cfgnew > $PREFIX/etc/nncp.hjson
(Use appropriate paths here; for instance, on Debian, nncp-cfgnew is in /usr/bin and the config goes under
The NNCP configuration manual describes what’s in this file and how to use it.
By default, you will have a node that is configured for itself, but doesn’t know how to talk to others. Your general process now will be:
nncp-cfgnewon each machine you want to talk to
- Copy the public keys from machine A to the neigh section of machine B, and vice-versa. (This is similar to the ssh known_hosts and authorized_keys files).
If you don’t have another machine to talk to, you could join the quux.org NNCP public relay instead.
Now, you can use it. Again, NNCP’s workflow page will explain how things generally work.
Links to this note
This page describes some basic concepts of NNCP.
According to the NNCP documentation, NNCP is intended to help build up small size ad-hoc friend-to-friend (F2F) statically routed darknet delay-tolerant networks for fire-and-forget secure reliable files, file requests, Internet Email and commands transmission. All packets are integrity checked, end-to-end Encrypted, explicitly authenticated by known participants public keys. Onion encryption is applied to relayed packets. Each node acts both as a client and server, can use push and poll behaviour model. Also there is multicasting area support.
NNCP lets you securely send files, or request remote execution, between systems. It uses asynchronous communication, so the source and destination need never be online simultaneously. NNCP can route requests via intermediate devices – other NNCP nodes, USB sticks, tapes, radios, phones, cloud services, whatever – leading to a network that is highly resilient and flexible. NNCP makes it much easier to communicate with devices that lack Internet connectivity, or have poor Internet.
I sometimes see people read about NNCP and wonder “This sounds great! But… what can I do with it?” This page aims to answer those questions.