When I started writing my blog I realized that I wanted to add comments. I considered using something like Disqus but was concerned by the number of ads I have heard they serve when you aren’t using an ad-blocker. I use an ad-blocker so I hadn’t seen that directly (at least not in recent memory) but given the choice I’d rather limit the intrusiveness of ads. With that in mind I looked for self-hosted comment systems to see what options there were.

The Criteria

There were a few things I wanted out of the comment system.

  • Lightweight to run. I didn’t want to find myself running a Discourse instance for a small blog that will never benefit from that large of an environment. If I get to the point where I am interacting that much via comments I might reconsider.
  • Able to match theming of the blog or at least support both Dark and Light mode.
  • Comment threading
  • Comment moderation/approval
  • Option for Anonymous as well as registered users.

The Options

After researching on Reddit, DuckDuckGo, and Google and discussion options with Claude I was able to find a handful of systems worth considering. The below aren’t the only options I saw or considered but the ones that were tempting for one reason or another.

Utterances

On the one hand using GitHub Issues as comments seems like an great idea. You add the app to your repository and then add the appropriate JavaScript to your blog and everything gets tied together. If I were running everything on GitHub Pages this would probably have been very high up my list of options.

Unfortunately my blog isn’t hosted on GitHub pages and the blog repo itself isn’t on GitHub. In addition I didn’t want to absolutely force commenters to use GitHub

Remark42

Lightweight self-hosted via Docker/Kubernetes made this a very tempting choice. Social Login meant that users could authenticate without having to create a new account. The lack of a central admin dashboard isn’t a significant drawback, but does mean monitoring comments for spam could be more difficult.

The Decision

Comentario

A fork of Commento that is more actively maintained based on my research.

It deploys as a Docker container which means it works perfectly in Kubernetes and uses PostgreSQL as the backend which means I didn’t need to do anything special1 to get it working. Social Login as well as Local Login (email+password) and anonymous commenting options meant no concerns with forcing people to create new accounts or even identify themselves while the Spam Detection integration (Perspective API and API Layer Spam Checker) and a centralized Admin interface make for convenient comment management. Comentario also supports Akismet, but their licensing is only free for personal blogs, and I do not want that to limit any ideas I come up with in the future.

In the end I only enabled the Github, Gitlab, and Google social logins since I had accounts on those platforms and the configuration steps were straightforward. I haven’t used X/Twitter or Facebook in several years and LinkedIn OAuth requires creating a LinkedIn page for the application.


  1. I had to do the usual steps of creating the database, creating the user, making the user the database owner then putting the password into my Infisical secret store. This is a common requirement for database backed applications. ↩︎