Skip to content
Go back

Blog Comments: Self-Host or SaaS?

By SumGuy 11 min read
Blog Comments: Self-Host or SaaS?

The Disqus Problem Nobody Warned You About

You installed Disqus in fifteen minutes, called it done, and moved on. Then six months later you ran your site through a privacy analyzer and watched in horror as 47 third-party requests loaded before a single comment rendered. Trackers, retargeting pixels, the whole casino. Disqus is free the same way a gas station hot dog is free — technically, yes, but you’re going to pay for it later.

The page weight alone is offensive. A typical Disqus embed adds 300–400 KB of JavaScript. Your entire homepage loads in 200 KB and Disqus shows up in a trench coat twice that size. Then there are the ads — unless you’re on a paid plan, Disqus will happily serve sponsored content in your comment section that you have zero control over. Your homelab article about Proxmox now has a banner for a mobile game. Congrats.

Here’s the thing though: “don’t use Disqus” is easy advice to give and harder advice to follow when you don’t know what the alternatives actually look like. So let’s fix that.

Full example: Clone the working Compose files at github.com/KingPin/sumguy-examples/tree/main/self-hosting/comment-systems-self-hosted-vs-saas


Why Self-Host in the First Place

If you’re already running containers, adding a comment system is maybe 20 lines of YAML and an afternoon. You get full control over the data, no third-party scripts phoning home, and you’re not subject to whatever pricing change the SaaS vendor decides to roll out next quarter. You’ve already done harder things — you set up WireGuard from a blog post at 11 PM.

The tradeoff is real though: you own the uptime, the backups, and the upgrades. If you have zero tolerance for “the comments are down,” either pick something rock-solid or just go SaaS and be honest with yourself about it.


The Self-Hosted Lineup

Remark42 — The All-Rounder

If you want one recommendation and you want to stop reading: Remark42. It’s a single Go binary, uses BoltDB or SQLite for storage, and ships with social auth (GitHub, Google, Twitter, Facebook, Microsoft), anonymous commenting, and a surprisingly decent admin UI. Memory footprint sits around 30 MB idle. It has spam filtering, image uploads, comment notifications, and a migration tool to import from Disqus if you’re escaping.

The embed is a lightweight JavaScript snippet. It works on any static site including Astro, Hugo, Jekyll — anything that can drop a <script> tag.

docker-compose.yml
services:
remark42:
image: umputun/remark42:latest
container_name: remark42
restart: unless-stopped
ports:
- "8080:8080"
environment:
- REMARK_URL=https://comments.yourdomain.com
- SECRET=your-very-long-random-secret-here
- SITE=your-site-id
- AUTH_GITHUB_CID=your-github-oauth-client-id
- AUTH_GITHUB_CSEC=your-github-oauth-client-secret
- AUTH_GOOGLE_CID=your-google-oauth-client-id
- AUTH_GOOGLE_CSEC=your-google-oauth-client-secret
- AUTH_ANON=true
- ADMIN_SHARED_ID=github_your-github-username
- NOTIFY_EMAIL_SMTP_HOST=smtp.yourdomain.com
- NOTIFY_EMAIL_SMTP_PORT=587
- NOTIFY_EMAIL_FROM=comments@yourdomain.com
- NOTIFY_EMAIL_SMTP_USERNAME=comments@yourdomain.com
- NOTIFY_EMAIL_SMTP_PASSWORD=your-smtp-password
volumes:
- remark42_data:/srv/var
volumes:
remark42_data:

Put it behind a reverse proxy (Caddy, Nginx, Traefik — your pick), point REMARK_URL at the public domain, and drop the embed script in your blog template. The official docs have the embed snippet — it’s three lines.

Who it’s for: Anyone who wants a production-grade self-hosted comment system without running a database server. Best all-rounder in this list by a wide margin.

The gotcha: Social auth requires setting up OAuth apps on GitHub/Google. It takes 10 minutes but it’s not zero minutes.


Isso — For the Minimalist

Isso is Python, SQLite, and a philosophy that comments don’t need to be complicated. Readers leave a name, email (optional), and a comment. No accounts. No OAuth. No friction. It’s the closest you can get to the old-school blog comment experience without handing your users to a tracker farm.

