tinyweb-forum/README.md

59 lines
2.3 KiB
Markdown

# tinyweb-forum
A decentralized link-sharing forum for [TinyWeb](https://git.derickphan.com/lichenblankie/tinyweb). Share URLs and discuss them with other TinyWeb instances over the Reticulum mesh.
## Install
```bash
pip install tinyweb-forum
```
Enable the forum in TinyWeb's customize page (`/style`).
## Development
```bash
git clone https://git.derickphan.com/lichenblankie/tinyweb-forum
pip install -e .
```
## How it works
- Each TinyWeb instance stores forum threads and posts in its own `forum.db`
- Instances sync content with each other over RNS every 5 minutes
- Authors are identified by a short pseudonymous hash (no names, no accounts)
- No global server, no algorithms, no tracking
## Features
- **Threads** — share a URL or start a discussion with text
- **Replies** — reply to threads, with inline URL extraction and "+ save" links
- **Upvotes** — toggle upvote/downvote, scores propagate via sync
- **Edit** — edit your own threads (new version syncs to peers)
- **Retract** — retract your own threads and posts (retraction signal gossips to peers)
## Moderation
All moderation is local — you control your view:
- **Block author** — `[block]` link on posts and thread meta hides all content from that identity across your instance
- **Auto-block** — when 3+ of your peers have blocked the same identity, it's auto-blocked for you too (configurable threshold)
- **Mute thread** — hide a thread from the listing
- **Keyword filters** — hide threads matching keywords
- **Instance sync** — choose which peers to sync with; unsync at any time
## Sync
- Forum instances auto-discover each other via RNS announces
- Content is exchanged as JSON over RNS links every 5 minutes
- Peer discovery propagates through gossip — each instance shares its known peers
- At scale (>20 peers), sync uses random gossip: each cycle picks 20 random peers instead of all peers
- This ensures content converges epidemically regardless of network size (content reaches all nodes within ~O(log N) cycles)
- Block lists and retractions are gossiped alongside content
- Only new/updated content is transferred (timestamp-based)
- Auto-discovery can be disabled in the moderation page
## Storage
- Threads are pruned after 30 days by default (configurable in moderation page)
- Set retention to 0 to keep everything indefinitely