END‑TO‑END ENCRYPTED

Build decentralized
messaging in minutes

NexaNode is a lightweight, gossip‑based P2P node that stores and relays end‑to‑end encrypted messages. No central servers, no single point of failure.

async/await

non‑blocking I/O

SQLite

persistent & fast

gossip

dynamic fanout

Ed25519

signature verify

current peers: 15+ • health‑checked

Why NexaNode?

A modern P2P node designed for security, scalability, and simplicity.

End‑to‑end encryption

Messages are encrypted client‑side; nodes only see encrypted payloads. Verification with Ed25519 signatures.

Anti‑replay

Every message includes a unique nonce. Used nonces are tracked in SQLite to prevent replay attacks.

Gossip protocol

Messages propagate via TTL‑based gossip with dynamic fanout (2–4 peers). Efficient and resilient.

Peer health checker

Automatic background pings; unhealthy peers are removed. Healthy peers only list for relays.

Discovery built‑in

Periodic peer discovery via bootstrap nodes and known peers. New peers are persisted automatically.

Async & pooled

asyncio + SQLite connection pool. WAL mode and optimised pragmas for high concurrency.

How it works

Every NexaNode runs the same stack and communicates via JSON/TCP. Messages hop through the network until they reach the recipient.

Client sends

/send with encrypted payload + signature

Node stores

validated message in SQLite

Relay & gossip

propagate to healthy peers (exclude sender)

Receiver polls

/receive – messages are deleted after fetch

All messages are ephemeral and expire after 7 days

Run a node in one command

Start your own NexaNode and join the network. All you need is Python 3.9+ and a shared network secret.

$ python node.py --host 0.0.0.0 --port 5555 \
  --network-secret "your-secret-phrase" \
  --bootstrap-nodes "node1.domain.id:5555,node2.domain.id:5555"

Network secret

Used for authentication between nodes. Keep it private to your network.

Bootstrap nodes

Entry points to the network. They help you discover other peers.

Persistent DB

SQLite file (node.db) stores messages, peers and nonces.