The fast, code-first forum engine. Meith is open-source forum software: self-hosted by default, built on modern TypeScript, and fast enough to run with JavaScript disabled. Threaded discussions, search, permissions, moderation, paid memberships, themes, plugins and an operator CLI — from a single config repo to a server of your own, with no per-member pricing.
npx create-meith my-board
cd my-board && npm install && npm run devThat is a board of your own on http://localhost:3000, serving a realistic fixture dataset from memory — no database, no Docker. The quickstart is this route written out; the introduction is the philosophy behind it.
Deployment has three routes onto your own infrastructure: guided with Coolify for most boards, Docker Compose by hand if you already operate a proxy, or Vercel if you would rather not have a server.
A production board runs four services:
- PostgreSQL stores board data.
- A one-shot migration service updates the schema before startup.
- The web service handles browser and API requests.
- The worker runs scheduled and queued work once a minute.
After deployment, open /install to create the board and its first administrator.
You need Node.js 22 or newer and pnpm 10.
pnpm install
pnpm devpnpm dev starts the community app at http://localhost:3000 in fixture mode, so you can browse the interface without PostgreSQL. See Development before changing data or opening a pull request.
The main workspace applications are:
| Path | Package | Purpose |
|---|---|---|
apps/community |
@meith/web |
The forum application |
apps/worker |
@meith/worker |
Background and scheduled work |
apps/cli |
@meith/cli |
Operator commands |
apps/web |
@meith/site |
meith.dev and the documentation site |
Business capabilities live in packages/. Themes, plugins, examples, deployment files, and documentation have their own top-level directories. Architecture explains the boundaries and request flow.
Start with the task you need to complete:
| Task | Guide |
|---|---|
| See it running locally | Quickstart |
| Install a board | Deployment |
| Configure a board in code | Configuration |
| Move from MyBB or phpBB | Migrating |
| Administer forums and members | Organiser guide |
| Moderate content | Moderator guide |
| Manage paid memberships | Memberships guide |
| Operate the server | Operations |
| Upgrade or recover a board | Upgrading · Disaster recovery |
| Build a theme or plugin | Themes · Plugins |
| Contribute to Meith | Development |
The complete index is in docs/README.md. The website renders these Markdown files directly; there is no separate copy.
The table below is generated from apps/web/content/docs.manifest.json by pnpm site:docs.
| Section | Document | What it answers |
|---|---|---|
| Getting started | getting-started/introduction.md |
The philosophy: server-first pages that work with JavaScript off, a board pinned in a small repository, and a server of your own. Start here to see whether Meith thinks like you do. |
| Getting started | getting-started/quickstart.md |
npx create-meith, and a minute later a board is running on your machine in fixture mode — no database, no Docker, no account with anybody. |
| Getting started | getting-started/deployment/index.md |
The four-service production shape every route deploys, and the chooser: Coolify guided, Compose by hand, or Vercel without a server. |
| Getting started | getting-started/deployment/coolify.md |
From a rented server to a board on your own domain, with Coolify, in about twenty minutes. Written for whichever volunteer drew the short straw. |
| Getting started | getting-started/deployment/docker-compose.md |
The advanced route: Docker Compose, a .env you write, and a reverse proxy you run. Most boards should deploy with Coolify instead. |
| Getting started | getting-started/deployment/vercel.md |
The board on functions: the driver set, the build command that carries the migration, the cron job that replaces the worker, what previews and rollbacks do to your schema — and how to leave again. |
| Configuration & guides | guides/configuration.md |
What the board repository pins — the engine version, the themes, the plugins — and the deliberate line between it and everything organisers run from the browser. |
| Configuration & guides | guides/migrating.md |
The full procedure: what to check first, the import command for each source, what does and does not come across, and what to do after it finishes. |
| Configuration & guides | guides/community/organiser-guide.md |
Running the board from a browser: forums and the organisers' room, the community's name and colours, announcements, members — and handing it all over. |
| Configuration & guides | guides/community/moderation-guide.md |
For the volunteers who keep it civil: the approval queue, reports, tidying threads, warnings and bans — and where each screen lives. |
| Configuration & guides | guides/community/membership-guide.md |
Taking memberships through the board: plans, discount codes, gifting, the memberships desk and the ledger — Dues end to end, without a terminal. |
| Configuration & guides | guides/community/formatting.md |
The composer's toolbar and the syntax behind it: highlighted code, spoilers, mention suggestions, link previews, and placing an attachment inline. |
| Configuration & guides | guides/community/forums.md |
The board's shape and who may do what inside it: the forum tree, a forum's options, how a permission resolves, the matrix, and what a moderator appointment grants. |
| Configuration & guides | guides/community/groups.md |
What a group carries: board-wide permissions, the daily allowances, colours and badges, display groups, the groups a plugin may grant, and the rules that promote members automatically. |
| Configuration & guides | guides/community/antispam.md |
The registration challenge, the limits on pages nobody has signed in to, the three login counters, and the hourly allowances — what each is worth and what it costs a real visitor. |
| Configuration & guides | guides/community/reputation.md |
Members rating each other: what a rating is worth, the four settings, the two that decide between a one-press thanks and a form, and why the totals cannot drift. |
| Configuration & guides | guides/community/search.md |
The four controls over the most expensive thing a visitor can ask for: switching search off without losing the index, the shortest word a query may rest on, and the two different limits on how often. |
| Configuration & guides | guides/community/word-filter.md |
Rewriting words as a page renders, never in the stored post: what a rule is, why a pattern is a literal rather than a wildcard, and exactly which surfaces it covers. |
| Configuration & guides | guides/community/ban-filters.md |
Turning somebody away before an account exists: the three things a filter matches on, why a pattern is a glob rather than a regular expression, and every route into an account that consults one. |
| Configuration & guides | guides/operations/operating.md |
Routine checks, configuration, maintenance commands, backups, recovery, and troubleshooting for a running board. |
| Configuration & guides | guides/operations/monitoring.md |
Liveness versus readiness, the optional Prometheus metrics endpoint and what to alert on, distributed tracing, and shipping logs. |
| Configuration & guides | guides/operations/cookies-and-headers.md |
What the board puts in a visitor's browser and what it tells the browser to refuse: every cookie and why it exists, the nonce Content Security Policy, and the one environment variable that changes it. |
| Configuration & guides | guides/operations/upgrading.md |
Moving a board between versions: the upgrade command, how far you can jump, and the behaviour changes each release brings. |
| Configuration & guides | guides/operations/disaster-recovery.md |
The runbook for the day the server is gone: what recovery consumes, the order of operations from provisioning to DNS, and the rehearsal that turns it from a hope into a plan. |
| Configuration & guides | guides/operations/single-sign-on.md |
Two-factor authentication, federated sign-in and passkeys: what each means for your members, how to configure them, and the record of what has opened an account. |
| Configuration & guides | guides/operations/internationalisation.md |
How a page picks its language, how to add one, and how a theme or plugin ships its own words. |
| Configuration & guides | guides/operations/web-push.md |
Notifications that reach a member who does not have the board open, and the manifest that makes the board installable — what it costs their privacy, and how to turn it on. |
| Configuration & guides | guides/operations/scaling.md |
Running more than one web container: the Redis cache that keeps them coherent, what already scales, and the step-by-step migration from a single-instance board. |
| Configuration & guides | guides/operations/demo-mode.md |
The self-resetting public demo board that runs at demo.meith.dev — what it changes, and how to run one yourself. |
| Customization | customization/first-plugin.md |
The walkthrough from an empty directory to a plugin running inside a board and listed on the marketplace: scaffold, change a hook, test it, install it, publish it. |
| Customization | customization/themes.md |
How to write a theme, what a theme may do, and what the API freeze covers. |
| Customization | customization/plugins.md |
What a plugin is, what it may and may not do, and how a failure is contained. |
| Customization | customization/marketplace.md |
The curated, reviewed feed of plugins and themes: the listing schema, the review bar, the trust it does and does not extend, and how to submit or remove one. |
| Reference | reference/api.md |
Every endpoint, scope and rate limit, generated from the route registry. (generated) |
| Reference | reference/theme-slots.md |
Every slot and every view model, generated from the slot registry. (generated) |
| Reference | reference/plugin-hooks.md |
Every hook and payload, generated from the hook registry. (generated) |
| Reference | reference/performance.md |
The p95 budgets for the hot pages, and what the last recorded run measured against a full-scale board. (generated) |
| Reference | reference/architecture.md |
How Meith fits together: the processes, the layers, the path a request takes, and the extension seams. |
| Reference | reference/mybb-parity.md |
Every place Meith deliberately behaves differently from MyBB, with the reasoning and the cost. Read it before promising anyone a like-for-like move. |
| Reference | reference/phpbb-parity.md |
Where a Meith board imported from phpBB behaves differently from the one it came from — the ACL, warnings, bans, announcements and polls, and a couple of places phpBB's own model already matches Meith's. |
| Working on Meith | contributing/development.md |
Running the board on your own machine, the workspace layout, the commands, and what to do before opening a pull request. |
Run the full repository gate before opening a pull request:
pnpm verifyIt checks workspace invariants, generated references, formatting, dependency boundaries, types, and tests. Do not edit generated references directly; the documentation index identifies them and names their generators.
Meith is distributed under the MIT licence. Use it, modify it, and ship it — including in closed-source and commercial work — provided the copyright notice and permission notice travel with it.
Copyright © 2026 Jordan Harrison and the Meith contributors.