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.

Recursive peer discovery Your board at the center, its peers on the first ring, and peers of peers on the second ring, connected by lines representing fetched feeds.
depth 0 — your board depth 1 — your peers depth 2 — their peers

How it works

  • 01 Host a board.json List your own RSS feed alongside the peer boards you want to follow. That's the whole membership card.
  • 02 Fetch outward, ring by ring ringbulletin reads your peers' boards, then their peers' boards, continuing outward to whatever depth you set.
  • 03 Browse the aggregated board Every fetched post lands in one place, ready to read locally or serve on the web.
  • Threaded replies

    - 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.