Commit Briefs

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


62b68cc461 murilo ijanc

Harden identity key permissions, atomic writes, and HTTP method

- Write identity.key with mode 0600 to prevent other users from reading the Ed25519 private seed - Use destination filename in atomic_write temp path to avoid collisions between concurrent writes to different files - Reject HTTP methods other than GET/HEAD with 405 - Return "Hello Tesseras World" on GET /


b6e3f14ebd murilo ijanc

Add missing pledge promises (drm, prot_exec) and source reference

Add reference to pledgereq[] in /usr/src/sys/kern/kern_pledge.c and include drm and prot_exec that were missing from the list.



71a839341e murilo ijanc

Log socket setup errors in Unix client handler

Warn when set_nonblocking or set_read_timeout fails instead of silently disconnecting the client.


2f1f611bf7 murilo ijanc

Handle HTTP connections in separate threads with cap of 8

A slow connection or DHT lookup (up to 30s) no longer blocks the entire HTTP accept loop. Connections beyond the limit get a 503 response.


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