1. *Peer Discovery via DHT*: When you run `holesail --live <port>`, the server generates an *Ed25519 keypair* and announces its public key to the HyperDHT. The connection string (`hs://...`) is essentially this public key encoded.
1. *NAT Traversal*: The DHT nodes themselves act as holepunch facilitators. Unlike traditional STUN/TURN servers, any peer in the DHT can help coordinate the holepunch between two NAT’d peers. This is what makes it “truly P2P” - no centralized relay infrastructure.
1. *Holepunch Mechanics*:
- Both peers send UDP packets to each other’s external IP:port (discovered via DHT)
- The simultaneous outbound packets “punch” holes in both NATs
- The DHT nodes relay timing/coordination metadata
- Once holepunched, a direct UDP connection is established
1. *Transport*: Uses *UDX* (custom UDP protocol) for the data plane after holepunching. TCP fallback is available when UDP fails.
-----
### Encryption Management
*Two-layer encryption using Noise Protocol + libsodium secretstream:*
|Layer |Protocol |Purpose |
|---------|--------------------------|------------------------------------|
|Handshake|*Noise XX pattern* |Key exchange, mutual authentication |
|Data |*libsodium secretstream*|Symmetric encryption of all payloads|
```
1. Peer A generates keypair → announces publicKey to DHT
2. Peer B looks up publicKey → initiates holepunch
3. After UDP connection established:
a. Noise XX handshake begins (ephemeral keys exchanged)
b. Both sides derive shared secret
c. secretstream initialized with derived keys
4. All subsequent data encrypted with XChaCha20-Poly1305
```
-----
### Key Properties
- *Identity-based routing*: Peers connect by public key, not IP address - works even if you move networks
- *E2E encrypted by default*: No way for DHT nodes or relays to read your traffic
- *No central servers*: Bootstrap nodes exist but only for DHT entry; traffic never routes through them
- *Firewall support*: Optional `firewall()` callback to accept/reject connections by remotePublicKey
Hey thanks for the feedback, I am rewriting the whole documentation at the moment to make it easier to understand and cover v2 of Holesail that we recently released.
If you have a particular question about it, I am happy to help.
i mean good luck, but you picked a narrow market
reply