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.
The newer links are generally smaller and more customizable
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.
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.
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.
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:
Brob Netlify Webring - A lambda function for creating a webring on Netlify. 28 forks (January 2023)
Maxboeck 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 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)
Viatrix 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 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.
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.
Draupnir 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 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 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 (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 (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 (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
Simple 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 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)
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 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.
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
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.
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 Description - max of 100 characters?
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.
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.
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.
How should people joing the ring put the code on their web pages?
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:
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.
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?
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