Minimal self-hosted comment system
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Jonah Brüchert 86f90c2ffd
Refresh Cargo.lock
3 months ago
LICENSES Add license 2 years ago
css Increase margin between the color radio buttons to work better with Firefox's new theme 8 months ago
img Commit missing img directory 8 months ago
migrations Use 64bit integer for secrets 8 months ago
screenshots Add screenshots 2 years ago
src Fix clippy lints 4 months ago
templates Increase margin of the placeholder message 5 months ago
Cargo.lock Refresh Cargo.lock 3 months ago
Cargo.toml Switch to tagged rocket 0.5.0-rc.1 7 months ago Add links to atom feed entries 7 months ago
Rocket.toml Initial commit of working comment system 2 years ago
diesel.toml Initial commit of working comment system 2 years ago Add script for generating the password hashes 8 months ago


Really simple comment system for blogs, minimal enough to be hosted on a Raspberry Pi.

Use cases

For now, this is suited for small blogs which need an extremely cheap (in terms of resource usage) comment system, for example when the rest of the blog is generated by a static site generator and the comments need to be on a very limited self-hosted server. A basic captcha-like system is in place, but it won't withstand targeted attacks.

Setup instructions

cargo install diesel_cli
export DATABASE_URL=comments.sqlite
diesel migration run

You must add a base_url value to /etc/reactions/config.toml, so the comment system can create urls to reference itself.

base_url = ""

You should add your own, community-related security questions to /etc/reactions/config.toml.

"Question?" = "Answer"

Afterwards, start the server.

cargo run --release

If you want, you can add reserved names to /etc/reactions/config.toml.

"User Name" = "encoded argon2 hash"

You can create the password hashes using the argon2 command line tool.


Each comment has a secret and a public id. The public id is used for features such as replies, where the id of a comment needs to be known to the client to specify which comment their comment replies to. The secret id is used for deleting posts. After a comment was created, the user can see the secret id, but it is impossible to get the secret id later without access to the database.


You can use an iframe to embed the comments.

<iframe width="970" height="500" frameborder=0 style="max-width: 100%;" src="https://hostname.tld/comments?article_id={{ post.title }}"></iframe>

To check for new comments, you can visit https://hostname.tld/recent.


submitting a comment