ringbulletin is a decentralized content aggregator built around a federated bulletin-board model, written in C. There’s no central server: each person hosts a small board.json file listing their own RSS feeds and a set of peer boards, and the program walks that graph to build a combined view of everyone’s posts.
How it works
A board is just a JSON file:
{
"title": "Board Title",
"feeds": [
"https://feed1.com/index.xml",
"https://feed2.net/rss"
],
"peers": [
"https://peer1.com/bulletin/board.json",
"https://peer2.net/board.json"
]
}
Starting from one board, ringbulletin fetches each listed RSS feed, then follows the peer links and does the same for them, recursing out to a set depth. Everything it collects is aggregated and rendered to HTML pages you can browse locally or publish.
Threaded replies
Replies work without any extra protocol. To respond to a post, you publish a normal RSS entry whose title ends with Re: followed by the original post’s title, anything can come before the marker. ringbulletin hashes titles to group a post with its replies, so a plain RSS feed is enough to carry a threaded discussion across the whole network.
Building it
It’s C with a handful of libraries: libcurl for HTTP, libxml2 for parsing RSS and generating HTML, cJSON for the board files, and xxhash for the title hashing. Build it with make.
ringbulletin is a work in progress.
Demo
Below is a live demo: a board generated by ringbulletin from my own feed. It runs entirely in your browser from static files, so you can click around the posts and navigation just as they’d appear on a real board.
Source
The code is on GitHub: Skimak/ringbulletin
>> Home