## title: My Gopher webring application
## date: "2026-06-13"
## Introduction
I've visited many webrings available on the Internet, the
hacker webring, xxiivv, noai, geekring, etc. These are all
webrings designed for HTTP(S) only, but these days, I visit
a lot of Gopher websites. So I wanted to write a Gopher
application to implement a Gopher webring. To meet my needs,
I created the ange project, pronounced \ɑ̃ʒ\, which
corresponds to the word angel.
(HTM) the hacker webring
(HTM) xxiivv
(HTM) noai
(HTM) geekring
(HTM) ange
## What is a webring
A webring is a chained list in which each node contains
information about a website and its neighbors in the list.
Below is a graph representing a webring example.
/webring.png
(IMG) /webring.png
## My goal
My goal is to build a Gopher application that can manage a
persistent webring. Users should be able to submit a request
to join, and there should also be an admin section to review
user requests.
## Gopher Form
For this project to work, I need to create forms for users.
So I wrote the fleur-form project. It's a plugin for the
routers in the fleur project, it allows you to create forms
with multiple text fields for the user, which isn't natively
possible with Gopher and gophermap. Below is an image of an
example form.
(HTM) fleur-form
(HTM) fleur
/fleur-form_example.png
(IMG) /fleur-form_example.png
## Based on fleur
Ange is primarily based on the fleur framework and the fleur
router plugin called fleur-form.
/ange-dependencies.png
(IMG) /ange-dependencies.png
## How it works
The system is intentionally quite simple. The chain of
Gopherspaces is stored persistently using SQLite3. Users can
perform operations on the webring via Gopher requests
specifying specific paths. Each node of the webring has a
unique ID and a unique token. The token can be used by the
users to remove their gopherspace from the webring.
(HTM) SQLite3
For more technical details, please refer to the project
documentation.
(HTM) project documentation
### Webring members
After submitting a request to join the webring, the idea is
for users to add a section representing their node in the
webring to their website. Here is an example.
1Previous /webring/previous/your_id webring-url 70
1Webring title / webring-url 70
1Next /webring/next/your_id webring-url 70
1Random /webring/random webring-url 70
## Accessibility
Ange provides a set of features that make it easy to create
and manage your own webring. It follows the same approach as
the fleur project. It is easy to understand and very simple
to set up.
Specifically, someone wishing to use ange to create a Gopher
webring would simply need to install ange on their machine
using the command line recommended in the project
documentation. Then, if necessary, customize the file named
gophermap in the root of the chosen directory, and finally
run ange.
## Overview
Here's what ange looks like with the gophermap file provided
by the project.
/ange-zero-gopherspaces.png
(IMG) /ange-zero-gopherspaces.png
And here's an example of Gopherspaces accepted into the
webring.
/ange-two-gopherspaces.png
(IMG) /ange-two-gopherspaces.png
## Conclusion
Implementing a webring helped me better understand how they
generally work, it was pretty fun. During my research, I
wasn't able to find any existing Gopher webrings. If you
know of any, please feel free to contact me to discuss them.