Search results

A while back I mentioned the idea of “Fedify Studio”—a web-based toolkit for debugging and development. I've been quietly working on shaping that idea into something more concrete.

Nothing to announce yet, but it's looking like this might become a team effort rather than a solo project, which would be nice. We'll see how it goes.

2
1
0

I forgot how tedious it is to chase code coverage when writing tests.

However this was part of the reason that made me include the "boring" parts of building a robust library into the goals set for the grant.

So after a couple of days of work I finally got the first of the storage backends for the library go past 80% test coverage.

I hope I can reuse some of the test logic in the other backends, as they need to perform identically.

0

RE: fietkau.software/daily_rucks/a

I have added Mastodon-style (FEP-044f) quote post compatibility to my @DailyRucksDaily Rucks from Bastion bot. You can now quote post the daily voice lines as much as you want! 🥳

This would be noteworthy on its own if there weren't already a bunch of non-Mastodon implementations, but I'm actually late to the party. WordPress, Bonfire, micro.blog, dotmakeup, and ActivityBot all got there before I did.

However, I think my approach is novel for being *stateless*. Thread incoming.

🧵 1/6

0

Just opened an issue for a major new task for : building an smoke test suite.

To ensure Fedify-built servers federate correctly with the wider , we're planning to run automated E2E tests in against live instances of Mastodon, Misskey, and more. This is crucial for a framework's reliability.

You can see the full plan and discussion here:

https://github.com/fedify-dev/fedify/issues/481

1
4
0

To know what software an instance is running (Mastodon, Pleroma, Akkoma, Firefish, Friendica, etc), have to make 2 calls:

1. `/.well-known/nodeinfo` - get the `href` for a nodeinfo link e.g. mastodon.social/.well-known/no
2. `/nodeinfo/2.0` (possibly 1.0 or 2.1 too) - get the `software.name` e.g. mastodon.social/nodeinfo/2.0

And… both are not CORS-enabled (again) for web apps to request 😅😢

Reference: github.com/h3poteto/megalodon/

0

Been thinking about fediverse wiki after @2chanhaeng초무 mentioned it today. Some ideas:

  • Cross-instance page linking: [[Page Title@other-instance.wiki]]
  • Edit pages on other instances with your home account
  • Fork pages across instances: [[Page@instance-a.wiki]][[Page@instance-b.wiki]], sharing edit history up to the fork point
  • Merge forked pages later when needed

The fork/merge model feels natural for federated collaboration. Thoughts?

3

Interesting new DID method: "did:self"

FenTiger @fentiger@zotum.net

One consequence of trying to separate identity hosting from the other components of the system is that it makes the other components harder to bootstrap. If I run just one component of my instance in isolation, how can I authenticate to it in order to configure/manage/test it, if I don't have an identity that I can use?

The answer might be to use a did:self identifier. The flow would look something like

  • Management CLI tool generates a JWT describing a did:self identifier, and stores the private key locally
  • Admin uses scp or something to copy this JWT to the right place on the server
  • The server now has the ID's public key and so the CLI tool can prove that it "owns" the identifier

Which seems like a reasonable fix for the classic problem of "how do you create the first user", and also a useful fallback for when the system is too badly borked to be able to look up real identities.

Another interesting property of did:self is that seems to be possible to add extra metadata, such as a human-readable name, to the ID, by using standard JWT claims - without needing the data to appear in the DID document.

Of course these identities will only be visible to the server they're copied to, not to the whole network, but that shouldn't be a major problem.

(Cue the peanut gallery, with their suggestions of "it's easy, just do so-and-so", because everything looks easy when you take it out of context...)

#ActivityPubDev #FediDev
Read more →
0

RE: neuromatch.social/@jonny/11534

Rumors that the fediverse can't do mobile identity have been greatly exaggerated: is now in draft status - codeberg.org/fediverse/fep/src

This is a proposal for how to migrate all your stuff along with you when you move instances.

