Building a webmentions receiver
May 10 2026
For the last few years at least, I’ve been pretty opposed to the idea of websites having public comments sections. I think the context online is very different from that of an in-person conversation with a group of people you know, and so I think online public comments go very easily awry. I recently got around to looking into webmentions since they seem much healthier as a discourse mechanism, and have since decided that I will add support for them to this site.
Adding support for receiving webmentions seems like a good place to start. This site is a static site built with Jekyll and I want it to stay that way. Since the standard allows for the receiver endpoint to be a different server, I thought I’d make a separate application to run on my homeserver. I have a private repo for the site on my Forgejo instance so it would need to make commits and pull requests there which I could then merge to trigger CI to update the site.
Rust is my go-to language nowadays and seems like a reasonable fit for this kind of project. The applications consists of a single endpoint HTTP server which handles incoming requests, parses them, does some basic validation and then queues them for processing by a worker task which does more in-depth validation and communicates with Forgejo.
Altogether, it’s less than 1,000 lines of code and less than a day of work to get something that I’m happy with. The whole thing is built into a docker container and is now running happily on my homeserver. If you’d like to checkout the code you can find the repo at https://forgejo.zacjw.com/zac/webmention-receiver
Next step will be actually integrating it into the site so the files it creates become links at the end of posts. I’ll also add a little form into each post for adding a webmention in case your site doesn’t automatically send webmentions.