Running a Node
The tesseras-daemon binary runs a full Tesseras node that participates in the peer-to-peer network. It listens for connections over QUIC, joins the distributed hash table (DHT), and enables other nodes to discover and find tessera pointers.
Starting the daemon
tesseras-daemon
On first run, the daemon:
- Creates the data directory (
~/.local/share/tesserason Linux,~/Library/Application Support/tesserason macOS) - Generates a node identity with proof-of-work (takes about 1 second)
- Binds a QUIC listener on
0.0.0.0:4433 - Bootstraps into the network by contacting seed nodes
- Prints
daemon readywhen fully operational
Command-line options
tesseras-daemon [OPTIONS]
| Option | Description | Default |
|---|---|---|
-c, --config <PATH> | Path to a TOML config file | None (uses built-in defaults) |
-l, --listen <ADDR> | Address and port to listen on | 0.0.0.0:4433 |
-b, --bootstrap <ADDRS> | Comma-separated bootstrap addresses | boot1.tesseras.net:4433,boot2.tesseras.net:4433 |
-d, --data-dir <PATH> | Data directory | Platform-specific (see above) |
CLI options override values from the config file.
Examples
Run with defaults (join the public network):
tesseras-daemon
Run as a seed node (no bootstrap, other nodes connect to you):
tesseras-daemon --bootstrap ""
Run on a custom port with a specific data directory:
tesseras-daemon --listen 0.0.0.0:5000 --data-dir /var/lib/tesseras
Bootstrap from a specific node:
tesseras-daemon --bootstrap "192.168.1.50:4433"
Join a local network of multiple nodes:
tesseras-daemon --bootstrap "192.168.1.10:4433,192.168.1.11:4433"
Node identity
Each node has a unique identity stored in <data-dir>/identity.key. This file contains a 32-byte public key and an 8-byte proof-of-work nonce.
The node ID is derived from the public key: BLAKE3(pubkey || nonce) truncated to 20 bytes. The nonce must produce a hash with 8 leading zero bits, which takes about 256 hash attempts. This lightweight proof-of-work makes creating thousands of fake identities expensive while costing legitimate users less than a second.
The identity is generated automatically on first run and reused on subsequent runs. If you delete identity.key, a new identity will be generated.
Logging
The daemon uses structured logging via tracing. Control the log level with the RUST_LOG environment variable:
# Default (info level)
tesseras-daemon
# Debug logging
RUST_LOG=debug tesseras-daemon
# Only show warnings and errors
RUST_LOG=warn tesseras-daemon
# Debug for DHT, info for everything else
RUST_LOG=info,tesseras_dht=debug tesseras-daemon
Shutting down
Press Ctrl+C to initiate graceful shutdown. The daemon will:
- Stop accepting new connections
- Finish in-flight operations (up to 5 seconds)
- Close all QUIC connections
- Exit cleanly
Firewall
The daemon communicates over UDP port 4433 (QUIC). If you’re behind a firewall, ensure this port is open for both inbound and outbound UDP traffic.
# Example: Linux with ufw
sudo ufw allow 4433/udp