The ActivityPub Fuzzer builds on the work of the Fediverse Schema Observatory and serves as a tool for software engineers to test any piece of software they want before even connecting to a live network. This project aligns with the Applied Social Media Lab’s goal of creating technology that is accountable to its users.
Vision
To enable developers to easily test against simulated real-world Fediverse traffic in a local development environment.
Goals
This project aims to expand tooling on the Fediverse that
- provide developers with a fast and simple way to test ActivityPub implementations without connecting to a live network
- reduce the complexity of testing by removing the need to run dozens of different software suites just to get a little bit of data to read
- support more robust and interoperable Fediverse applications through easier, earlier testing
Why This Matters
The Fediverse consists of tens of thousands of servers running hundreds of different kinds of social media software. Connectivity between these different pieces of software is possible because they all “speak the same language.” That language is ActivityPub. However, the problem is that every distinct piece of software in use speaks its own dialect of the language. When an American and a Canadian speak to one another, this isn’t a big deal, and misunderstandings can be discussed and smoothed over. But computers are more rigid than people, and these dialect differences can cause miscommunications or even errors.
When an individual wants to build social media software that can talk to all of these different kinds of software, they are often left guessing as to what different dialects they will find in the wild. This project provides a simulation of everything seen by the Fediverse Schema Observatory, so developers can test against real-world data.
How It Works
The ActivityPub Fuzzer simply takes data from the Observatory that looks like this:
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Create",
"id": "<uri>",
"actor": "<uri>",
"object": {
"id": "<uri>",
"type": "Note",
"attributedTo": "<uri>",
"content": "<string>",
"published": "<date-time>",
"to": ["<string>"],
},
"published": "date-time>",
"to": ["https://www.w3.org/ns/activitystreams#Public"],
}
And turns it into something like this:
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Create",
"id": "https://localfuzzer.dev/event/1",
"actor": "https://localfuzzer.dev/actor/1",
"object": {
"id": "https://yourlocalserver.dev/object/1",
"type": "Note",
"attributedTo": "https://localfuzzer.dev/actor/1",
"content": "Lorem ipsum.",
"published": "2025-09-01T12:00:00Z",
"to": ["https://www.w3.org/ns/activitystreams#Public"],
},
"published": "2025-09-01T12:00:00Z",
"to": ["https://www.w3.org/ns/activitystreams#Public"],
}
Each of those URLs at “localfuzzer.dev“ will resolve correctly just like a real ActivityPub server would do. This effectively emulates inbound traffic from any piece of software known to the Observatory.
If a user tells a developer that their software breaks when it gets an image attachment from Lemmy, the developer no longer has to sign up for a Lemmy account or run their own Lemmy server to send test messages to their software. Just fire up the Fuzzer, select “Lemmy” and “Post with image attachment” and it will handle the rest!

Who Can Benefit
The ActivityPub Fuzzer supports anyone building, testing, or improving ActivityPub-compatible software:
- Developers who want to quickly test implementations against realistic Fediverse traffic
- Standards designers working to identify and address interoperability gaps between different ActivityPub implementations
- Researchers and analysts studying how diverse ActivityPub dialects impact communication across the Fediverse
Get Involved
If you’re developing Fediverse software, stay tuned for the ActivityPub Fuzzer GitHub repository, which will include instructions to install and run the Fuzzer in your local development environment.