meta/investment_analysis/README.md
koen cfcb37384a Update investment_analysis/README.md
changed link to version that keeps existing
2025-09-08 14:51:38 +02:00

8.6 KiB

An estimate of investments in the Fediverse

Introduction

To provide an estimate of the investments made into the Fediverse, defined1 as a decentralized interoperable network of social media sites, apps, and services built on the ActivityPub protocol, is a daunting task, owing due to:

  1. a lack of research (in our experience) on this topic thus far;
  2. the vast number of services part of the Fediverse2;
  3. the Fediverse's decentralised nature;
  4. involvement of voluntary contributions;
  5. the third-party nature of some of the integrations.

Nonetheless, we have taken upon ourselves the task to provide a first glimpse on this subject. Given the Fediverse's interoperability empowers users, a better overview on the resources in this technology helps clarify its momentum for key decision-makers interested in adopting, investing in and interfacing with this technology. We further hope our work will contribute and ignite more serious research into this topic.

In this document we describe our assessment of the investments made in the Fediverse. We start with describing our methodology for gathering data on the Fediverse and share information on the services, platforms and software applications we have deemed relevant to include.

Methodology

In order to better scope our research, we will address the mentioned challenges by:

  1. given the lack of research on this topic so far, gathering missing data by contacting representatives of the respective projects;
  2. to account for the vast number of services part of the Fediverse, focusing on the major services3 part of the Fediverse, in this case the software with at least 10,000 active monthly users as per Fediverse Observer2, in total accounting for over 95% of the active users across Fediverse services, i.e.:
    • Threads
    • Mastodon
    • Pixelfed
    • NodeBB
    • Lemmy
    • Peertube
    • Loops
    • Wordpress
    • WriteFreely
  3. to account for the Fediverse's decentralised nature, extrapolating for each service to their overall number of (visible4) instances from their flagship instances;
  4. to account for the involvement of voluntary contributions, separately citing internal versus overall contributors active on the projects, and extrapolating from the former to estimate the latter;
  5. to account for the third-party nature of some of the integrations, explicitly distinguishing these in our overview.

NodeInfo

Fediversity instances tend to expose data using the NodeInfo protocol (https://nodeinfo.diaspora.software/). Data exposed this way is gathered in https://fediverse.observer/, which we use as our source for metrics:

  • estimated number of installations
  • estimated number of users
  • estimated number of monthly active users

Human resources

Moderators

On users with moderation privileges ActivityPub unfortunately exposes no structured data yet, although this is an outstanding feature request5.

In addition, for some single-tenant platforms such as WriteFreely, moderation does not apply. Platforms that support user sign-ups, such as Mastodon, may similarly disable user sign-up, in which case moderation similarly is not relevant.

Developers

The amount of active developers we estimate as users:

  • as identified by unique emails
  • who are not bots, as measured by whether their name contains 'bot',
  • who contributed at least 5 commits to the default Git branch at the main forge/fork
  • over the past year.

We obtain this metric by running a Nushell query6 on the project's respective Git repositories.

Based on project estimations on internal engineers involved measured in FTE, we further estimate the total amount of development involved by extrapolating from these FTE figures to include external contributors based on their relative number of commits --- thereby for the purpose of this estimate presuming similar time and effort required for external versus internal commits.

System administrators

Used system resources

CPU

  • minimum/average/peak percentage of (number of) CPU cores used?
  • CPU model used

storage

in e.g. GB currently used by the instance

networking

in e.g. min/max/average MiB/s in/out of the instance, along with physical caps potentially limiting these

Capital

A closer look at the Fediverse platforms

Project Installations monthly active users
mastodon 8033 736878
pixelfed 501 126065
nodebb 43 52399
lemmy 407 41341
peertube 962 25804
loops 1 26548
wordpress 2863 11510
writefreely 492 11188

Estimating investments in the Fediverse

Notes

References

Changes

Older versions of this directory lived here: 0006758ab7/Fediverse-investments-an-estimation.md


  1. Kissane, E., & Kazemi, D. (2024, September 4). Findings Report: Governance on Fediverse Microblogging Servers. https://fediverse-governance.github.io/#brief-glossary ↩︎

  2. https://fediverse.observer/allsoftwares ↩︎

  3. Note that this focus would exclude work on protocols such as W3C's work on the ActivityPub protocol, as well as on non-core repositories, and ancilliary software whose development is run by others than by the lead developers of the mentioned services, such as bridges, cross-posters, third-party clients, browser extensions, instance indices, etc. ↩︎

  4. Visibility, for our purposes meaning exposing metadata using the NodeInfo protocol, for Mastodon, the Fediverse service with the highest amount of active users, notably excludes an instance with more active users than its biggest visible instance https://mastodon.social/, namely Donald Trump's Truth Social. ↩︎

  5. This feature requested may be tracked at: https://github.com/swicg/activitypub-trust-and-safety/issues/25 ↩︎

  6. The used query here is: git log --pretty=%h»¦«%s»¦«%aN»¦«%aE»¦«%aD | lines | split column "»¦«" commit subject name email date | upsert date {|d| $d.date | into datetime} | where ($it.date > ((date now) - 365day)) | where not ($it.name has 'bot') | group-by name | transpose | upsert column1 {|c| $c.column1 | length} | sort-by column1 | rename name commits | where ($it.commits >= 5) | reverse | length ↩︎