Fedify: an ActivityPub server framework's avatar

Fedify: an ActivityPub server framework

@[email protected] · 7 following · 373 followers

Fedify is a TypeScript library for building federated server apps powered by ActivityPub and other standards, so-called fediverse. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.

WebsiteGitHubJSRnpm

https://fedify.dev/

https://github.com/dahlia/fedify

https://jsr.io/@fedify/fedify

https://www.npmjs.com/package/@fedify/fedify

Lobsters's avatar
Lobsters

@[email protected]

Fedify 1.0.0 released by @hongminhee lobste.rs/s/khzn8u
github.com/dahlia/fedify/discu

Pierre's avatar
Pierre

@[email protected]

activitypub typescript server framework called Fedify announces first stable release. It is being used by the open source Ghost CMS platform. Can't wait to see what other apps are created with Fedify

Github repo here: github.com/dahlia/fedify/relea

activitypub typescript server framework called Fedify announces first stable release. It is being used by the open source Ghost CMS platform. Can't wait to see what other apps are created with Fedify

Github repo here: https://github.com/dahlia/fedify/releases/tag/1.0.0
activitypub typescript server framework called Fedify announces first stable release. It is being used by the open source Ghost CMS platform. Can't wait to see what other apps are created with Fedify Github repo here: https://github.com/dahlia/fedify/releases/tag/1.0.0
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected] · Reply to Pelle Wessman's post

@voxpelli No, we haven't been aware of the SWF until yesterday.

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Fedify, an ActivityPub framework, has finally released its first stable version, 1.0.0! Here are key changes:

Deprecation of the term handle

From this version, the term handle across Fedify will only be used to refer to fediverse handles (e.g., @[email protected]). An actor's internal unique ID (e.g., b379dbdc-3b4f-4ef4-88c2-fc25632d1c22) is referred to as an identifier, and the WebFinger name (e.g., hongminhee) is referred to as a username.

The term handle in the API will be maintained for a while for backward compatibility, but deprecation warnings will be logged, and it is planned to be removed in the future.

For more details, please refer to the related documentation.

Linked Data Signatures

Linked Data Signatures is an outdated standard, but it's still relied upon by major fediverse implementations such as Mastodon.

In addition to HTTP Signatures and Object Integrity Proofs, Fedify now supports Linked Data Signatures from this version, thus supporting all types of signature methods used in the fediverse. This makes Fedify an ActivityPub implementation with the best interoperability.

However, Fedify users don't need to do anything special to use Linked Data Signatures. If an incoming activity has Linked Data Signatures, it automatically verifies the signature, and all outgoing activities will have signatures in three formats: HTTP Signatures, Linked Data Signatures, and Object Integrity Proofs.

For more details, please refer to the related documentation.

Activity forwarding

From this version, you can forward activities received in the inbox to other actors using the InboxContext.forwardActivity() method.

At first glance, you might think that you could just resend an activity received in the inbox using the Context.sendActivity() method. However, if you do this, the original signature is removed before the activity is delivered to the inbox, and when sending it, the signature of the forwarding actor is attached instead, causing the receiving side of the forwarded activity to not trust it.

On the other hand, when using the InboxContext.forwardActivity() method, the activity is forwarded with the original signature preserved, avoiding this problem. (Of course, the original activity itself must be signed with Linked Data Signatures or Object Integrity Proofs.)

For more details, please refer to the related documentation.

Sending Delete(Application) on fedify inbox termination

From this version, fedify inbox will send a Delete(Application) activity to all peer servers it encountered when terminated. This is typically an activity sent when deleting an account, which will help prevent residual data related to temporary actors from remaining on other servers.

PostgreSQL drivers

The @fedify/postgres package, which implements PostgreSQL drivers for the KvStore and MessageQueue interfaces, has been released alongside this version.

The PostgreSQL driver is a backend that can be sufficiently used in production, especially recommended for projects already using PostgreSQL.

Additionally, an option to select the PostgreSQL driver has been added to the fedify init command.

Celebrating Fedify 1.0.0

With the release of version 1.0.0, Fedify will now maintain API backward compatibility as much as possible. (Of course, in the long term, there may be a 2.0.0 that breaks backward compatibility.) This should be good news for those who have been hesitant to use Fedify because there hasn't been a stable version until now!

So, hoping that more services will support ActivityPub in the future, I conclude this post!

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected] · Reply to Fedify: an ActivityPub server framework's post

Okay, now implements misskey:isCat property, and it will be shipped with Fedify v1.0.0.

https://github.com/dahlia/fedify/commit/f75c19cf84cabb012e68e2893ce63c10c4416b21

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Does need to support the misskey:isCat property?

OptionVoters
Should support it.21 (75%)
Does not need to support it.7 (25%)
洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected]

Looks like v1.0.0 will be released this week! Is there anything you'd like to see added or fixed before then?

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected]

I'm polishing the and filling in the gaps before releasing v1.0. Is there something else you'd like to see in the @fedify docs?

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

The next version of , v1.0, adds ParallelMessageQueue, which makes it easy to parallelize sending and receiving activities without increasing the number of processes or nodes.

It's available for preview in v1.0.0-dev.408+f4e245b4 (JSR & npm).

https://unstable.fedify.dev/manual/mq#parallel-message-processing

Emelia 👸🏻's avatar
Emelia 👸🏻

@[email protected]

I'm quietly really pleased with having been the mover for this change in @fedify.

