reweb

The retweet for the web.

What is this?

Reweb lets you publicly share the things you read online. When you reweb a page, it gets added to your personal RSS feed. Anyone can subscribe to your feed in their favourite reader and see what you are reading.

The reweb network also tracks how many people have rewebbed something, so popular content surfaces naturally through trending lists and counters.

How it works

Your identity is your website. You register with your site URL (e.g. yoursite.com), prove you own it by placing a verification tag on your site, and receive an API key. Then you reweb things using the Chrome extension or the API directly.

Your rewebs are served as a standard RSS 2.0 feed with optional social metadata (who else rewebbed it, how many people) embedded via RSS namespace extensions. Any feed reader works. Reweb-aware clients can show the social layer too.

Get started

Get the Chrome extension

Example feed

This is what a reweb feed looks like. Standard RSS, with extra metadata that feed readers simply ignore.

<item>
  <title>On Building for the Open Web</title>
  <link>https://example.com/open-web</link>
  <description>A must-read on web standards</description>
  <reweb:count>12</reweb:count>
  <reweb:rewebbedBy>
    <reweb:user href="https://alice.github.io">alice.github.io</reweb:user>
    <reweb:user href="https://bob.neocities.org">bob.neocities.org</reweb:user>
  </reweb:rewebbedBy>
</item>

For developers: the reweb namespace

Reweb feeds are standard RSS 2.0 with a custom XML namespace that embeds social metadata. Any RSS reader can consume a reweb feed normally. If you want to build a reweb-aware reader or client, here is everything you need.

Namespace declaration

The root <rss> element declares the namespace:

<rss version="2.0"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:reweb="https://reweb.rewildtheweb.org/ns">

Elements

ElementParentDescription
<reweb:count> <item> Integer. Total number of users across the network who have rewebbed this URL.
<reweb:rewebbedBy> <item> Container for <reweb:user> elements. May be absent if no other users have rewebbed the URL. Limited to a subset of recent users; use the API for the full list.
<reweb:user> <reweb:rewebbedBy> A user who rewebbed this URL. The href attribute is the user's site URL (e.g. https://alice.github.io). The text content is the hostname (e.g. alice.github.io).

Standard RSS elements used

ElementDescription
<title> The page title of the rewebbed URL.
<link> The canonical (normalized) URL that was rewebbed.
<description> The user's optional note about why they rewebbed it. May be absent.
<guid> Format: reweb:{site_url}:{canonical_url}. Unique per user per URL.
<pubDate> When the user rewebbed the URL (RFC 2822 format).

JSON API

For richer integrations, a public JSON API is also available:

EndpointDescription
GET /api/url/info?url=... Returns { count, rewebbed_by: [{ site_url, at }] } for any URL.
GET /api/trending Returns the top rewebbed URLs this week.
GET /feed/{site_url} The RSS 2.0 feed for a given user (e.g. /feed/alice.github.io).

Parsing example

Extracting reweb data from a feed in JavaScript:

const res = await fetch("https://reweb.rewildtheweb.org/feed/alice.github.io");
const xml = new DOMParser().parseFromString(await res.text(), "text/xml");
const ns = "https://reweb.rewildtheweb.org/ns";

for (const item of xml.querySelectorAll("item")) {
  const title = item.querySelector("title")?.textContent;
  const link = item.querySelector("link")?.textContent;
  const note = item.querySelector("description")?.textContent;
  const count = item.getElementsByTagNameNS(ns, "count")[0]?.textContent;
  const users = [...item.getElementsByTagNameNS(ns, "user")]
    .map(u => ({ href: u.getAttribute("href"), name: u.textContent }));

  console.log({ title, link, note, count: Number(count), users });
}