No description
Find a file
2026-06-17 04:43:44 +00:00
.github add CONTRIBUTING.md and issue template 2026-06-09 03:15:55 +00:00
tests auto-discovery toggle, auto-prune with customizable retention 2026-06-05 01:00:47 +00:00
tinyweb_forum mod page: add spacing between save filters and back/status links 2026-06-17 04:43:44 +00:00
.gitignore add SECURITY.md, tighten .gitignore 2026-06-09 03:11:43 +00:00
CONTRIBUTING.md add CONTRIBUTING.md and issue template 2026-06-09 03:15:55 +00:00
LICENSE add AGPLv3 license 2026-06-09 01:10:04 +00:00
pyproject.toml add AGPLv3 license 2026-06-09 01:10:04 +00:00
README.md update README to match TinyWeb style 2026-06-16 05:13:38 +00:00
SECURITY.md add SECURITY.md, tighten .gitignore 2026-06-09 03:11:43 +00:00

tinyweb-forum

A link-sharing forum plugin for TinyWeb. Threads and posts are stored locally and exchanged with other TinyWeb instances over the Reticulum mesh.

Contents

About this project

Code generated by LLMs. Built by one person.

Install

pip install tinyweb-forum

Enable it on TinyWeb's /style page under "Forum".

How it works

  • Threads and posts are stored in ~/.tinyweb/forum.db (separate from TinyWeb's search index)
  • Instances auto-discover each other via RNS announces — no manual setup
  • Sync is manual by default: click "sync now" on the forum page. Auto-sync every 5 minutes is optional (toggle on moderation page)
  • At scale, sync uses epidemic gossip: 20 random peers per cycle, converging within ~O(log N) cycles
  • Authors are identified by a short pseudonymous identity hash (no accounts, no sign-up)
  • Auto-discovery can be disabled in the moderation page
  • Threads are auto-pruned after 30 days (configurable, or set to 0 to keep everything)
  • Moderation is local: block authors, mute threads, keyword filters, and gossip block lists with peers (auto-block after 3 peer reports)

Moderation

All moderation is local — it controls what you see:

  • Block author — hides all content from that identity
  • Auto-block — when 3+ of your peers have blocked the same identity, it blocks for you too
  • Mute thread — hides a thread from the listing
  • Keyword filters — hides threads matching keywords
  • Instance sync — choose which peers to sync with; unsync at any time

Sync

  • Instances discover each other via RNS announces — any forum on the mesh finds you
  • Content is exchanged as JSON over RNS links
  • Manual by default — click "sync now" on the forum listing or moderation page
  • Auto-sync every 5 minutes can be enabled on the moderation page
  • Auto-discovery can be disabled (manual instance add only)
  • Known peers propagate through gossip — each instance shares its peers during sync
  • Block lists and retractions are gossiped alongside content
  • Only new/updated content is transferred (timestamp-based)
  • When >20 peers, each cycle syncs with a random 20 — content converges epidemically

Storage

  • Threads older than 30 days are auto-pruned (configurable on moderation page)
  • Set retention to 0 to keep everything indefinitely
  • Database location: ~/.tinyweb/forum.db

Known rough edges

  • Authors are pseudonymous — no identities, no accounts
  • No rate limiting on forum POST endpoints
  • Retractions are voluntary — peers can ignore them
  • Block gossip can be gamed (requires collusion by 3+ peers on Reticulum)
  • Threads prune after 30 days by default
  • Best-effort maintenance

Security

  • No authentication — The forum inherits TinyWeb's access model. Anyone who can reach the HTTP port (localhost by default) can post, edit, retract, block, and change moderation settings. See TinyWeb's Security section for --bind 0.0.0.0.
  • Retractions are voluntary — Retracting a thread or post sends a signal to peers, but any peer can ignore it. "Retract" is a polite request, not a guaranteed delete.
  • Block gossip can be gamed — Auto-block triggers after 3 peer reports. On Reticulum this requires 3+ real instances to collude, which is impractical at mesh scale, but is not cryptographically enforced.
  • No rate limiting — Forum POST endpoints have no throttling. Low risk since the HTTP port is localhost-only by default.