Webring Technology

Introduction

The heyday of webrings lasted from around 2001 until 2017. The larger webrings systems such as WebRing, Ringlink, RingSurf, and the others managed swathes of webrings using mostly proprietary software and databases. These systems have all but gone and the trend today is for indiviual webring owners to administer their own ring on their own computers. This page takes a look at some of the available webring systems and software and my own suggestions at what an ideal webring should offer.

How they work

The large webring system would host tens of thousands of webrings. Webring in January 2000, hosted 80,000 webrings. As these large sytems ended in around 1017, they were replaced by single webring administrators but they still functioned in the same way.

A website owner would find a webring they liked, or want to create one of their own. They would apply to to the system administrators or they could download the management software and administer it themselves. New members to the webring would apply to join and if accepted, be gven a slug of code to add to their website. Once the code was added they were then full members of the webring.

Examples of old and new webring links

Examples of old and new webring links.
The newer links are generally smaller and more customizable

People would ask to join a webring and they would, if accepted, be given a ring identifier, a unique identifier for their site in the ring, the images, and the code to be placed on one of their pages. There were a variety of methods used to display the images and links. Bravenet's Sitering used an image map, Ringsurf used tables and Webring used either a JavaScript snippet or a table at different times. Some used an iframe where the content was served from the ringmaster's site.

Some ring managers would insist that the webring code be placed on the homepage, others would allow them to be placed on a "web ring" or links page.

Newer Systems

The days of the large, multiple webring management systems appears to be over, at least for the time being. The newer webring management software are best suited to single webrings.

Faery-ring

Faery-ring appeared in 2022 and is written by Ember or Emi as they are also known by. It a non-JavaScript server-side single ring manager that requires Linux or Docker. It is published with dual CNPL Nonviolent Public License and FAFOL (Fuck Around and Find Out License) licenses.

LibreRing

LibreRing logoLibreRing is a JavaScript single webring management system that appeared in March 2023. The script was written by Lian B. and published under the GNU Lesser General Public License.

Onionring

Onionring first appeared at the end of 2000 and is a JavaScript single webring management system hosted by Garlic Garden. It is published under the Cooperative Non-violent license (CNPL) v4+ license.

GitHub Repositories

GitHub has become the repository of choice for many software developers. I should mention something about the licensing of this software. Derek Jones explains Github's licensing agreement in the absence of any others with the code in his article "The Truth About the Risks of Unlicensed Software", and GitHub's Terms of Service.

How many of the webring managers work on GitHub is that the potential webring member adds the webring code snippet to their own site, then creates a fork (makes a copy) of the main code and adds their site details to the list of sites in a file in the fork and then asks for the fork to be merged intoto the main repository. The ring manager then inspects the new site and the fork and if acceptable merges the files into their code.

The code snippet placed on the new member's page usually contains a link to a JavaScript file, that reads the file contains the list of members and inserts the webring links on their page, as well as any images and CSS that are needed. Alternatively, the processing is done on GitHub or the ringmaster's own site and inserted into an iframe on the member's page. The member list file is usually a plain text file, to make it easy for the member to edit, and can be in a variety of formats; JSON, CSV, XML, RDF, HTML etc.

Where possible to determine them, I have only included the originating source repository. The number of forks is a little misleading as they do not represent members of the orignal webring or that they used to create a new one. It seems many were made and then not used at all rather than being simply deleted.

The following repositories are the most forked and run a variety of webrings:

Maxboeck logoBrob Netlify Webring - A lambda function for creating a webring on Netlify. 28 forks (January 2023)

 

Maxboeck logoMaxboeck Webring - Members are added by editing a JSON file and the member code includes a JaveScript file. This has an MIT license. 184 forks (January 2023)

Oring - Members are added by editing a JSON file and the member code includes a JaveScript file. This has an GNU General Public License.

XXIIVV logoXXIIVV Webring - Members are added by editing an index.html file and adding a HTML snippet linking to the ring's home page along with the member's ID so presumably the ring processing is done on the ring owners server. This has an MIT license. 356 forks (January 2023)

RainRing

Rainring logoRainRing is a simple, lightweight HTML and JavaScript webring code by Rainbow Cemetery.

Viatrix (mincerafter42)

