Commit Briefs

b914f856d6 murilo ijanc

Show chunk progress during large paste uploads (main)


b4228aa74f murilo ijanc

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


75fddf4251 murilo ijanc

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)


18fa0f13f6 murilo ijanc

Bump version to 0.1.2, update tesseras-dht to 0.1.3 (tags/v0.1.2)


660bc943ba murilo ijanc

Document -v flag in tp(1) and tpd(1) man pages (tags/v0.1.1)


441775eedc murilo ijanc

Bump version to 0.1.1, update tesseras-dht to 0.1.2 (fix/rejoin-bootstrap)


4214189961 murilo ijanc

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.


24c3402c9d murilo ijanc

Add CHANGELOG.md for 0.1.0 (tags/v0.1.0)


4c1597e0f2 murilo ijanc

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


290f53c38c murilo ijanc

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

Tags

Tree

.gitignorecommits | blame
.rustfmt.tomlcommits | blame
CHANGELOG.mdcommits | blame
CODE_OF_CONDUCT.mdcommits | blame
Cargo.lockcommits | blame
Cargo.tomlcommits | blame
LICENSEcommits | blame
Makefilecommits | blame
README.mdcommits | blame
SECURITY.mdcommits | blame
deny.tomlcommits | blame
src/
tp.1commits | blame
tpd.1commits | blame

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).