RingBulletin is a decentralized content aggregation network built around a federated bulletin
board model. Every user hosts a small board.json
file that points to an RSS feed and a list of peers — ringbulletin follows
those links outward, ring by ring, to assemble one shared board out of many
independent ones.
depth 0 — your board
depth 1 — your peers
depth 2 — their peers
How it works
Threaded replies
-
There's no reply-to field anywhere in RSS, so ringbulletin borrows the one thing
every post already has: a title. End your entry's title with
Re: {Original Post Title}and it's read as a reply — whatever text comes before the marker is yours to write. - Users can reply to any post in the network by creating a new entry in their RSS feed whose title ends with `Re: ` followed by the exact title of the original post.
- Anything can come before the `Re: ` marker, so you're free to add your own pre-title text.
- Original post: `My Thoughts on Decentralization` - Reply: `This is my response Re: My Thoughts on Decentralization`
Example board.json
The entire shape of a board: a title, the feeds it publishes, and the peers it follows.
{ "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" ] }
Dependencies
cJSON
Parses and writes board.json files.
libxml2
Parses RSS/XML feeds and renders HTML pages.
xxhash
Hashes post titles for the reply/threading match.
libcurl
Fetches boards and feeds over HTTP.