No updates detected yet. GitHub releases will appear here.
phpBB-era discourse, 2026 substrate. Implementation of the plato forum
翻訳待ち
Loading the full README.
Read the full README ↗plato is a forum. Reddit-shaped (subs, threads, votes, mods). Every sub is its own universe — the mod is its owner, the operator is a facilitator who runs the lights, not a referee for sub-level disputes. Every mod action lands in a public log; the community can reverse soft removals via votes; if a mod goes rogue, you fork the sub. People leave the mod, not the platform.
The modern web has trained us to accept that what you see isn't what you get — algorithmic feeds, tracking pixels, shadowbans, "for you" everywhere. plato runs upstream: what you see is what you get. Chronological feed, public modlog, posts as plain markdown on disk. The visible truth is the only truth.
Plain text, loads anywhere. Markdown for posts, hyperlinks for everything else. No image / video hosting; image markdown becomes a clickable link. Renders on any device, any connection, any decade.
Post in any language. Every Unicode script the browser can render — Arabic, Hebrew, Persian, Urdu, Chinese, Japanese, Korean, Cyrillic, Greek, Devanagari, Tamil, Bengali, Thai, anything. Right-to-left scripts auto-flip per paragraph; mixed-script posts render each block in its own direction. The forum's chrome (header, action pills, modlog labels) stays in plato's English voice — post any language, the UI speaks one.
Magic-link sign-in, no identity lock. Click an emailed link, you're in — no password, no profile, no captcha. Email is hashed on receipt and never stored; only a one-way fingerprint scoped to this site remains. Same email on two plato instances = two unrelated pseudonyms.
Public modlog, symmetric community recourse. Every mod action — soft removal, hard removal, ban, transfer — lands in /sub/<name>/modlog for everyone to see.
Members aren't passive: 3 distinct flags auto-collapse a target for review; enough upvotes after a soft removal auto-lifts it. The mod doesn't have to be convinced — the community can overrule.
Subs that go quiet go read-only, not zombie. No mod activity for 30 days (with a 28-day warning banner) → sub becomes read-only. Any current mod flips it back. The operator never assigns mods or unfreezes a sub. Communities reactivate themselves or fork a successor. Net effect: a "lawful order to install a chosen mod" has no admin path to attach to.
One mod dashboard, one public audit. /modlog has three modes: open (pending flags, decide inline), inbox (current state), audit (every event flat, instance-wide, public, no login).
Per-sub /sub/<name>/modlog is public too. Audit by default beats trust by default.
RSSvp — feeds, not notifications. The whole instance publishes /rss (public firehose, latest 50 across every sub); every sub publishes /sub/<name>/rss; each logged-in user gets two token-gated personal feeds (/u/<token>/subs.rss for subs they follow; /u/<token>/rss adds replies + mod actions on their content). The home page's one rssvp link points anonymous readers at the public firehose and logged-in readers at their personal feed.
Drop the URLs into NetNewsWire / Miniflux / FreshRSS. No app, no push, no algorithm.
Plato will never email you about activity — magic-link login is the only outbound mail, deliberately.
Your data is yours from day one. Posts are plain .md files on disk; the database is an index, regenerable.
Request a personal archive from /memlog (no tenure gate) or a full sub archive from /sub/<name>/manage (mod or 60-day subscriber). Both are signed .tar.gz with markdown + JSON + an Ed25519 sig + optional OpenTimestamps proof — readable with cat, verifiable with ots, no plato install required.
Sub archives import into any other plato instance via URL paste.
You pick the feed. Home: Posts / Comments tabs, sort by new / old / top / hot, filter by 24h / week / all. Each sub keeps its own color so feeds are scannable. No algorithm decides what you see — there isn't one to game.
Runs on a $20/year VPS. One Node process, one SQLite file, one HTTP port. No build step, no frontend framework, no clustering.
Tested on RackNerd (~$20/year KVM, port 25 + PTR via support ticket); Hetzner / OVH / Linode / Vultr also work. Backup = bundled node:sqlite snapshot + tar (no system sqlite3 needed); healthcheck = curl /healthz. Apache 2.0, fork without asking.
Decisions, not roadmap items:
Lemmy is the open-source Reddit clone most often suggested. Same shape, different bet:
| Lemmy | plato | |
|---|---|---|
| To run it | 5 services + database server, container setup | One program, one file, two commands on a cheap VPS |
| Sign in | Username + password (recovery, 2FA, CAPTCHA) | Click an emailed link, address forgotten |
| Privacy of your email | Kept on file, same identity across sites | One-way fingerprint, different pseudonym per site |
| Federation + image hosting | Yes (cross-server protocol, server caches strangers' images) | No — one site, links only |
| If the operator goes bad | Move to another federated instance | Fork the code + your archive, run your own |
This is the beginning of the README. Read the rest at the original. Read the full README ↗