docker-compose.isso.yml
services:
isso:
image: ghcr.io/isso-comments/isso:latest
container_name: isso
restart: unless-stopped
ports:
- "8090:8080"
volumes:
- isso_data:/db
- ./isso.cfg:/config/isso.cfg:ro
volumes:
isso_data:

You need a minimal isso.cfg alongside:

isso.cfg
[general]
dbpath = /db/comments.db
host = https://yourdomain.com
[moderation]
enabled = true
purge-after = 30d
[smtp]
username = comments@yourdomain.com
password = your-smtp-password
host = smtp.yourdomain.com
port = 587
to = you@yourdomain.com
from = comments@yourdomain.com
security = starttls

Who it’s for: Low-traffic blogs, personal sites, anyone who wants Disqus-style anonymous commenting without Disqus.

The gotcha: The project went quiet for a while and got forked/revived. The isso-comments org on GitHub is the active one. Development pace is slow but it’s stable — it’s not abandonment, it’s just done.


Cusdis — The Lightweight Newcomer

Cusdis is Node.js, about 10 KB of embed JavaScript, and it runs on Postgres or SQLite. It’s newer than the others on this list and actively maintained. The big differentiator is the approval workflow — comments are held for moderation by default and you get an email with a one-click approve link. No logging into an admin panel, just approve from your inbox.

It also has a hosted tier if you want to test it without Docker first, which is a nice touch.

Who it’s for: Bloggers who want lightweight embedding and don’t want to think about spam. The email-approve flow is genuinely pleasant.

The gotcha: Younger project means fewer battle-tested deployments in the wild. Works fine, but you’re an earlier adopter than with Remark42 or Isso.


Commento++ — The Commento Fork That Actually Shipped

The original Commento had a hosted service (Commento.io) and an open source repo that basically went dark. Commento++ is a fork in Go that actually gets updates. It supports SSO, OAuth (GitHub, GitLab, Google, Twitter), and has a clean UI. If you already know and love Commento, this is the version you should be running.

Who it’s for: Teams or communities that need SSO integration. It handles multiple sites from one instance cleanly.

The gotcha: The Commento/Commento++ split is confusing when you’re Googling for docs. Make sure you’re looking at the right repo.


Giscus — Zero Infrastructure, GitHub Discussions Backend

This one’s clever. Giscus maps your blog posts to GitHub Discussions threads. When a reader leaves a comment, it posts to your repo’s Discussions. You get reactions, threading, notifications — all the GitHub Discussions UI — embedded on your blog.

There is no server to run. You add a <script> tag and point it at your repo. That’s the entire deployment.

Who it’s for: Developer blogs with a GitHub-native audience. If your readers already have GitHub accounts, the friction is basically zero and you’re not running another container.

The gotcha: Readers need a GitHub account to comment. That’s a complete non-starter for lifestyle blogs, gaming sites, or anything with a non-technical audience. For a homelab/DevOps blog? Most of your readers are already logged into GitHub in another tab.


Talkyard — The Forum in Comment Box Clothing

Talkyard is what you get when a comment system has ambitions. It supports threaded discussions, email notifications, Slack-style reactions, moderation queues, SSO, and it can run as a full forum if you point a separate URL at it. It’s more infrastructure than the others (needs Postgres, Redis, and some patience) but it’s genuinely powerful.

Who it’s for: Communities that actually want ongoing discussions, not just comment threads. If you’re running a tech blog that’s starting to feel like it wants a forum attached to it, Talkyard is the answer.

The gotcha: Overkill for a personal blog. If you’re writing two posts a month and getting 15 comments total, you don’t need Redis in the mix.


Schnack — Old Faithful

Schnack is tiny, runs on SQLite, and uses OAuth for auth (GitHub, Twitter, Facebook, Google). It’s been around for a while and hasn’t had major updates recently, but it works and the codebase is simple enough that you can fork and maintain it if you need to.

Who it’s for: Developers who like minimal dependencies and aren’t scared of a quiet commit log.

