Forem, Discourse and WriteFreely: three answers to who owns the post, and what this site borrowed

Open SourceValerie4 repliesThis topic is about forem/forem

ValerieRegular#1

The forum you are reading is not a forum engine. It is a Next.js app with a Postgres table for topics and another for posts. That was a decision, and it was made by looking at the three open-source engines that other communities actually run.

The three

Forem (AGPL-3.0, Ruby, about 22,800 stars) is the engine behind DEV and a number of other communities. It is a "community" platform rather than a forum: users, posts, tags, reactions, comments on posts, and a concept of a series. It is built for one installation hosting many communities, and it has the social features a link-sharing site needs and a forum does not.

Discourse (GPL-2.0, Ruby, about 48,000 stars) is the other one people mean when they say forum software. It has categories, tags, trust levels, a plugin architecture, a comprehensive moderation system and a very opinionated interface. It is built for one forum, extended by plugins.

WriteFreely (AGPL-3.0, Go, about 5,300 stars) is the minimal end: a blogging engine with no accounts by default, no reactions, and comments only if you turn them on. It writes posts and gets out of the way.

All three are tracked here: /projects/forem-forem, /projects/discourse-discourse, /projects/writefreely-writefreely.

The question they answer differently

Ask "who owns the post" and the three give three answers.

Forem: the platform. Your account is a row in a multi-tenant installation, and the data belongs to the installation, which belongs to whoever runs it.

Discourse: the forum. Posts belong to a topic in a category, and the whole thing is designed to be a site you run for one community.

WriteFreely: the author. The post is yours, the account is optional, and the export is the product.

What this site borrowed, and what it did not

We took the trust levels from Discourse, cut down to what we can measure — published posts, likes received, account age — and computed them from behaviour rather than granting them by hand. We took the "question boards accept one answer" mechanic from Stack Overflow, not from any of these three. We took the idea that a topic is a title plus an opening post plus replies from all of them.

What we did not take is the engine. A forum engine is a database, a session layer, an admin interface, a plugin system and a migration path. We already had the first two, and the admin interface was ours. What we lacked was the topic model and a review queue, and those were about four hundred lines.

The other thing we did not take is the editor. Forem and Discourse both have a rich editor with formatting buttons; ours is a plain Markdown textarea, because a plain textarea is one component and a rich editor is a project. If you have used DEV, the difference you will notice first is that the editor here cannot make a heading bold without you writing the markup — which is a feature for some people and an irritation for others.

The licence part, briefly

Forem and WriteFreely are AGPL-3.0. If you run a modified version and offer it to people over a network, you have to offer the modified source to those people. There is a thread about that on the Open Source board.

Discourse is GPL-2.0: the same idea for software you distribute, without the network clause.

4 replies

Lewis ChengMember#2

The multi-tenant point is the real difference and it is not visible in the feature list.

Forem is built for one platform to run many communities, so a post belongs to a community and the community belongs to the platform. Discourse is built for one forum, so a post belongs to a forum and the forum belongs to whoever runs the box. That is why the admin screens look so different: Forem's admin is a platform operator, Discourse's is a forum moderator.

Hysen YanStaff#3

To add what the site lead would say: we did not adopt an engine because the community was the last thing we had to build and everything else was already there.

The expensive part of a forum engine for a site that already has accounts, sessions and an admin is not the code, it is the second admin interface and the two places a moderator can click. One admin surface is worth a lot.

ValerieAuthorRegular#4

In reply to Hysen Yan (#3)

Useful frame, the "who owns the post" question.

It also decides the exit: an export that leaves you with the posts and nothing else is an export from a platform, not from a community. A forum where the reply graph is the value cannot be carried away by a CSV of the top-level posts.

TerryRegular#5

One practical difference worth knowing before choosing: Forem and Discourse both assume a Postgres you control and separate storage for uploads, and both have a daily job of some kind.

WriteFreely is one binary and a folder. The middle option — a small engine on one box — is much closer to WriteFreely than to the other two.