The gist:

  • Send a request to move along with a set of stuff you'd like to bring with you. Moderators (optionally) can, approve, send back a change request, or deny. If the changes look ok, start the move, if not, hey you avoided incompatible moderation. Should be possible to layer in any kind of bulk actions you might want: "everything except my DMs," "strip attachments," "only my favorite posts," "nothing," etc.
  • keep a public collection of move events signed by both the source and target for durable, portable proof that you are the same person as the old account
  • the new instance crawls your old account and grabs whatever you specified, and then posts a mapping from old URIs to new URIs.
  • other instances can then immediately remap the URIs so e.g. future interactions get sent to the right place, and then gradually update their local versions over time, spacing out traffic.

Just using existing ActivityPub mechanisms. There are 6 new terms.

Bonus: lays the next steps to migrate to content addressed URIs, decouple accounts from instances, and merge and split accounts.

It being a draft means that there is a 60 day (or longer) public comment period, and feedback/edits/etc. Are very much welcome.
Issue: codeberg.org/fediverse/fep/iss
Discussion: socialhub.activitypub.rocks/t/

0
0
0
1

Here's a draft FEP to do full account migration with posts and whatever other kinda objects you want to bring with you. It's a trivial expansion of existing ActivityPub/streams systems and supports gradual migration as it's implemented and after an account migration. It should be possible to migrate pretty much everything this way, both private and public objects.

criticism, feedback, revisions, etc. welcome - i don't think this is a "final version" and there are certainly things i overlooked.

codeberg.org/sneakers-the-rat/

codeberg.org/fediverse/fep/pul

0
0
1
0
0
0

If we were to do a regular online Fediverse meeting —

(Maybe once a month.)

WHAT DAYS OF THE WEEK WOULD YOU BE ABLE TO ATTEND?

A regular (online) meeting for Fediverse developers, for those who care about the Fediverse as a social movement, and for those who care about the success of the Fediverse.

Sunday?
Monday?
Tuesday?
Wednesday?
Thursday?
Friday?
Saturday?

(You can pick more than one day)

PLEASE REPLY WITH YOUR ANSWER.

0
0
1

RE: mastodon.social/@reiver/115300

I just did a video-chat with @sl007Sebastian Lasse

(This is the first time we chatted.)

We talked about a number of Fediverse related things.

One of those things was — having a regular (online) meeting.

A regular (online) meeting for Fediverse developers, for those who care about the Fediverse as a social movement, and for those who care about the success of the Fediverse.

I have heard others say this, too, over and over again.

(And, at times, we have had them before.)

0

A wiki you can post on, what a concept.
But that's basically what it is we just don't have names for posts or concepts.

I actually did implement this, where you could give a post a title and that gives it a namespaced URL, ideally then one would be able to do [[my post]] or [[@jonny/my post]] , (and then quoting a named concept would be {{ @jonny/my post }} ). Idk why we never deployed this.

github.com/NeuromatchAcademy/m

0
2
5
2

4/

Apparently, Bookwyrm stores quotations with:

type="Quotation"

And if one Bookwyrm server talks to another Bookwyrm server, then — the ActivityPub / ActivityStreams representation of the quotation will have:

type="Quotation"

...

BUT — if a non-Bookwyrm server talks to a Bookwyrm server, then — the ActivityPub / ActivityStreams representation of the quotation will have:

type="Note"

0
0

Quotations & the Fediverse / ActivityPub

1/

One thing I used to do a lot on social-media is — post quotations.

Sometimes I was reading a book. And, I would quote things from the book and post it on social-media.

Or I was reading a scholarly paper, or reading a blog post, or watching a video, or listening to a podcast, etc.

...

I was thinking — how could you represent a quotation in ActivityPub‽

“[And yet another book that made an argument that was in favor of human universals is] Brent Berlin and Paul Kay’s [book] "Basic Color Terms: Their Universality and Evolution" (1969).”

“by the early 1970s two independent lines of psychological research, culminating in studies conducted among preliterate peoples of New Guinea, had shown that there are universal facial expressions of emotions.”

“Berlin and Kay show that although color classification does vary, it also shows remarkable uniformities: particularly in the sequence in which basic color terms are added to the lexicon.”

“Anthropologists and linguists had long known that the way colors are classified varies from language to language. Careful studies conducted by anthropologists after World War II, such as Harold Conklin’s (1955) study of Hanunóo color words, made the point very clearly.”

“The different sets of words for color in various languages …”
0

Quotations & the Fediverse / ActivityPub

1/