The gotcha: “Works” and “maintained” are doing different amounts of work in that sentence. Don’t build anything critical on it.


The SaaS Options (for when you’re done adulting)

Sometimes you don’t want another container. That’s a valid engineering decision, not a moral failing. Here are the hosted options that don’t make you feel bad about yourself.

Disqus — The Elephant in the Room

Let’s get this over with. Disqus still has 90% market share in blog comments because it was first and it was free and inertia is a force of nature. The free tier in 2024 serves ads in your comment section that you cannot control. The tracking is aggressive enough that major privacy-focused browsers block it by default, meaning a chunk of your readers never see the comment section at all. The JavaScript bundle is so large it would fail a job interview for being inefficient.

The paid tier removes ads and is actually fine. If your audience specifically expects social sign-in convenience and you’re willing to pay, Disqus Plus is a defensible choice. Just go in with eyes open about what you’re paying for.

Who it’s for: Blogs with massive existing comment archives, or anyone whose audience will revolt if comments require a new account. Or people who enjoy explaining their privacy policy to a lawyer.


Hyvor Talk — The Responsible Choice

Hyvor Talk is what Disqus should have become. Privacy-first, no ads ever, GDPR-compliant, and the embed is lightweight. Pricing is per-pageview-based which is either fine or annoying depending on your traffic, but the entry tier is reasonable for a personal blog. It supports reactions, nested threads, and moderation tools out of the box.

Who it’s for: Anyone who wants a polished SaaS comment system and is willing to pay a reasonable amount for it. No moral compromises required.


FastComments — Exactly What It Says

FastComments loads fast (they’re serious about it), has straightforward pricing, and is GDPR-friendly. The feature set is solid without being overwhelming. If you want “Disqus but not evil and not free,” FastComments is the most boring-in-a-good-way option.

Who it’s for: Bloggers who want something that Just Works, have traffic to justify a paid plan, and don’t want to make a project out of the comment system itself.


Commento.io — The Hosted Commento

This is the hosted version of the original Commento project. Development on the underlying open source repo went quiet, which is why Commento++ (the fork) exists. The hosted service is still running and works fine, but I’d want to see more activity before betting a production blog on it long-term.


How to Actually Pick

Stop trying to find the objectively correct answer. There isn’t one. Here’s the decision tree:

Low-traffic dev blog with a technical audience → Giscus. Zero maintenance, GitHub auth your readers already have, done in 10 minutes. If your readers file GitHub issues about your typos, they’ll comment through GitHub Discussions too.

Homelab generalist blog (hi, you’re on sumguy.com) → Remark42. It handles anonymous commenters, social auth, spam filtering, and it won’t randomly disappear because a startup pivoted. 30 MB of RAM is nothing.

Personal blog, low traffic, just want something running → Isso. Deploy it, configure the SMTP, forget it exists. It will keep working.

You actually want community discussions → Talkyard. Commit to it, set it up properly, and stop thinking of it as a comment system — think of it as a forum that embeds on your blog.

“I am not running another container, full stop” → Hyvor Talk or FastComments. Both are solid. Flip a coin based on which pricing page confuses you less.

“I have masochistic tendencies and enjoy explaining my privacy policy to regulators” → Disqus free tier. You do you.


The Actual Bottom Line

Comments are optional. A lot of great tech blogs have turned them off entirely and redirected people to Twitter/Mastodon/email for feedback. It’s a completely valid call.

But if you want comments and you’re already running containers, there’s no reason to send your readers to Disqus. Remark42 takes an afternoon to set up properly and then it runs for years. Isso takes an hour. Giscus takes 10 minutes if your audience has GitHub accounts.

Pick one, ship it, and spend the rest of your afternoon on something that actually matters. Your comment section is not your blog’s identity — your writing is.


Share this post on:

Send a Webmention

Written about this post on your own site? Send a webmention and it'll show up above once verified.


Previous Post
Restic Repository Maintenance: Prune, Check, Forget
Next Post
CrowdSec Collections & Bouncers: fail2ban for 2026

Discussion

Powered by Garrul . Sign in with GitHub or Google, or post anonymously.

Related Posts