Go to file
2021-11-09 13:10:07 -05:00
src Add a couple doccomments 2021-11-09 11:35:55 -05:00
.gitignore Initial Commit 2021-11-08 23:09:57 -05:00
Cargo.lock Initial Commit 2021-11-08 23:09:57 -05:00
Cargo.toml Fix typo in Cargo.toml 2021-11-09 13:10:07 -05:00
Dockerfile Add a Dockerfile 2021-11-09 13:09:19 -05:00
LICENSE.md Add a license 2021-11-09 11:36:44 -05:00
README.md Add README 2021-11-09 12:34:59 -05:00

Faery Ring

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 might be right for you if...

  • You want to start a webring, but you or someone in your ring really doesn't like JavaScript
  • One of the member pages on your webring can't use JavaScript because of hosting limitations
  • You want to make it as easy as possible for new members to join your webring
  • You have your own dedicated server or virtual private server (VPS)

Faery Ring might not be right for you if...

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 licensed under the CNPL, 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 license website for more detailsj

How do I use it??

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:

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

Right now, Faery Ring always binds to port 3243, but this might change in the future, who knows. Anyway, now you can point your webserver at Faery Ring and be on your way! 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
}