- Description:
- Decentralized pastebin built on tesseras-dht
- Owner:
- murilo ijanc'
- Last Change:
- Clone URL:
ssh://anon@got.tesseras.net/tesseras-paste
Commit Briefs
Add chunked paste support for content up to 1.44 MB
Large pastes are split into 8 KiB chunks on the client side, each stored separately in a dedicated chunks/ directory. A version-2 manifest paste lists the chunk hashes and is announced to the DHT; chunks replicate via periodic republish with per-put throttling to avoid rate-limit bans. - New PUTC/PUTM protocol commands for chunks and manifests - Client-side chunking avoids O(n^2) base58 on large content - HTTP handler reassembles chunks directly from store - DHT sync routes incoming chunks to chunks/ directory - Republish interval reduced to 5 min with 200ms throttle - tp.1 updated with new 1.44 MB limit
Bump version to 0.1.3, update tesseras-dht to 0.1.4 (tags/v0.1.3)
- Block marker on delete prevents DHT re-import - Remote delete propagation via delete_callback - New index page with project info and man page links - Fix lookups status order (started/completed)
Bump version to 0.1.2, update tesseras-dht to 0.1.3 (tags/v0.1.2)
Document -v flag in tp(1) and tpd(1) man pages (tags/v0.1.1)
Bump version to 0.1.1, update tesseras-dht to 0.1.2 (fix/rejoin-bootstrap)
Add automatic re-join and -v flag for verbose logging
When the routing table drops to zero peers, the daemon now re-joins bootstrap nodes every 60s, unbanning their addresses first so replies are not silently discarded. Both tp and tpd accept -v for debug-level output without needing RUST_LOG environment variable.
Add CHANGELOG.md for 0.1.0 (tags/v0.1.0)
Update README, bump tesseras-dht to 0.1.1, add project docs
- Rewrite README with features, usage, and links - Bump tesseras-dht dependency from 0.1.0 to 0.1.1 - Add CODE_OF_CONDUCT.md and SECURITY.md
Limit stdin read in tp, bound protocol drain, document Arc leak
- tp: limit stdin to 64 KiB + 1 byte to reject oversized pastes early without unbounded memory allocation - daemon: bound the oversized-line drain to MAX_LINE_SIZE so a client without newlines cannot block beyond the read timeout - tpd: document intentional Arc::into_raw leak in signal handler
Branches
Tree
README.md
# Tesseras-Paste A decentralized pastebin built on [tesseras-dht](https://crates.io/crates/tesseras-dht). Pastes are encrypted client-side, distributed across the DHT, and served over HTTP. ## Features - End-to-end encrypted pastes (XChaCha20-Poly1305) - Decentralized storage via Kademlia DHT - NAT traversal (hole-punching and proxy relay) - HTTP serving with content-key URLs - TTL-based expiry and pinning - Public (unencrypted) paste mode - OpenBSD `pledge(2)` sandboxing ## Binaries **tpd** — daemon that runs a DHT node, stores pastes, and serves HTTP. ``` usage: tpd [-p port] [-d dir] [-s sock] [-w http_port] [-g] [-n] [-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) ``` **tp** — CLI client that talks to the daemon over a Unix socket. ``` 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 ``` ## Quick start ```sh # Start the daemon tpd -p 4433 -w 9999 -d /var/tesseras-paste # Store a paste echo "hello" | tp put # => Ey2rNiNukhNpqUouaSnnZwTtCgeCgMx2FrCuMr3whBxx # Retrieve it tp get Ey2rNiNukhNpqUouaSnnZwTtCgeCgMx2FrCuMr3whBxx ``` ## Links - [Website](https://tesseras.net) - [Source code](https://got.tesseras.net/?action=summary&path=tesseras-paste.git) (primary) - [Source hut mirror](https://git.sr.ht/~ijanc/tesseras-paste) - [GitHub mirror](https://github.com/ijanc/tesseras-paste) ## License ISC — see [LICENSE](LICENSE).