Too many ActivityPub servers have put usernames in Actor URLs and it creates a complete mess when wanting to allow users to change their usernames, and created other confusion when you had non-user Actors that you wish to federate.

Here's the PR that prompted the change: github.com/dahlia/fedify/pull/
hollo.social/@fedify/01920e31-

Emelia 👸🏻's avatar
Emelia 👸🏻

@[email protected]

I'm quietly really pleased with having been the mover for this change in @fedify.

Too many ActivityPub servers have put usernames in Actor URLs and it creates a complete mess when wanting to allow users to change their usernames, and created other confusion when you had non-user Actors that you wish to federate.

Here's the PR that prompted the change: github.com/dahlia/fedify/pull/
hollo.social/@fedify/01920e31-

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected] · Reply to Fedify: an ActivityPub server framework's post

The docs now have a section on actor identifiers and usernames.

https://unstable.fedify.dev/manual/actor#actor-identifier-and-webfinger-username

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Starting with v1.0.0, the term handle throughout Fedify will only be used to refer to a fediverse handle (e.g., @[email protected]). An actor's internal unique ID (e.g., b379dbdc-3b4f-4ef4-88c2-fc25632d1c22) will be referred to as identifier and a WebFinger name (e.g., hongminhee) will be referred to as username. The term handle in the API will be retained for the time being for backwards compatibility, but a deprecation warning will be logged and will be deprecated in the future.

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Q: Which does your implementation implement, HTTP Signatures, Linked Data Signatures, or Object Integrity Proofs?

Fedify: Y·E·S!

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

In the next release of , v1.0.0, you'll be able to forward received activities inside an inbox listener without any modifications.

You can preview this feature in v1.0.0-dev.398+5c6e1394 (JSR & npm).

https://unstable.fedify.dev/manual/inbox#forwarding-activities-to-another-server

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Once the next version of , v1.0.0, is released, the API will be stabilized. Are there any features you'd like to see before the API is stabilized?

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Q: Which does your implementation implement, HTTP Signatures, Linked Data Signatures, or Object Integrity Proofs?

Fedify: Y·E·S!

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected] · Reply to Antolius's post

@antolius We're definitely thinking about implementing C2S interactions, and it's certainly on our roadmap! But the problem is that we don't have a de facto standard for authentication yet.

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Once the next version of , v1.0.0, is released, the API will be stabilized. Are there any features you'd like to see before the API is stabilized?

Sam Sethi :pc2red: ⁂'s avatar
Sam Sethi :pc2red:

@[email protected] · Reply to Sean Tilley's post

1/3 @deadsuperhero As someone new to developing ActivityPub apps the poor documentation was a big turn off. @fedify have done a great job in making it easier to build new apps and their documentation is much better. The new book by @evan is also a great read for new AP developers.

However given that the Activity Vocab was defined way back in 2017 by the W3C and Mastodon the biggest AP client still doesn't support all the verbs is a disappointment. e.g summary, listen etc.

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

@squaredot3301 Integrating with more web frameworks is always on Fedify's roadmap, so if there's a web framework you're looking for in particular, open an issue in our issue tracker!

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

In the next release of , v1.0.0, you'll be able to forward received activities inside an inbox listener without any modifications.

You can preview this feature in v1.0.0-dev.398+5c6e1394 (JSR & npm).

https://unstable.fedify.dev/manual/inbox#forwarding-activities-to-another-server

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

started out exclusively for , but now also supports .js and . However, the we created in the early days still features the character from Deno. Should Fedify change its logo now?

OptionVoters
Yes, because it's misleading.5 (28%)
A logo is a logo, no need to change it.13 (72%)
Sean Tilley's avatar
Sean Tilley

@[email protected] · Reply to Darius Kazemi's post

@darius Fedify is super cool. I’ve been eyeing it for some future projects, just gotta get better at JavaScript 😅

It’s pretty wild, though, that you can totally take this library, and spin up a working Fediverse app with it. Having to do all of the federation stuff from scratch seems like it would be a nightmare.

Darius Kazemi's avatar
Darius Kazemi

@[email protected]

Damn... Fedify is really good. It seems like the ActivityPub library I always wanted for Node applications (rather than a reference server like the one I created for ExpressJS).

I love that it's built so you can take an existing app and quickly drop in the federation features you need (like oh okay I need my application to Follow/Accept/Reject/Undo and have the ability to Create an Article but that's it, cool, Fedify has me covered)

fedify.dev/tutorial/basics

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post

One of the benefits of is that you don't have to worry about whether a property of an Activity Vocabulary object has a URL or embeds an actual object. If you need an object, you can call the `getObject()` method (which will fetch a remote object if necessary). If you need a URI, you can access the `objectId` property.

fedify.dev/manual/vocab#object

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

has over 400 stars on GitHub now! 🎊

https://github.com/dahlia/fedify

The header of Fedify's GitHub repository page. It has 401 stars.
The header of Fedify's GitHub repository page. It has 401 stars.
Lobsters's avatar
Lobsters

@[email protected]

Creating your own federated microblog by @hongminhee lobste.rs/s/albrk0
fedify.dev/tutorial/microblog

洪 民憙(ホン・ミンヒ)'s avatar
洪 民憙(ホン・ミンヒ)

@[email protected]

LobstersにFedifyチュートリアル「自分だけのフェディバースのマイクロブログを作ろう!」の英語版を投稿しました。

lobste.rs/s/albrk0/creating_yo

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected]

I submitted the @fedify tutorial “Creating your own federated microblog” to @lobsters!

lobste.rs/s/albrk0/creating_yo

Older →