Viatrix logoViatrix is the ringmaster of the Cuddler Webring and created their own code to do it. The code has several dependancies and needs user accounts on both Github abd Netlify. The code is on GitHub as cuddler-webring and the code has been used to create other webrings.

Webri.ng

Webri.ng is one of the few multi-ring management systems around and first appeared in 2022. It uses an SQL database and the source code is available on GitHub.

Older Systems

Although these are older codes there is no reason why they cannot be utilized as many of them were published with GNU General Public Licenses. After these were first written they were managing thousands of webrings. Where possible I have made the scripts available for download from my server, but please remember to read the original sites for usage and licensing, even if they do come from the Intnernet Archive. I cannot offer any sort of support for any of them.

Basingstoke Roundabout

Basingstoke Roundabout Webring logoThe Basingstoke Roundabout Webring Script was written by E. P.J "Joe" Tozer in 1999. It is a simple, lightweight HTML and JavaScript webring code. Joe Tozer retains the copyright to the files, but the documentation allows use of the slightly modified files. The files are available for download from Joe Tozer's site and also available here. Download (ZIP, 47Kb)

Draupnir Ringmanager

Draupnir Ringmanager logoDraupnir Ringmanager was a webring manager written in PHP as a WordPress plugin. It first appeared in 2014, and was last updated in 2015, meaning it is now (February 2023) 3 releases behind WordPress. The files are available for download from the WordPress site and also available here. Download (ZIP, 22Kb)

NetRing Server

NetRing Server appeared in 2001 and was advertised as more feature-rich than RingSurf, Bravenet and Yahoo! It was a complete ring management system written in Perl by Perl Producers Inc. The program was free and published with a GNU Public License but there may have been a problem with the software at it was not available for download after 2002. I cannot find a downloadable version of the software (January 2023)

Orca Ringmaker

Orca Ringmaker logoOrca Ringmaker was a PHP script for managing webrings and used a MySQL database. It was written by Brian Huisman (GreyWyvern) in 2005 and was still maintained until version 3.0 in 2016. The page was still there in January 2023 but the program not offered for download because as Brian say's on the page "The Ringmaker script has aged badly." One of the problems with Orca was that is was vulnerable to SQL injection attacks that could compromise the database. It appears to have been caused because the script did not sanitize the user input before creating a databse SQL query. Like Ringlink it was published under the GNU General Public License.

As far as I can tell, Orca could be updated with user input sanitation and hashing the passwords in the database with SHA-2. Version 3.0 of Orca Ringmaker is still available from the Internet Archive and also available here, but please be aware of the security concerns with this script. Download (ZIP, 130Kb)

PHP-Ring

PHP-Ring by Plebius logoPHP-Ring (Internet Archive) was a webring system written by Plebius Press in PHP 4 and used an SQL database in 2004. It was released under the GNU-General Public License and is still available for download from the Internet Archive link and also available here. Download (ZIP, 54Kb)

Ringlink

Ringlink logo Ringlink logoRinglink (Internet Archive) was written in Perl by Gunnar Hjalmarsson in 2001. The final version (Internet Archive), v3.3 was made available in 2009, shortly after which the site closed down. Gunnar published it under the GNU General Public License. Several webring systems appear to have used Ringlink to manage the webrings. Gunnar published the code to SourceForge and it is still there in January 2023. It is also available here. Download (ZIP, 324Kb)

Ring World

Ring World logo Ring World logo Ring World (Internet Archive) was commercial software that appeared in 1998 copyrighted by T&D Systems (Internet Archive) and TRXX Programming Group (Internet Archive). The two goups shared a common URL so they were probably the same. The scripts were available in several versions; Perl, Perl + SQL and PHP + SQL. The scripts were being sold at somewhere between $50 and $200 depending on version and year. However, by 2011, T&D Systems (Internet Archive) were offering the Perl + SQL version for free under the GNU General Public License. The download is still available from that Internet Archive site and is also available here. Download (ZIP, 109Kb)

Simple PHP Website Ring Script

SimpleRing logoSimple PHP Website Ring Script was written using PHP in 2002 by G. Dotzel and last updated in 2015. The code is freeware and available for download. It is used to run the Modula-2 webring.

SimpleRing

