| Crates.io | faery-ring |
| lib.rs | faery-ring |
| version | 0.2.1 |
| created_at | 2022-02-08 22:14:06.321713+00 |
| updated_at | 2025-10-13 14:06:08.290358+00 |
| description | An ultra-lightweight js-free server-side webring implementation |
| homepage | https://fem.mint.lgbt/Emi/faery-ring |
| repository | https://fem.mint.lgbt/Emi/faery-ring |
| max_upload_size | |
| id | 529347 |
| size | 50,419 |
An ultra-lightweight js-free server-side webring implementation
Webrings are a way of building a community especially popular with amateur websites. Here's how it works: Each member of the webring includes a link to a "next" website and a "previous" website, creating something like a "ring", hence the name. Anyone who finds their way onto one website can organically navigate to other pages in the ring.
Although they were first used to drive traffic in the era before search engines, many folks now see webrings as a way of building cozy communities on the web, or as a way to bring back the exciting feeling of the web as a place to be explored.
Where does Faery Ring come in? To make it easier to maintain webrings as they grow and change, many people employ simple scripts to coordinate member pages. Faery Ring lets you do this without needing JavaScript
Faery Ring is made for a pretty particular usecase, which might not necessarily fit your own. If you don't think that Faery Ring will work for you, that's okay! We encourage you to check out other projects, like maybe onionring.js, a similar project that works using static javascript files. If you know any other webring projects that we should list here, submit an issue and we can add them too!
You want more features provided by default
Faery Ring only provides a "next" link and a "previous" link by default. Features like an index page, premade widgets, and script integration is something you'll have to bring yourself.
You don't have a place to host dynamic web content
Faery Ring needs a place to run it's webserver, and many ringmasters (that's the person who runs a webring) might only have the ability to serve static files
Your server isn't running Linux
There is no reason why Faery Ring can't run on other operating systems, but unfortunately I have no way of testing this, so I can't guarantee that it will work, and you may need to build the binary yourself. If that's okay with you, go right ahead though!
You or a ring member is a non-cooperative corporation, cop, or planning on doing bad things
Faery Rings is dual-licensed under the CNPLv7+ and FAFOL, which forbids the use of Faery Ring for a number of distasteful purposes. If you're worried that your purposes might be considered distasteful, first, ask yourself why you think that might be, and if you should be doing that. Then, check out the CNPL website for more details. If that's all a bit much for you, you're welcome to use the license under the FAFOL (Fuck Around and Find Out License) - a license very similar to the MIT license. The FAFOL also restricts unethical use, but as long as your use is generally good (not evil) you're in the clear.
Running Faery Ring is pretty easy. First, make a .txt file somewhere, and fill it with all of the sites in your ring, one per line. Leave out the protocol (https://) and a trailing slash, so that it looks something like this:
www.dragoness.space
emii.gay
garlic.garden/onionring
queerings.gay
getonflop.xyz
Now, run the Faery Ring binary (or docker image) with the .txt file you just created as the first argument, like this:
# Run from the binary
faery-ring /path/to/domains.txt
# Or run using Docker
docker run -v /path/to/domains.txt:/domains.txt -p 3243:3243 alch0emi/faery-ring
You can also use the -p <port> flag to tell faery-ring what port you want to bind on. If you don't, it'll pick port 3243. Anyway, now you can point your webserver at Faery Ring! The config below is for Caddy, but any webserver that supports reverse proxies will work!
your.web.site {
reverse_proxy /next/* localhost:3243
reverse_proxy /prev/* localhost:3243
}
Now your webring members can add links on their page to https://your.web.site/next/<their_domain> https://your.web.site/prev/<their_domain> in order to build the ring. For example, whoever runs the page at www.dragoness.space would add a link to https://your.web.site/next/www.dragoness.space and https://your.web.site/prev/www.dragoness.space. garlic.garden/onionring cen either use /next/garlic.garden or /next/garlic.garden/onionring. If more than one site were hosted on garlic.garden, then the second form would be required.
Are you part of the very niche group of people who uses NixOS (or Lix [lesbian nix]) and also has the experimental Flakes feature turned on and also builds their system configuration using a flake and also wants to install my already super-niche webring software?
Wow! Are you a lesbian too? Are you single? Do you want my phone number? Sorry um i mean my Matrix? Or uhhh XMPP? Wait sorry we were in the middle of something.
To use this with your setup:
{
inputs = {
# ...
faery-ring = {
url = "/home/ember/Development/faery-ring";
inputs.nixpkgs.follows = "nixpkgs"; # This is optional thanks to overlays, but still saves a trivial amount of download / disk spacetime
}
};
outputs = {
# ...
};
};
{
inputs = {
# ...
};
outputs = {self, nixpkgs, faery-ring}: {
# Everyone's flake looks a bit different, but here's an example
nixosConfigurations.my-machine = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ faery-ring.nixosModules.default ];
# ... other config options, maybe some imports ...
};
};
};
services.faery-ring option
# Somewhere in your configuration
{
services.faery-ring = {
enable = true;
port = 8080; # Optional, and defaults to 3243
domains = [ # Required! Same format as domains.txt
"corviform.gay"
"mtxyz.me"
"sashanoraa.gay"
"www.dragoness.space"
];
};
}
Even if your entire system isn't a flake, Nix users can still run this package from the command line, like so:
nix run git+https://codeberg.org/alch_emi/faery-ring ./domains.txt
alch0emi/faery-ring:latestcargo install faery-ringDo you run a webring that uses faery ring? I'd love to know, and add you to the list if you'd like! 💜
Due to the relatively small scope and size of faery-ring, it doesn't require much maintence, and I'm not interested in adding very many features. I'll respond to the any issues and feature requests that are opened, and stay on top of any bugs, but for the most part faery-ring is passively maintained.