You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Ryan Rix 2f5c6ae5d0 pLEASE 8 years ago Update readme. 8 years ago
conf-sample.yaml Burp. 8 years ago
index.js pLEASE 8 years ago
package.json Uh. maybe. 8 years ago
template Move to a template 8 years ago

polynomial: A decentralized webring built on top of

Polynomial is a webring built on top of the decentralized chat/RPC system. It leverages rooms as a key-value store to allow anyone to define webrings which they can use to link their sites to others' sites.

Source code lives in my cgit.


Joining a ring

Joining a ring is as simple as embedding an iframe to an existing Ring's supernode in your site, with a specified format. For example, to join the webring, you would embed this in your site:

<iframe src="https://WEBRINGDOMAIN/webring/! is a premier source of woo"/>

The URL is structured as follows:

  • WEBRINGDOMAIN is the domain of the supernode you choose to join. A list of them follows.
  • ! is the Matrix roomId of the ring you want to join; Aliases are currently unsupported.
  • is your domain. Webring links to specific URLs is unsupported to minimize Spam risks

= Makesyouthink is a Premier source of woo is what the link will look like in the ring

At which point, refreshing your page will register you in the ring, and start showing you other sites in the ring.

List of Supernodes

  • mods these rings as

    • ! A testing webring
    • ! the Matrix Users webring
    • ! the Kickass Systems webring
    • ! the Emacs Users webring

Making your own ring

A ring is just a room. Creating your own is as simple as adding the roomID to your supernode conf.yaml and restarting it, and then making the supernode user a mod in the room.

Some best practices:

  • set the name and topic to something meaningful as those will be put in the ring iframe.

Becoming a supernode

Becoming a supernode is fairly simple. To become a supernode for a given ring, register a account and ask the ring owner to grant "set state level" privileges to the account, or create your own.

Add the roomId to roomIds in config.yaml and start your node. Ask to add you to the list of supernodes above.

Make sure the ring is accessible from the open internet at a sane URL, I use httpd reverse proxy to hide it on port 80 in my webserver like so:

NameVirtualHost *:80
<VirtualHost *:80>
  DocumentRoot /var/www/sites/
  ProxyPass /webring http://localhost:9000/webring
  LogFormat "%h %v %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" custom
  CustomLog /var/log/httpd/ring.whatthefuck.computer_access.log custom


  • Seriously? Is it fucking 1995?

    • Webrings are goofy 90s tech, yeah. But at the same time, there is a sense of community and camaraderie that comes from being in one. They're simple and effective but in the liong run they are all ephemeral because they have a central source of truth. A webring built on top of a decentralized system like could live forever, and I think that's pretty cool.
  • Why?

    • A while ago I started messing with my coworkers by posing to them a fake interview question: "Build a webring"…. Easy enough, "Now build one without a central registry server", at which point they usually curse at me for asking them to build a DHT in javascript.
  • This isn't actually a ring, it's just random sites

    • Gonna fix that soon enough, I promise.
  • No really, webrings?

    • Really.