DEV Community

chovy
chovy

Posted on Originally published at dev.profullstack.com

OpenWebring: a webring that says who made it

Webrings came back. There are hundreds of them again, on Neocities and personal domains and the fediverse, and every one of them reinvents the same three things: a list of members somebody keeps by hand, a next and a previous link that go somewhere, and a check, usually by eye, that the member still links back. Each ring keeps its list in its own shape, an HTML page, a JSON file, a JavaScript array, a git repo, so a site in four rings is described four ways, and no directory can read a ring without reading its source code.

Meanwhile the one thing a reader in 2026 wants to know about a site, whether a person wrote it, has no place to be said. There are badges, and there are proposals for a header and an attribute, and none of them is something a ring can filter on. A ring for the human web and a ring for the machine web are the same ring with one field, if the field exists.

OpenWebring is that field, and the two files around it. The spec is at logicsrc.com/openwebring.

What a member does

One plain link to the ring on a page the ring can find. Three anchors, no script, no image:

<a href="https://rssamplifier.com/ring/small-web/previous?from=https://chovy.com/"></a>
<a href="https://rssamplifier.com/ring/small-web">Small Web ring</a>
<a href="https://rssamplifier.com/ring/small-web/next?from=https://chovy.com/"></a>
Enter fullscreen mode Exit fullscreen mode

That is the whole obligation, and every member of every existing ring already meets it, because that is what those rings already ask for.

A member may also serve a small file at /.well-known/openwebring.json saying who it is, which rings it belongs to, and made_by: human, ai or both. It is a self-declaration and nothing verifies it, the way every badge before it worked. An optional disclosure field uses the W3C AI Content Disclosure vocabulary word for word, so it lines up with the HTML attribute and the IETF header without translation.

What a host does

Serves one file listing its rings, each with a policy on which declarations it admits, a members file in ring order with an active, inactive or pending status, and an OPML twin so a ring is a subscription list in one click. Answers three hops, next, previous and random, as a redirect and nothing else: no cookie, no interstitial, no counter. The hops accept every addressing shape rings already use, the query parameter, the domain, the slug in the path, the bare referrer, so a member written for another ring joins with no change. An unknown starting point gets a random member, never an error. The ring wraps. Inactive members are skipped, listed, and never removed.

Verification is the IndieWeb ring's way: fetch the member's page on a schedule, any link to the ring counts, mark inactive when it is gone, wait for it to come back.

The first host is rssamplifier.com

rssamplifier.com/ring runs one ring per well-covered topic out of the independent feeds it already reads. The order is fixed once and new members append, so "next from here" means the same thing tomorrow. Each member's own descriptor is read for its made_by, and the ring page says what each site said about itself, or that it said nothing. The hops are exempt from the site's rate limiting, because a refused hop is a broken link on somebody else's page.

If your site is in the directory and in a topic that has a ring, you are already a member, pending. Put the three links on your home page, and the next pass marks you active. Serve the file, and the ring shows who makes your site.

What is deliberately absent

No script. No verification of made_by. No central registry: a ring is a file on a host, and two rings with the same name on two hosts are two rings. No reader tracking. The spec text is CC BY 4.0.

Top comments (0)