I've been quite busy making changes to the fediverse.to engine. And thanks to a lot of great user feedback the website is now better than ever!

Support for more Fediverse software!

The biggest change to fediverse.to is that it now supports other fediverse software. I'm currently using the list on fediverse.observer as reference. Over 80 different fediverse software are now supported:

Acropolis,Activity-relay,Anfora,Aoderelay,Bacn,Becomochi,Birdsitelive,Bonfire,Bookwyrm,Brutalinks,Castling.club,Circle,Contentnation,Corgidon,Diaspora,Dolphin,Drupal,Ecko,Epicyon,Fedimoe,Friendica,Funkwhale,Gancio,Gitea,Gnusocial,Go-littr,Goblog,Gorfspace,Gotosocial,Hometown,Hubzilla,Imaginarium,Iplaza,Juick,Kibou,Koype,Koyuspace,Kroeg,Ktistec,Kurofu,Lemmy,Lotide,Martenblog,Mastodon,Microblogpub,Misskey,Mistpark,Mitra,Mobilizon,Moodlenet,Notestock,Olki,Ostatus,Owncast,P3k,Pagure,Peertube,Pherephone,Pixelfed,Pleroma,Plume,Pub-relay,Pubgate,Red,Reel2bits,Roadhouse,Selective-relay,Sequel,Shadowfacts_blog,Smithereen,Socialhome,Socialtap,Solopor,Starship,Tsundere,Turkum,Unciarelay,Unfediverse,Wordpress,Writefreely,Wxwclub,Zap

The main page now shows the total number of instances for each software. And the search page now lets you filter by fediverse software.

Better categories

Instances are now categorized based on their TLDs and description metadata. The following 15 categories are now supported:

academia,activism,adult,anime,art,books,furry,games,humor,journalism,lgbt,music,poc,sports,tech

To identify categories, I reviewed the larger instances and extracted keywords which best described their audiences. I combined these keywords and common TLDs to create the following ruleset:

CATEGORY_RULES = {
    "academia": {
        "domain_ending": ["science"],
        "desc_contains": [
            "academia",
            "academic",
            "academics",
            "science",
            "scientists",
        ],
    },
    "activism": {
        "domain_ending": [],
        "desc_contains": ["activist", "activism", "activists"],
    },
    "adult": {
        "domain_ending": [],
        "desc_contains": [
            "adult",
            "BDSM",
            "18 years of age",
            "18+ only",
            "18+",
            "(N)SFW",
            "NSFW",
            "adult-only",
            "sexualized",
            "porn",
            "sex",
            "kinky",
            "kink",
            "fetish",
        ],
    },
    "anime": {
        "domain_ending": [],
        "desc_contains": ["anime"],
    },
    "art": {
        "domain_ending": ["art", "design"],
        "desc_contains": ["art", "writing", "artist", "artists", "design"],
    },
    "books": {
        "domain_ending": [],
        "desc_contains": [
            "books",
            "book lovers",
            "bookwyrm",
            "Terry Pratchet",
            "comics",
        ],
    },
    "furry": {
        "domain_ending": [],
        "desc_contains": ["furry", "furries", "Furry-friendly"],
    },
    "games": {
        "domain_ending": [],
        "desc_contains": [
            "games",
            "gaming",
            "Elite: Dangerous",
            "RPG",
            "gamer",
            "gamers",
            "game development",
            "videogame",
            "videogames",
        ],
    },
    "humor": {
        "domain_ending": [],
        "desc_contains": ["humor", "humour"],
    },
    "journalism": {
        "domain_ending": [],
        "desc_contains": ["journalists", "journalism"],
    },
    "lgbt": {
        "domain_ending": ["lgbt"],
        "desc_contains": [
            "lgbt",
            "lgbt+",
            "lgbtq",
            "gay",
            "lesbian",
            "queer",
            "queers",
            "lgbtq+",
            "A place for trans",
            "LGBTQIAPN+",
            "LGBTQIAPN",
            "dyke",
            "dykes",
            "gay",
            "gays",
            "LGBTQIA+",
        ],
    },
    "music": {
        "domain_ending": [],
        "desc_contains": ["music", "rock band", "musicians", "kpop"],
    },
    "poc": {
        "domain_ending": [],
        "desc_contains": [
            "poc",
            "Pleroma: An efficient and flexible fediverse server",
            "Pixelfed is an image sharing platform, an ethical alternative to centralized platforms.",
        ],
    },
    "sports": {
        "domain_ending": [],
        "desc_contains": ["sports", "sport"],
    },
    "tech": {
        "domain_ending": ["tech", "technology", "dev"],
        "desc_contains": [
            "bitcoin",
            "tech",
            "technology",
            "software engineering",
            "foss",
            "Chaos Computer Club",
            "computer",
            "computers",
            "cryptocurrencies" "cryptocurrency",
            "open source",
            "open-source",
            "coding",
            "source-code",
            "source code",
            "software",
            "softwares",
            "programming",
            "programmer",
            "programmers",
            "technologist",
            "technologists",
            "hacking",
            "developers",
            "computer science",
        ],
    },
}

The method is crude and needs work but its a decent starting point for now. I'm getting a lot of great feedback every day so both the category list and the ruleset are improving. If you have any suggestions, ideas, or criticisms, I'm always reachable here.

Blocking instances which break codes of conduct

fediverse.to will no longer list servers suspended by mastodon.social and mastodon.technology. As long as your server follows both their codes of conduct it will be searchable on fediverse.to.

Hosting on DigitalOcean

Some of the most demanding work happened under the hood. I released the first version of the website in early January of 2022. After several long weeks of work, the backend is now hosted on DigitalOcean. I have a small droplet to run the cronjobs and a Postgres database for the data. The droplet fetches the data and pushes the static website to Netlify. With this basic plumbing in place, I can now focus on adding more features :)

To-dos

Based on the feedback I've received so far, the following action items are still open:

  • Use D3 to show the entire fediverse network using network/peer visualizations.

  • Identify the instance's hosting country.

  • Identify the instance's language if not available in the instance metadata.

  • Add instance configurations to instance pages, such as maximum character counts.

  • Improve instance category list and ruleset.

  • Publish list of blocked/suspended servers and updated category rules.

  • Publish code of conduct.

  • Build an API for other users and admins.

Stay tuned!

Before you go, please remember that you determine the direction of this project. If you have any ideas, suggestions, or criticisms which will make fediverse.to better, please feel free to get in touch.

Thanks! And stay tuned :)