nospoondocs Source on GitHub

Reference

Configuration and commands

Desktop nospoon reads JSONC: JSON with comments. Server and client configurations are separate files. The Android app imports the client fields it supports through its editor.

The easiest way to create a matching server/client set is the C++ nospoon init command. The templates below explain the fields; replace every <placeholder> before using them.

Server template

{
  "mode": "server",
  "ip": "10.0.0.1/24",
  "seed": "<server-private-seed-64-hex-characters>",
  "mtu": 1400,
  "fullTunnel": false,
  "peers": {
    "<client-public-key-64-hex-characters>": "10.0.0.2"
  }
}

Client template

{
  "mode": "client",
  "server": "<server-public-key-64-hex-characters>",
  "seed": "<client-private-seed-64-hex-characters>",
  "ip": "10.0.0.2/24",
  "mtu": 1400,
  "fullTunnel": false
}

Fields

Field Used by Meaning
mode Desktop server or client. Required.
server Clients Server’s 64-character hexadecimal public key. Required for clients.
seed Both Private 64-character hexadecimal identity seed. Keep it stable and private.
seedFile Desktop Read the private seed from a file instead of putting it inline. Do not combine with seed.
ip Both Device’s VPN IPv4 address and prefix. Defaults: server 10.0.0.1/24, client 10.0.0.2/24.
ipv6 Desktop Optional VPN IPv6 address and prefix.
mtu Both Largest tunnel packet size. Default 1400; desktop validation accepts 576–65535. Start with the default.
fullTunnel Both Default false. Server enables internet forwarding; client redirects internet traffic. Windows servers do not support it.
outInterface Desktop server Optional outbound network interface for full tunnel; otherwise automatically detected.
peers Server Map client public keys to their assigned VPN IPv4 addresses, without the prefix.

For an allowlisted server, the client’s seed must derive the public key listed in peers, and its ip must match the assigned address. Omitting the seed creates a new identity rather than restoring the identity the server authorized.

Commands

up and genkey are available in both implementations. The remaining utility commands below are features of nospoon-cpp.

Command What it does
nospoon up config.jsonc Starts the VPN. Requires root or Administrator privileges.
nospoon genkey Generates a seed and its public key. The seed printed by this command is private.
nospoon genkey <seed-or-file> C++: derives the public key for an existing seed or seed file.
nospoon init my-network -n 2 Creates a new server and two separately identified clients. Optional --subnet and --mtu customize a new deployment.
nospoon addclient my-network/server.jsonc -n 1 Adds a client to an existing allowlisted deployment and writes its configuration.
nospoon inspect client.jsonc Validates and displays resolved configuration; does not open a tunnel.
nospoon check Tests whether DHT discovery/bootstrap is reachable; does not create a TUN interface.
nospoon check client.jsonc Also attempts a connection to that client’s server.

Do not run check client.jsonc using the identity of an already connected device. Its connection attempt can replace the working tunnel. Use a separate test client identity, or disconnect that client first when interruption is acceptable.

Without an explicit filename, up uses /etc/nospoon/config.jsonc on Linux/macOS and %PROGRAMDATA%\nospoon\config.jsonc on Windows. Passing the filename explicitly is recommended in these guides.

Keep identities private

Public keys can be shared. Seeds, seed files, full configurations and configuration QR codes must be kept private. Back up your server identity so a reinstall does not change the key your clients use.

See server setup for adding or removing access, and routing for full-tunnel behavior.