One thing I used to do a lot on social-media is — post quotations.

Sometimes I was reading a book. And, I would quote things from the book and post it on social-media.

Or I was reading a scholarly paper, or reading a blog post, or watching a video, or listening to a podcast, etc.

...

I was thinking — how could you represent a quotation in ActivityPub‽

“[And yet another book that made an argument that was in favor of human universals is] Brent Berlin and Paul Kay’s [book] "Basic Color Terms: Their Universality and Evolution" (1969).”

“by the early 1970s two independent lines of psychological research, culminating in studies conducted among preliterate peoples of New Guinea, had shown that there are universal facial expressions of emotions.”

“Berlin and Kay show that although color classification does vary, it also shows remarkable uniformities: particularly in the sequence in which basic color terms are added to the lexicon.”

“Anthropologists and linguists had long known that the way colors are classified varies from language to language. Careful studies conducted by anthropologists after World War II, such as Harold Conklin’s (1955) study of Hanunóo color words, made the point very clearly.”

“The different sets of words for color in various languages …”
0

8/

REMEMBER: this is for power-users, not regular users

How would you get ActivityPub / ActivityStreams into HTML using RDFa‽

Like this:

<div vocab="w3.org/ns/activitystreams#" typeof="Note">
<p property="name">Hello!</p>
<p>How do you do?</p>
</div>

AGAIN, REMEMBER: this is for power-users, not regular users.

Regular users can just write Markdown or HTML and Retejo will figure this out automatically for you

0

7/

If you are wondering what RDFa is —

You might be more familiar with OpenGraph.

ogp.me/

OpenGraph is usually the thing that causes "preview cards" to be showed for links shared on social-media.

OpenGraph is written in RDFa. Which, in practice, is some special HTML elements added to the page.

For example:

<meta property="og:image" content="example.com/img/preview.png" />

So what about ActivityPub‽ —

8/

REMEMBER: this is for power-users, not regular users

How would you get ActivityPub / ActivityStreams into HTML using RDFa‽

Like this:

<div vocab="w3.org/ns/activitystreams#" typeof="Note">
<p property="name">Hello!</p>
<p>How do you do?</p>
</div>

AGAIN, REMEMBER: this is for power-users, not regular users.

Regular users can just write Markdown or HTML and Retejo will figure this out automatically for you

0

6/

Obviously, beginners are NOT going to do this, but — some power-users may want this level of control.

There are different way this could be done, but — one way might be that power-users could use RDFa to explicitly specify what data from the HTML gets into the ActivityPub / ActivityStreams data.

Again, beginners and typical users would NOT do this.

But a power-user might want to.

Here is an example —

7/

If you are wondering what RDFa is —

You might be more familiar with OpenGraph.

ogp.me/

OpenGraph is usually the thing that causes "preview cards" to be showed for links shared on social-media.

OpenGraph is written in RDFa. Which, in practice, is some special HTML elements added to the page.

For example:

<meta property="og:image" content="example.com/img/preview.png" />

So what about ActivityPub‽ —

0

6/

Obviously, beginners are NOT going to do this, but — some power-users may want this level of control.

There are different way this could be done, but — one way might be that power-users could use RDFa to explicitly specify what data from the HTML gets into the ActivityPub / ActivityStreams data.

Again, beginners and typical users would NOT do this.

But a power-user might want to.

Here is an example —

0
0
0

2/

What are "good" ways of automatically creating ActivityPub / ActivityStreams data from HTML and Markdown‽

I think the answer depends on who, for example, is writing HTML, and how they are writing it.

For example, is this a typical user? Is this a power-user? Do they know HTML? And if they do know HTML, how well do they know it? Etc?

I will show you what I mean —

...

0

1/

I have spending time thinking of ways you could automatically create ActivityPub / ActivityStreams data from HTML and Markdown

Most people will probably write in plain UTF-8 text, or Markdown, or HTML

How to do you take that and get it onto the Fediverse and Social Web‽

This isn't just a question of how to technically do it — but also a question of user-experience (UX)

I.e., what are "good" ways of doing it‽

...

2/

What are "good" ways of automatically creating ActivityPub / ActivityStreams data from HTML and Markdown‽

