The standard advice for “I need a forum” is Discourse. The standard outcome is a 2 GB RAM bill, two containers, a Redis instance, and a Sidekiq process — for a community of 400 people discussing bicycle routes. Discourse is excellent software aimed at large communities with paid ops staff. It is also wildly oversized for a club, a product’s user base, an internal Q&A board, or a research group.
There is a quieter tier of forum software built for exactly that gap, and three of them are still actively maintained in 2026: Lobsters (4,855 GitHub stars, Rails), Misago (2,781 stars, Django) and FlaskBB (2,666 stars, Flask). All three are database-plus-web-app stacks you can run on a single 1 GB VPS. This guide compares them on the things that actually decide a forum deployment: moderation tooling, search, upgrade path, and how much of your evening the install eats.
TL;DR: Quick Verdict
- Lobsters is a link-aggregator, not a general forum. Pick it if you want a Hacker News-style community with tags, karma and hats — and you accept that it is opinionated, invite-oriented, and has no plugin system.
- Misago is the most complete general-purpose forum of the three: Django, PostgreSQL, Redis, a real admin panel, role-based permissions, private threads, and moderation queues. Pick it for a public community that needs modern UX.
- FlaskBB is the smallest and most hackable: Flask, SQLite by default, a formal plugin and theme system. Pick it when you want to extend the forum yourself or run it on 512 MB.
One-line rule: link aggregation → Lobsters; a real community forum → Misago; a forum you intend to modify → FlaskBB.
At-a-Glance Comparison
| Dimension | Lobsters | Misago | FlaskBB |
|---|---|---|---|
| GitHub stars | 4,855 | 2,781 | 2,666 |
| Language / framework | Ruby on Rails | Python / Django | Python / Flask |
| License | Custom permissive (see LICENSE) | GPL-2.0 | Custom (see LICENSE) |
| Last push | 2026-10-25 | 2026-10-24 | 2026-10-25 |
| Database | MySQL / MariaDB | PostgreSQL (required) | SQLite, PostgreSQL, MySQL |
| Cache / queue | memcached | Redis | Redis (optional) |
| Frontend | Server-rendered ERB | Django templates + React | Jinja2 templates |
| Admin panel | Minimal, DB-driven | Full admin panel | Flask-Admin based |
| Plugin system | None | Django apps (fork-level) | Entry-point plugins |
| Theme system | CSS variables, fork | Templates + themes | Installable themes |
| Search | Basic DB queries | PostgreSQL full-text | SQLite / Postgres / Whoosh backends |
| Private messages | No | Private threads | Conversations plugin |
| Federation (ActivityPub) | No | No | No |
| Typical RAM | ~350–600 MB | ~500–900 MB | ~150–300 MB |
Decision Matrix: Pick in 10 Seconds
| Your situation | Recommended | Why |
|---|---|---|
| Tech-news-style link sharing with voting | Lobsters | Tags, karma, hats, hot ranking are core, not plugins |
| Public community with categories and roles | Misago | Permissions, moderation queue, private threads built in |
| 200-member club or class forum | FlaskBB | SQLite plus one process is enough |
| You want to write custom features | FlaskBB | Plugin entry points and themes are first-class |
| You need a moderation audit trail | Misago | Approval queues and reports are built in |
| Runs on 512 MB alongside other services | FlaskBB | Smallest footprint of the three |
| You refuse to run PostgreSQL | FlaskBB | SQLite and MySQL are supported |
| You want the codebase as a Rails reference | Lobsters | Compact, readable Rails application |
Lobsters — An Opinionated Link Aggregator, Not a Forum
Lobsters was written in 2012 to run lobste.rs and has been maintained continuously since. It is a Rails application with a deliberately narrow feature set: submit a link or text post, tag it, vote, comment in threads, earn karma, receive hats. There are no categories, no private messages, no plugin API, and no federation.
The upstream repository ships a development Compose file that reflects that minimalism — this is the real file, not a reconstruction:
| |
Note what is missing: no database service, no cache service. The upstream stack assumes MySQL/MariaDB and memcached reachable from the container, so a production deployment adds them yourself:
| |
Then initialise the schema and create the first account:
| |
Lobsters’ strengths are cultural as much as technical. The hot-ranking algorithm, tag filtering, and invitation flow produce a specific kind of community — smaller, more technical, less tolerant of low-effort posting. If that is what you want, nothing else in this article comes close. If you want categories, member groups, or a mobile app, look elsewhere.
The weakness is operational: no plugin system means every customisation is a fork, and merging upstream changes across a fork is a monthly chore. There is also no built-in spam defence beyond invitation control.
Misago — The Most Complete Forum of the Three
Misago is a Django forum that has been in development for over a decade and reached a genuinely polished state. It requires PostgreSQL and Redis, and gives you: categories with per-role permissions, thread and post approval queues, report handling, private threads, user profiles with avatars, read-state tracking, and a modern React-powered interface with server-rendered fallbacks.
Its repository ships a Compose file — and the upstream file carries a warning you must read before copying it:
| |
Take the upstream warning literally. runserver is a development server: single-threaded, no static file serving, no request buffering. For production, keep the same services but replace the command and put a real proxy in front:
| |
First-run setup is two management commands:
| |
What makes Misago the strongest general-purpose choice is the moderation model. Reports, approval queues, per-category permissions, and role inheritance are part of the product rather than an add-on. For a public community where moderation is the main daily task, that difference is worth more than any performance metric.
Trade-offs: PostgreSQL is mandatory (a hard blocker for SQLite-only hosts), the stack needs Redis, and customisation happens at the Django-app level — meaning you maintain a fork if you change models.
FlaskBB — The Hackable Minimalist
FlaskBB is a classic Flask application: SQLAlchemy models, Alembic migrations, Jinja2 templates, and a formal system of installable plugins and themes. It defaults to SQLite, which means docker compose up on a fresh box produces a working forum without any external database.
The upstream repository keeps its container definitions under docker/, including a development stack and a release stack. The development stack is explicit about its defaults:
| |
Bring it up with the documented command:
| |
Note DEBUG: true and MAIL_SERVER: mailpit — those are development values. For production you flip DEBUG off, point MAIL_SERVER at a real relay, replace SECRET_KEY, and point DATABASE_URI at PostgreSQL if you expect concurrency beyond a few dozen simultaneous readers.
FlaskBB’s real advantage is extensibility. Plugins register through entry points, so installing a .whl in the container adds features without a fork. The first-party set covers private conversations, a portal front page, and social login; third-party plugins add topic feeds, signatures, and polls. Forums built by developers for their own project’s community are usually FlaskBB’s sweet spot.
Upgrades are the standard Flask dance:
| |
Pin your plugin versions. A plugin built against an older Alembic head is the single most common cause of a failed upgrade, and the error messages are unhelpfully vague.
Head-to-Head: The Differences That Decide Real Deployments
Moderation. Misago wins, clearly. Approval queues, reports, role inheritance, and per-category permissions are product features. Lobsters has moderator and tag-editor privileges, but the tooling is minimal and deliberately so. FlaskBB sits in between: reports and moderation exist, and you can extend them.
Search. Misago uses PostgreSQL full-text search and behaves predictably on tens of thousands of posts. FlaskBB lets you choose between SQLite, PostgreSQL and Whoosh backends — the SQLite backend is fine for small boards and degrades on large ones. Lobsters’ search is basic query filtering over titles and tags.
Upgrades. All three are migration-based (Rails migrations, Django migrations, Alembic). FlaskBB adds plugin-version coupling. Lobsters adds fork-merge pain. Misago is the most boring to upgrade, which in forum software is a compliment.
Memory. Measured realistically on a single container with light traffic: FlaskBB ~150–300 MB, Lobsters ~350–600 MB, Misago ~500–900 MB. None of them needs 2 GB, which is the entire point.
Community shape. This is the one thing benchmarks cannot answer. Lobsters produces a link-aggregation culture. Misago and FlaskBB are neutral and take on the culture of whoever moderates them.
Deployment Pitfalls That Will Bite You
- Running Misago’s dev Compose in production. The upstream file says so in a comment.
runserverplusDEBUGon a public IP is a security incident waiting to happen. - Forgetting the static files step. Django needs
collectstaticand a proxy that serves/static/and/media/; Flask needs an equivalent. Otherwise threads render without CSS and uploads 404. - PostgreSQL without tuning. The default
postgres:15container with 128 MB shared buffers is fine for a hobby board and terrible at 200 concurrent readers. Setshared_buffersandwork_memexplicitly. - Email deliverability. All three send registration and notification mail. Point them at a real relay with SPF and DKIM, or your first hundred registrations land in spam and never return.
- Backups that omit uploads. Database dumps alone lose avatars and attachments. Back up the upload directory and the database together, or restore produces broken threads.
- Lobsters fork drift. Every customisation is a fork. Track upstream with a rebase cadence, or the merge becomes impossible after six months.
- FlaskBB plugin pinning. Record exact plugin versions next to your image tag. An unpinned plugin plus
flaskbb db upgradeis how forums go down at 2 a.m.
If you are still deciding whether a forum is the right shape for your community at all, our Discourse vs Flarum vs NodeBB breakdown covers the heavier tier, and the mailing list comparison covers the email-first alternative. For real-time chat instead of threaded discussion, see Mattermost vs Rocket.Chat vs Zulip.
FAQ
Is Lobsters suitable for a general-purpose forum? No. Lobsters has no categories, no private messages, and no plugin system. It is a link aggregator with voting, tags and hats. Use it when that structure is what you want, and choose Misago or FlaskBB for conventional threaded discussion.
Does Misago really require PostgreSQL? Yes. Misago targets PostgreSQL specifically and uses its features for search and concurrency. SQLite and MySQL are not supported deployment targets.
Can FlaskBB run without Redis? Yes. Redis is used for caching and session-adjacent features; the development stack points at it, but a single-container SQLite deployment works without it, at the cost of some performance and background behaviour.
How many users can these handle on one VPS? With 2 vCPU and 2 GB RAM: FlaskBB comfortably serves a few hundred daily readers on SQLite; Misago handles a few thousand daily readers on PostgreSQL with three gunicorn workers; Lobsters behaves similarly to Misago with lower memory use per request.
Do any of them federate with Mastodon or Lemmy? No. None of the three implements ActivityPub. If federation is a requirement, you need Lemmy, NodeBB with its ActivityPub plugin, or Discourse with plugins — not this tier.
What is the upgrade path from one to another? There is no importer between them. Moving means exporting users, threads and posts from the database and writing a mapping into the target schema. Plan the migration before you launch, not after you have 40,000 posts.
💰 想测试你的市场判断力?我用 Polymarket 做预测市场交易——这是全球最大的预测市场平台,从大选结果到技术监管时间线,什么都可以押注。和赌博不同,这是真正的信息市场:你懂的信息越多,胜率越高。我靠预测技术相关事件的走向已经赚了不少。用我的邀请链接注册:Polymarket.com