SimpleRing logoSimpleRing was commercial webring software and not released to the public under one of the copyleft licenses. SimpleRing was a CGI Perl program and appeared on the PerlCoders site in 2001. Membership to PerlCoders cost $175, and the CGI Perl program SimpleRing was free to members but others had to pay $100 for the program. I have not been able to find any freely available copy of it (January 2003)

SourceForge

In the early 2000s, some programmers thought they would have a go at developing the code to manage rings and some of those were put on the SourcceForge software repository and in January 2023, several are still there.

PHP My Ring was a self-hosted system written in PHP and using a MySQL database. It appeared on November 24, 2002 and the last version was made in May 2005.

PHP Webring was a self-hosted system written in PHP and using a MySQL database. It appeared on November 25, 2000 and last updated in January 2002.

PHPRing was a self-hosted system written in PHP and using a MySQL database. It appeared on December 14, 2000 and last updated in January 2001.

Martin Webb's JavaScript Webring Manager

Martin Webb posted his JavaSript code for managing webrings on the Internet Relatd Technologies website, IRT.org on May 9, 1998. There appears to be just one problem with the code and that is that it required the site owner to put an iframe on their website to contain the webring code and back then browsers had their own methods of dealing with them.

Monetization

There have only been a couple of serious attempts to monetize webrings. On September 26, 2006, Webring Inc. announced a new WebRing Premium Membership Program. They have separated memberships into two types, WebRing 1.0 and WebRing 2.0. Sites that are part of WebRing 1.0 will be limited to 50 webrings per URL. Existing 1.0 members can maintain more than 50, but can not add more.

In conjunction with the premium membership program, WebRing introduced an affiliate program, in which webmasters earn money when others join webrings from their site; they earn an additional payment if the new member purchases a premium membership.

Much of the webring codes around were proprietary and not released to the public. Some was specifically released under one of the copyleft licenses. There was a third category of software that was written to be sold. In 2003, membership to PerlCoders (Internet Archive) cost $175, and the CGI Perl program SimpleRing was free to members but others had to pay $100 for the program.

Creating a Webring

If you are thinking of creating a webring you need to think about what sort of sites you want to admit to it and what the range is going to be. Suppose you decide you want to create a programming ring. Do you include all languages? Sites where there's just a page about the subject? Sites that have some Not Safe for Work (NSFW) pages? Will you accept any commercial sites?

Some Thoughts on a Webring Management System

Webring Homepage

Every now and then people ponder on webrings and how they could be reinvented. Among them are CSS-Tricks

In order to entice people to join your webring the webring homepage should contain a few items:

A brief descripton of what a webring is and how they work.

A brief descripton of your webring and what its purpose is.

Your requitements to join the webring, and what they need to do to maintain their status as a ring member.

A working example of the webring code.

A brief description of what each of the buttons/links do.

The instructions on how the user gets the code/images to put on their page - copy/paste, emailed to them etc.

Perhaps a FAQ.

Webring Code Links

At a very minimum the webring code needs to give the member plain links/images/icons showing:

Name-of-webring; Previous-site; Ring-hub; Next-site

Name-of-webring could be an image, logo, or button with a link to the ring hub.

There are other link that could be added, depending on how sophisticated you want to get:

Skip-x-sites-back; List-sites; Random-site; Skip-x-sites-forward

What are these links going to look like? Perhaps several designs should be made available; a minimalist one, something like the old webring links and something in between. The ringmaster will want to use their own images; what sizes should they be?

A Webring Manager

I am a great fan self-hosting and computer automation. These are my thoughts on how a webring manager could work. The code to do this can be written in whatever language the ringmaster is comfortable with, Perl, PHP, Python etc.

On the backend, while the number rings and their membership is small then it does not matter if the records are kept in plain text flat files such as JSON, CSV, XML, RDF etc., but if it is envisioned the number of rings and their members will run into thousands then an SQL database should be considered as they will be faster to query and process. A little old, but Stack Overflow discusses the pros and cons of both approaches.

Whichever is chosen, the code must be capable of generating at least the previous, next and random site links. It is obvious that the first and last in the list are going to take a little consideration to ensure the code can jump from the beginning to the end or vice versa.

Joining