I think the answer depends on who, for example, is writing HTML, and how they are writing it.

For example, is this a typical user? Is this a power-user? Do they know HTML? And if they do know HTML, how well do they know it? Etc?

I will show you what I mean —

...

0

1/

I have spending time thinking of ways you could automatically create ActivityPub / ActivityStreams data from HTML and Markdown

Most people will probably write in plain UTF-8 text, or Markdown, or HTML

How to do you take that and get it onto the Fediverse and Social Web‽

This isn't just a question of how to technically do it — but also a question of user-experience (UX)

I.e., what are "good" ways of doing it‽

...

0

Today I discovered an interesting inconsistency in Activity Streams specs while investigating a Fedify issue.

The question: How should we interpret URLs like "icon": "https://example.com/avatar.png"?

JSON-LD context (https://www.w3.org/ns/activitystreams): @type: "@id" → “This is an IRI reference, dereference it to fetch an ActivityStreams object.”

Activity Streams Primer: “assume that a bare string is the href of a Link object, not an id” (no dereferencing)

Result: JSON-LD processor-based implementations try to parse PNG files as JSON and fail.

Turns out w3c/activitystreams#595 already discusses the same issue for href properties. I added a note that icon, image, etc. have the same problem.

Once again reminded of how tricky spec work can be…

0

We're excited to share an update on 's development! While we're actively working on Fedify 1.9 in the main branch, we've also begun preparations for Fedify 2.0 in the next branch.

Before you get too excited about revolutionary new features, we want to set clear expectations: Fedify 2.0 will primarily focus on cleaning up technical debt that we couldn't address due to backward compatibility constraints. This means removing deprecated APIs and making breaking changes that will ultimately result in a cleaner, more maintainable codebase. Think of it as a major housekeeping release—necessary work that will make Fedify better in the long run.

Some of the planned improvements include adding readonly modifiers throughout our types and interfaces to better enforce our immutability-by-default principle, implementing our own RFC 6570 URI Template library for symmetric expansion and pattern matching, and various CLI tool migrations to our new Optique framework for better cross-runtime support. While the majority of changes will be about refinement rather than revolution, these updates will strengthen Fedify's foundation and improve interoperability across the . You can track all planned changes in detail by checking out the Fedify 2.0 milestone on our GitHub repository.

1
0
0
0
0
Announcement?????? idk

jsr.io/@outpost/http-signatures is a thing now.

Brand new, zero dependency (may end up with one to make base64 cross platform down the road), fully TypeScript HTTP signature library.

Passes all of Mastodon's incoming signature tests (except it intentionally does not support the no query string quirk) but I have not yet tried it out "in the real world" yet. API may change for the next little while as I implement it on my own software and realize my mistakes, but it Should Work™

/forcepub
0

Flag Activity

FenTiger @fentiger@zotum.net

Is there any information anywhere on how the Flag activity is used in practice?

As ever, the spec only tells me that it exists; it doesn't say anything about what it contains, where it gets delivered to, how the recipient processes it, etc.

Maybe I could find out more by setting up some test instances and experimenting with it, or by trying to trawl through various repositories to find the relevant source code - but it seems a lot quicker to just ask.

#ActivityPub #ActivityPubDev #FediDev #FediDevs
Read more →
0

The monorepo has grown to 16 packages!

We've been working hard to make Fedify more modular and easier to integrate with your favorite tools and platforms. From the core framework to database drivers, from CLI tools to web framework integrations—we've got you covered.

Our packages now include:

  • Core framework and CLI tools
  • Web framework integrations: Express, Hono, H3, Elysia, NestJS, Next.js, SvelteKit
  • Database drivers: PostgreSQL, Redis, SQLite, AMQP/RabbitMQ
  • Platform integrations: Cloudflare Workers, Deno KV
  • Testing utilities

Each package is available on JSR and/or npm, making it easy to pick exactly what you need for your ActivityPub implementation.

What integration would you like to see next? Let us know!

A table showing 16 Fedify packages with three columns: Package name, registry availability (JSR and npm links), and Description. The packages include the core @fedify/fedify framework, CLI toolchain, database drivers (PostgreSQL, Redis, SQLite, AMQP/RabbitMQ), web framework integrations (Express, Hono, H3, Elysia, NestJS, Next.js, SvelteKit, Cloudflare Workers), Deno KV integration, and testing utilities. Most packages are available on both JSR and npm registries, with some exceptions like @fedify/denokv (JSR only) and @fedify/elysia, @fedify/nestjs, @fedify/next (npm only).
1
0
1

Are you a Fediverse developer? Do you work with ActivityPub?

You should follow activitypub.space

And here is the awesome thing — you can follow it from your existing Fediverse account!

Follow these activitypub.space channels:

@generalGeneral Discussion
@technical-discussion
@faqFrequently Asked Questions
@random
@meta

(Thank you @julian )

0
0
0

We're excited to announce the release of BotKit 0.3.0! This release marks a significant milestone as now supports .js alongside , making it accessible to a wider audience. The minimum required Node.js version is 22.0.0. This dual-runtime support means you can now choose your preferred runtime while building with the same powerful BotKit APIs.

One of the most requested features has landed: poll support! You can now create interactive polls in your messages, allowing followers to vote on questions with single or multiple-choice options. Polls are represented as ActivityPub Question objects with proper expiration times, and your bot can react to votes through the new onVote event handler. This feature enhances engagement possibilities and brings BotKit to feature parity with major platforms like Mastodon and Misskey.

// Create a poll with multiple choices
await session.publish(text`What's your favorite programming language?`, {
  class: Question,
  poll: {
    multiple: true,  // Allow multiple selections
    options: ["JavaScript", "TypeScript", "Python", "Rust"],
    endTime: Temporal.Now.instant().add({ hours: 24 }),
  },
});

// Handle votes
bot.onVote = async (session, vote) => {
  console.log(`${vote.actor} voted for "${vote.option}"`);
};

The web frontend has been enhanced with a new followers page, thanks to the contribution from Hyeonseo Kim (@gaebalgom개발곰)! The /followers route now displays a paginated list of your bot's followers, and the follower count on the main profile page is now clickable, providing better visibility into your bot's audience. This improvement makes the web interface more complete and user-friendly.

For developers looking for alternative storage backends, we've introduced the SqliteRepository through the new @fedify/botkit-sqlite package. This provides a production-ready SQLite-based storage solution with ACID compliance, write-ahead logging (WAL) for optimal performance, and proper indexing. Additionally, the new @fedify/botkit/repository module offers MemoryCachedRepository for adding an in-memory cache layer on top of any repository implementation, improving read performance for frequently accessed data.

This release also includes an important security update: we've upgraded to 1.8.8, ensuring your bots stay secure and compatible with the latest ActivityPub standards. The repository pattern has been expanded with new interfaces and types like RepositoryGetMessagesOptions, RepositoryGetFollowersOptions, and proper support for polls storage through the KvStoreRepositoryPrefixes.polls option, providing more flexibility for custom implementations.

2
1
0

For a sneak preview of my followup to the Fediverse Schema Observatory, there's now a project page on the lab website for the ActivityPub Fuzzer:

asml.cyber.harvard.edu/activit

Basically it lets an ActivityPub server developer test compatibility with simulated messages from Fediverse software known to the Observatory (dozens of software projects and hundreds of versions!). The dev can do this entirely in a local dev environment.

The project is still in the works but I'll be releasing the code soon.

@dariusDarius Kazemi

super nice.

What I worked on the past weeks was to analyze the current news corpora of the University of Leipzig in different languages.
Then mixed it with an anonymized fedi corpus and wrote a thing which can
- compress ActivityPub Objects to 20% of its size by a combination of semantic compression where 256 languages can be covered. The rest would be uncompressed in multilanguage Objects (see Evans new Primer Page).
Result is UInt8Array for a database.

What I am working on now is to "preserve hashtags and common knowledge".
One byte is a pointer to Hashtags (where any word has a # at 0) and one byte is a pointer to 3x(256²) wikidata tables. So that we directly get the e.g. Q1055 for Hamburg and can ask the author if the prominent Hamburg is meant …
This was just a first demo for German github.com/sebilasse/compressDE which meanwhile improved and soon you can generate your lexica from corpora.
btw This can detect 852 languages github.com/redaktor/languages
Less data, better climate …

0

I just realized that the default specifications for ActivityPub/ActivityStreams do not have a way to perform an update on an object's ID. (ie, moving it from example.com/1 -> example.com/2)

An Update activity does not allow ID updates because it would lose the reference to the original one. (It can be massaged by using an Origin property, but I don't like that).

Another option would be to use a Move activity (which is defined as moving objects between collections), where the Origin property is the object itself instead of a collection. (I like this behaviour better, as it requires less divergence from the spec)

0
0

We'd like to recognize the valuable contributions from two developers who participated in Korea's (Open Source Contribution Academy) program. Both contributors identified important gaps in 's functionality and documentation, providing thoughtful solutions that benefit the broader ecosystem.

@gaebalgom개발곰 contributed PR #365, addressing issue #353 regarding NodeInfo parser compatibility, originally reported by @andypiper. The issue arose when Fedify incorrectly rejected documents from snac instances due to overly strict version string parsing that required semantic versioning compliance. Their solution improves the fallback behavior in the parseSoftware() function to handle non-SemVer version strings by parsing dot-separated numbers and defaulting to zero for missing components. The implementation includes thorough test coverage for various edge cases, including single numbers (3), two-part versions (2.81), and malformed version strings. This fix provides immediate compatibility improvements across the fediverse while maintaining backward compatibility, and will be included in Fedify 1.9. The contribution serves as an interim solution, with a more comprehensive fix planned for Fedify 2.0 (issue #366), where the NodeInfo software.version field will be changed from the SemVer type to a plain string to fully comply with the NodeInfo specification.

@z9mb1wwj contributed PR #364, resolving issue #337 by adding practical examples for Fedify's custom collection dispatchers feature. Custom collections were introduced in Fedify 1.8 but lacked clear documentation for developers seeking to implement them. Their contribution provides a comprehensive example demonstrating how to set up custom collections for tagged posts, including proper routing patterns, pagination handling, and counter functionality. The example includes mock data structures, shows how to configure collection dispatchers with URL patterns like /users/{userId}/tags/{tag}, and demonstrates the complete request/response cycle using federation.fetch(). This work provides developers with a clear, runnable reference that reduces the complexity of implementing custom collections in ActivityPub applications.

We appreciate these meaningful contributions that help make Fedify more accessible and robust for the entire ActivityPub community.

3
0
0
0

Web Monetization, Programming

12/

I have been looking for (working) Payment-Pointers being used by others.

But, ever time I find one — it doesn't work (mostly because one provides seems to have stopped working).

...

For example, over here:

web.archive.org/web/2025022212

If I look at the HTML source-code, I see a Payment-Pointer.

But the host in the Payment-Pointer doesn't work.

<meta name="monetization" content="$ilp.uphold.com/LJmbPn7WD4JB">
0
0

🔒 Security Update for BotKit Users

We've released patch versions BotKit 0.1.2 and 0.2.2 to address CVE-2025-54888, a security discovered in . These updates incorporate the latest patched version of Fedify to ensure your bots remain secure.

We strongly recommend all users update to the latest patch version immediately. Thank you for keeping the safe! 🛡️

0

All users must immediately update to the latest patched versions. A authentication bypass (CVE-2025-54888) has been discovered in Fedify that allows attackers to impersonate any actor by sending forged activities signed with their own keys.

This vulnerability affects all Fedify instances and enables complete actor impersonation across the federation network. Attackers can send fake posts and messages as any user, create or remove follows as any user, boost and share content as any user, and completely compromise the federation trust model. The vulnerability affects all Fedify instances but does not propagate to other ActivityPub implementations like Mastodon, which properly validate authentication before processing activities.

The following versions contain the fix: 1.3.20, 1.4.13, 1.5.5, 1.6.8, 1.7.9, and 1.8.5. Users should update immediately using their package manager with commands such as npm update @fedify/fedify, yarn upgrade @fedify/fedify, pnpm update @fedify/fedify, bun update @fedify/fedify, or deno update @fedify/fedify.

After updating, redeploy your application immediately and monitor recent activities for any suspicious content. Please also inform other Fedify operators about this critical update to ensure the security of the entire federation network.

The safety and security of our community depends on immediate action. Please update now and feel free to leave comments below if you have any questions.

1
2
1