commit - 01c17c68277ff88fab812920732d9bbe9e6bb571
commit + 4cfc323b7ca5534553ca90e92dae3e0f8c8923e8
blob - 31e9fd6b158eb18f32cb7b6585cb86d22860c740
blob + e07f8808df0a6c97e610b5b0320c4554efaca249
--- index.html
+++ index.html
╚═╝ ╚══════╝╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝
</pre>
-<p style="text-align:center"><a href="#about">About</a> | <a href="#license">License</a> | <a href="#contact">Contact</a></p>
+<p style="text-align:center"><a href="#packages">Packages</a> | <a href="#license">License</a> | <a href="#contact">Contact</a></p>
<blockquote style="text-align:center">
<p><em>"Your voice matters — even when no one knows your name."</em></p>
</blockquote>
-<h2 id="about">About</h2>
+<h2 id="packages">Packages</h2>
-<p>Every platform you use today has an owner. Someone who reads your posts before
-you publish them. Someone who decides what you can say, who you can reach, and
-whether your account exists tomorrow.</p>
-
-<p>Tesseras is a peer-to-peer social network with no central server, no accounts
-to ban, and no algorithm deciding what you see. You publish markdown content
-directly to an overlay network. Others discover it through a distributed hash
-table — no middleman, no moderation queue, no terms of service.</p>
-
-<p>You can be pseudonymous, with a cryptographic identity that proves authorship
-without revealing who you are. Or you can be fully anonymous — no identity at
-all, just words.</p>
-
-<h3>How It Works</h3>
-
-<p>Nodes connect directly over QUIC, forming a self-organizing network. Content
-is addressed by its BLAKE3 hash — immutable and verifiable. Communities are
-cryptographic zones, not corporate property. Names are local petnames, not a
-global registry someone controls.</p>
-
-<p>There is no blockchain. No tokens. No incentive layer. Nodes relay content for
-each other because that is how the network works.</p>
-
-<h3>Why "Tesseras"?</h3>
-
-<p>A <em>tessera</em> is a small piece of stone or glass used to compose a mosaic.
-Individually simple. Individually durable. But together, they form something
-larger. Some Roman mosaics made of tesserae are still intact after two thousand
-years.</p>
-
-<p>Each post in the network is a tessera — a small, self-contained fragment.
-The network is the mosaic, assembled piece by piece, by many hands.</p>
-
-<h2 id="inspiration">Standing on the Shoulders of Giants</h2>
-
-<p>Tesseras doesn't exist in a vacuum. It builds on decades of work by projects
-that proved decentralization is not just possible — it works.</p>
-
<ul>
- <li><a href="https://geti2p.net/">I2P</a> — anonymous overlay network with garlic routing and a Kademlia-based NetDB</li>
- <li><a href="https://ipfs.tech/">IPFS</a> — content-addressed distributed storage over a Kademlia DHT</li>
- <li><a href="https://www.gnunet.org/">GNUnet GNS</a> — decentralized name system (RFC 9498), direct ancestor of Tesseras TNS</li>
- <li><a href="https://scuttlebutt.nz/">Scuttlebutt</a> — P2P social with append-only logs, gossip replication, and Ed25519 feeds</li>
- <li><a href="https://nostr.com/">Nostr</a> — event-based social protocol with Ed25519 identities</li>
- <li><a href="https://iroh.computer/">Iroh</a> — QUIC-based P2P with relay fallback and hole punching</li>
- <li><a href="https://veilid.com/">Veilid</a> — P2P framework with DHT and encrypted routing</li>
- <li><a href="https://man.openbsd.org/relayd">OpenBSD relayd</a> — reference for the daemon/control privilege separation architecture</li>
- <li><a href="https://man.openbsd.org/unwind">OpenBSD unwind</a> — inspiration for the local DNS resolver design</li>
- <li><a href="https://briarproject.org/">Briar</a> — censorship-resistant messaging over Tor and Bluetooth</li>
- <li><a href="https://retroshare.cc/">RetroShare</a> — friend-to-friend encrypted forums, channels, and chat</li>
- <li><a href="https://join-lemmy.org/">Lemmy</a> — federated Reddit-like forum, moderation model reference</li>
+ <li><a href="tesseras-dht.html">tesseras-dht</a> — NAT-aware Kademlia DHT library for Rust</li>
+ <li><a href="tesseras-paste.html">tesseras-paste</a> — decentralized encrypted pastebin built on tesseras-dht</li>
</ul>
<h2 id="contact">Contact</h2>
blob - /dev/null
blob + b8ea4baa86a52455cf76984a49d1d05aa9293ee5 (mode 644)
--- /dev/null
+++ tesseras-dht.html
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="theme-color" content="#ffffff" media="(prefers-color-scheme:light)">
+ <meta name="theme-color" content="#121212" media="(prefers-color-scheme:dark)">
+ <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90' font-family='sans-serif' font-weight='bold'>T</text></svg>">
+ <meta name="Description" content="tesseras-dht: NAT-aware Kademlia DHT library for Rust.">
+
+ <meta property="og:url" content="https://tesseras.net/tesseras-dht.html">
+ <meta property="og:title" content="tesseras-dht - NAT-aware Kademlia DHT">
+ <meta property="og:site_name" content="Tesseras">
+ <meta property="og:description" content="tesseras-dht: NAT-aware Kademlia DHT library for Rust.">
+
+ <title>tesseras-dht - NAT-aware Kademlia DHT</title>
+
+ <link href="styles.css" rel="stylesheet" type="text/css">
+</head>
+<body>
+<p><a href="/">← tesseras.net</a></p>
+
+<h1>tesseras-dht</h1>
+
+<p>A NAT-aware Kademlia DHT library for Rust, designed for decentralized
+peer-to-peer networking. It provides distributed key-value storage with
+built-in NAT traversal, reliable transport, and Ed25519 authentication.</p>
+
+<h2>Features</h2>
+
+<ul>
+ <li>Distributed key-value storage (iterative FIND_NODE, FIND_VALUE, STORE)</li>
+ <li>NAT traversal via DTUN hole-punching and proxy relay</li>
+ <li>Reliable Datagram Protocol (RDP) with 7-state connection machine</li>
+ <li>Datagram transport with automatic fragmentation/reassembly</li>
+ <li>Ed25519 packet authentication</li>
+ <li>256-bit node IDs (Ed25519 public keys)</li>
+ <li>Rate limiting, ban list, and eclipse attack mitigation</li>
+ <li>Persistence and metrics</li>
+ <li>OpenBSD (kqueue) and Linux (epoll) support</li>
+</ul>
+
+<h2 id="download">Download</h2>
+
+<p>Current version: <strong>0.1.1</strong></p>
+
+<p>Source tarballs and signatures are available at
+<a href="https://tesseras.net/pub/tesseras-dht/">tesseras.net/pub/tesseras-dht/</a>.</p>
+
+<h3>Verify with signify</h3>
+
+<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">$ signify -Vp tesseras.pub -m tesseras-dht-0.1.1.tar.gz -x tesseras-dht-0.1.1.tar.gz.sig
+Signature Verified</pre>
+
+<h3>Verify with SHA256</h3>
+
+<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">$ sha256 tesseras-dht-0.1.1.tar.gz
+$ cat tesseras-dht-0.1.1.tar.gz.sha256</pre>
+
+<p>Compare the two outputs. They must match.</p>
+
+<h3>Install from crates.io</h3>
+
+<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">$ cargo add tesseras-dht</pre>
+
+<h2 id="source">Source Code</h2>
+
+<ul>
+ <li><a href="https://got.tesseras.net/?action=summary&path=tesseras-dht.git">GoT</a> (primary)</li>
+ <li><a href="https://git.tesseras.net/tesseras-dht/">Git mirror</a></li>
+ <li><a href="https://crates.io/crates/tesseras-dht">crates.io</a></li>
+ <li><a href="https://docs.rs/tesseras-dht/latest/tesseras_dht/">docs.rs</a></li>
+</ul>
+
+<h2 id="license">License</h2>
+
+<p>ISC — see <a href="https://got.tesseras.net/?action=blob&path=tesseras-dht.git&name=LICENSE">LICENSE</a>.</p>
+</body>
+</html>
blob - /dev/null
blob + f1ac6f3dd6799534e20856d47b360475ee20b383 (mode 644)
--- /dev/null
+++ tesseras-paste.html
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="theme-color" content="#ffffff" media="(prefers-color-scheme:light)">
+ <meta name="theme-color" content="#121212" media="(prefers-color-scheme:dark)">
+ <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90' font-family='sans-serif' font-weight='bold'>T</text></svg>">
+ <meta name="Description" content="tesseras-paste: decentralized encrypted pastebin built on tesseras-dht.">
+
+ <meta property="og:url" content="https://tesseras.net/tesseras-paste.html">
+ <meta property="og:title" content="tesseras-paste - Decentralized encrypted pastebin">
+ <meta property="og:site_name" content="Tesseras">
+ <meta property="og:description" content="tesseras-paste: decentralized encrypted pastebin built on tesseras-dht.">
+
+ <title>tesseras-paste - Decentralized encrypted pastebin</title>
+
+ <link href="styles.css" rel="stylesheet" type="text/css">
+</head>
+<body>
+<p><a href="/">← tesseras.net</a></p>
+
+<h1>tesseras-paste</h1>
+
+<p>A decentralized pastebin built on
+<a href="tesseras-dht.html">tesseras-dht</a>. Pastes are encrypted client-side
+with XChaCha20-Poly1305, distributed across the DHT, and served over HTTP.
+No central server stores your data.</p>
+
+<h2>Features</h2>
+
+<ul>
+ <li>End-to-end encrypted pastes (XChaCha20-Poly1305)</li>
+ <li>Decentralized storage via Kademlia DHT</li>
+ <li>NAT traversal (hole-punching and proxy relay)</li>
+ <li>HTTP serving with content-key URLs</li>
+ <li>TTL-based expiry and pinning</li>
+ <li>Public (unencrypted) paste mode</li>
+ <li>OpenBSD <code>pledge(2)</code> and <code>unveil(2)</code> sandboxing</li>
+ <li>DNS SRV bootstrap discovery</li>
+</ul>
+
+<h2>Binaries</h2>
+
+<p><strong>tpd</strong> — daemon that runs a DHT node, stores pastes, and serves HTTP.</p>
+
+<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">usage: tpd [-g] [-n] [-p port] [-d dir] [-s sock] [-w http_port] [-b host:port]
+
+ -p port UDP port (0 = random)
+ -d dir data directory
+ -s sock Unix socket path
+ -w port HTTP server port
+ -g global NAT (public server)
+ -n no auto-bootstrap (skip DNS SRV)
+ -b host:port bootstrap peer (repeatable)</pre>
+
+<p><strong>tp</strong> — CLI client that talks to the daemon over a Unix socket.</p>
+
+<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">usage: tp [-s sock] <command> [args]
+
+ put [-t ttl] [-p] read stdin, store paste (-p = public, no encryption)
+ get <key> retrieve paste to stdout
+ del <key> delete paste
+ pin <key> pin (never expires)
+ unpin <key> unpin
+ status show daemon status</pre>
+
+<h2>Quick Start</h2>
+
+<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap"># Start the daemon
+$ tpd -p 4433 -w 9999 -d /var/tesseras-paste
+
+# Store a paste
+$ echo "hello" | tp put -p
+Ey2rNiNukhNpqUouaSnnZwTtCgeCgMx2FrCuMr3whBxx
+
+# Retrieve it
+$ tp get Ey2rNiNukhNpqUouaSnnZwTtCgeCgMx2FrCuMr3whBxx</pre>
+
+<h2>Public Gateway</h2>
+
+<p>A public HTTP gateway is available at
+<strong>http://p.tesseras.net/<key></strong>. For example:</p>
+
+<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">http://p.tesseras.net/Ey2rNiNukhNpqUouaSnnZwTtCgeCgMx2FrCuMr3whBxx</pre>
+
+<p>Note: there may be a short delay when retrieving recently created pastes,
+as content needs time to propagate across DHT nodes.</p>
+
+<h2 id="download">Download</h2>
+
+<p>Current version: <strong>0.1.0</strong></p>
+
+<p>Source tarballs and signatures are available at
+<a href="https://tesseras.net/pub/tesseras-paste/">tesseras.net/pub/tesseras-paste/</a>.</p>
+
+<h3>Verify with signify</h3>
+
+<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">$ signify -Vp tesseras.pub -m tesseras-paste-0.1.0.tar.gz -x tesseras-paste-0.1.0.tar.gz.sig
+Signature Verified</pre>
+
+<h3>Verify with SHA256</h3>
+
+<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">$ sha256 tesseras-paste-0.1.0.tar.gz
+$ cat tesseras-paste-0.1.0.tar.gz.sha256</pre>
+
+<p>Compare the two outputs. They must match.</p>
+
+<h3>Install from crates.io</h3>
+
+<pre style="text-align:left;font-size:0.9em;white-space:pre-wrap">$ cargo install tesseras-paste</pre>
+
+<h2 id="source">Source Code</h2>
+
+<ul>
+ <li><a href="https://got.tesseras.net/?action=summary&path=tesseras-paste.git">GoT</a> (primary)</li>
+ <li><a href="https://git.tesseras.net/tesseras-paste/">Git mirror</a></li>
+ <li><a href="https://crates.io/crates/tesseras-paste">crates.io</a></li>
+ <li><a href="https://docs.rs/tesseras-paste/latest/tesseras_paste/">docs.rs</a></li>
+</ul>
+
+<h2 id="license">License</h2>
+
+<p>ISC — see <a href="https://got.tesseras.net/?action=blob&path=tesseras-paste.git&name=LICENSE">LICENSE</a>.</p>
+</body>
+</html>