A form on the webring home asks the potential member for some details about themselves and the site. The form should make it clear which webring the user is joining. This is important where the ringmaster manages multiple rings. The form could include:

Username - can the system cope with different users having the same username so long as the passwords are different?

Password - what is the minimum level of complexity needed?

Retype password - to help prevent typing errors

User Email - so the user can ringmaster can be contacted

Site Name

Site Description - max of 100 characters?

Site URL

Site webring landing page if different from the homepage

Some sort of authentication to prevent bot usage - CAPTCHA or reCAPTCHA

Validation and Santitization

The form must be both validated and santitized. Don't try to sanitize input. Escape output is an easy to read article by Ben Hoyt to explain the difference. The PHP-based Orca Ringmaker did not do this properly and penetration testers found the database could be compromised.

Once the form is submitted the inputs should be checked again and an email sent to both the ringmaster and member to confirm it has been sent and received.

At least the password field should be saved as a hash. The Open Web Application Security Project has a series of cheat sheets to help with security problems and fixes.

The ringmaster should actually visit the applicant's site to ensure the code has been added properly, whether it be via JavaScript, an iframe or another mechanism, and works.

Using their username and password, the member should be able to edit or even remove their pages from the webring. An email could be sent to confirm the changes have been made.

List Order

The order of the sites in the ring list should be considered. The sites can be listed in the order of joining the ring. What this means is that the previous and next links for everyone are going to be the same whenever a visitor clicks on them. The Rail had a different approach and randomized the list order every two weeks.

This should be considered because visitors are going to arrive at a site in the ring more or less randomly. However, some sites are going to be generally more popular than others, and it is those sites that are going to be sending more traffic to the ring. By randomizing the list order sites that are deserving of receiving more visitors but who have less Search Engine Optimization "juice" stand an equal chance of receiving visitors from the ring links.

Clentside Technology

How should people joing the ring put the code on their web pages?

What historically happened was that people wanting to join a ring from one of the larger webring managers would be given a be given a ring identifier, a unique identifier for their site in the ring, the images, and the code to be placed on one of their pages. There were a variety of methods used to display the images and links. Bravenet's Sitering used an image map, Ringsurf used tables and Webring used either a JavaScript snippet or a table at different times. Some used an iframe where the content was served from the ringmaster's site.

Technology and attitudes change but some things remain the same. The web client still has to communicate with the ringmater's site so the previous, next and random links can be generated. Many newer rings just give the various URLs so this can be carried out such as:

<a href="http://example.com/netring?ring=14t;id=51;action=rand">Random</a>

The URL string can then be parsed and the appropriate action carried out. The user is free to style these links in any way they see fit.

Other things have changed. Some site owners, or their hosts, forbid the use of running someone else's content in iframes. This is because of the security risks posed by script injection, cross-site scripting, clickjacking and others.

Image maps can be made responsive and displayed at any size with the various clickable sections being recalculated to fit the size. Github has plenty of examples.I like and use the one made by Matt Stow.

An even better way now is to use a single SVG (Scalable Vector Graphics) file with the image, clickable areas and links embedded in it. These can be rescaled to any size and everything still works. vecta.io has a nice introduction on how to do this, but there are plenty of others around.

Link Checking

Some ring managers would insist that the webring code be placed on the homepage, others would allow them to be placed on a "web ring" or links page.

No one likes broken links on a web page but a broken link in a webring means the entire thing is broken. To help with the management, the webring member sites should be periodically checked, which can be automated, to see if the webring code is still where it is supposed to be or if the page, or even the entire site, still exists.

A failure of any of these checks should not result in automatic deletion of the site from the ring as there are any mumber of reasons a page could be temporarily unavailable. The entry in the database file should however be marked as having failed one or more tests. After failing successive tests, the member should be contacted and the site temporarily suspended from the ring until the issue is resolved or it is decided the site should be deleted from the ring.

More difficult to automatically check for is the actual content of the site. Has the site changed direction and no longer relevant to the ring?

Statistics

As the links are being created on a server, counters can be created for which link was clicked on for each ring and each site in those rings. As part of the service to ring managers, at least some of these statistics can be made available to them when they log into the ring management system.

This page created January 22, 2023; last modified March 31, 2023