Fedify: an ActivityPub server framework
Hooray, #Fedify's GitHub repository just hit 300 stars!
Hooray, #Fedify's GitHub repository just hit 300 stars!
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
#Fedify now has a queue for incoming activities and they are automatically retried when they fail. The default retry strategy is good enough (exponential backoff + decorrelated jitter), and it's even fully customizable. Updated also the docs:
https://unstable.fedify.dev/manual/inbox#making-inbox-listeners-non-blocking
You can give it a try by installing 0.12.0-dev.265+cb851932, the latest unstable release:
https://jsr.io/@fedify/[email protected]ev.265+cb851932
https://www.npmjs.com/package/@fedify/fedify/v/0.12.0-dev.265
In the next version of #Fedify, the #RetryPolicy type is introduced to let you fully customize the retry policy of the task queue for incoming and outgoing activities. Of course, you can also simply adjust the parameters of the built-in exponential backoff + decorrelated jitter policy.
Basic implementation of the inbox queue is complete and documentation is being worked on.
https://hollo.social/@fedify/0190687b-1a09-728b-8a0d-bcbd4dca54cd
In the next version of #Fedify, the Context.hostname
, Context.host
, and Context.origin
properties will be added for better multitenancy/virtual hosting support.
https://github.com/dahlia/fedify/issues/66#issuecomment-2198967566
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
When there is no queue, if the process fails, the inbox can just respond with a 500 server error and the sender will resend it.
But with a queue, by the time the inbox responds, it doesn't know if the process will fail because it hasn't run yet. So the sender won't retry whether it fails or not.
So, should it have its own retry logic when there is a queue?
I'm adding a queue for incoming activities in #Fedify, and I have a concern. If an error occurs while processing an activity, should it retry?
https://hollo.social/@fedify/0190687b-1a09-728b-8a0d-bcbd4dca54cd
#Fedify has always been queuing outgoing activities, but not incoming activities. Thanks to @ghost's sponsorship, we are now implementing queues for incoming activities!
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
It was trivial than I expected; #Fedify now supports #ChatMessage type!
I'm not sure if it's new or if I'm just really bad at paying attention, but I just learned about it and I'm so excited about #fedify: https://unstable.fedify.dev/
I think systems that are shaped like fedify are one of the key things needed to really open experimentation and exploration of the possibilities that the fediverse affords.
#Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. 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.
The key features it provides currently are:
• Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
• #WebFinger client and server
• HTTP Signatures
• Middleware for handling webhooks
• #NodeInfo protocol
• #Node.js, #Deno, and #Bun support
• CLI toolchain for testing and debugging
If you're curious, take a look at the Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
If you want a message queue backend for #RabbitMQ as well, please upvote this issue!
#Fedify has supported optional queuing for outgoing activities, with two built-in message queue backends: InProcessMessageQueue
, which is suitable for development, and DenoKvMessageQueue
, which is only available in Deno.
Fedify has also had two built-in cache backends, MemoryKvStore
, which is suitable for development, and DenoKvStore
, which is only available in Deno.
Now, however, by installing the @fedify/redis package, you can use #Redis as both a message queue backend and a cache backend! Unlike DenoKvMessageQueue
and DenoKvStore
, it's also available for #Node.js and #Bun.
This feature was made possible with the support of @ghost.
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. 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.
The key features it provides currently are:
If you're curious, take a look at the #Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
#Fedify now has the official #Hollo account! Please follow @fedify!
https://hollo.social/@fedify/01905d6a-5d70-75bc-881e-d6c155a5051c
Hello, #fediverse! It's the official fedi account of the Fedify, an #ActivityPub server framework!
If you'd like to support the development of #Fedify or #Hollo, you can sponsor me on GitHub!
Introducing #Hollo. Hollo is an #ActivityPub-enabled single-user microblogging software. Although it's for a single user, it also supports creating and running multiple accounts for different topics.
It's headless, meaning you can use existing #Mastodon client apps instead, with its Mastodon-compatible APIs. It has most feature parity with Mastodon. One big difference with Mastodon is that you can use #Markdown in the content of your posts.
Oh, and Hollo is built using #Bun and #Fedify.
Fedify é uma biblioteca TypeScript para construir aplicativos de servidor federado desenvolvidos com ActivityPub e outros padrões, chamados fediverse . 1 Seu objetivo é eliminar a complexidade e o código padrão redundante ao construir um aplicativo de servidor federado, para que você possa se concentrar na lógica de negócios e na experiência do usuário.
Version 0.10.0 of #Fedify, an #ActivityPub server framework, has been released! Starting with this release, Fedify, previously distributed under AGPL 3.0, is now distributed under the MIT License to encourage wider adoption. Here are the major changes:
• In addition to RSA-PKCS#1-v1.5, Fedify now supports Ed25519 for signing and verifying the activities.
• FEP-521a: Multiple key pairs can now be registered for an actor.
• FEP-8b32: Implemented Object Integrity Proofs.
• Added Arrive and Question classes.
Starting with the next release, #Fedify, previously distributed under AGPL 3.0, will be distributed under the MIT License to encourage wider adoption!
🌈 Happy Monday everyone! 🌞
Two #Fediverse news items that make me hopeful about the future of the open web – especially for creators:
✨ #Mastodon is testing a new OpenGraph tag to highlight writers & creators on Mastodon -> https://github.com/mastodon/mastodon/pull/30398
✨ publishing platform @ghost just announced they will use #Fedify to implement #ActivityPub -> https://activitypub.ghost.org/day-4/ (their ActivityPub newsletter is brilliant and hilarious and I could not recommend it more)
@[email protected] · Reply to 洪 民憙 (Hong Minhee) 🤏🏼's post
I had three candidates for the name: Fedilib, Libfedi, and #Fedify, and when I put it to a poll, Fedify was the most popular choice, so it became the current name.
A little backstory about #Fedify's name: I originally wanted to name Fedify FediKit, but I realized that another project was already taking the name, so I had to change it in a hurry before release.
#Ghost In The #Fedify Machine: Making #Fediverse Adoption Easier Again 🔛 @[email protected] (Seize The Day) 📰 https://darnell.day/ghost-in-the-fedify-machine-making-fediverse-adoption-easier-again?pk_campaign=rss-feed
I'm very excited that the #Ghost team has chosen #Fedify to implement #ActivityPub. I've been working closely with the Ghost team, and it's been a lot of fun, and I can't wait to see the ActivityPub implementation at Ghost.
Ghost will be using the open source Fedify server framework to manage the activitypub bits and pieces of their service.
https://activitypub.ghost.org/day-4/?ref=build-log-newsletter
@[email protected] · Reply to 洪 民憙 (Hong Minhee) 🤏🏼's post
Thanks to @silverpill, #Fedify is finally FEP-8b32 compliant! Though it's not ready for general release yet, it's passing tests in the latest main branch. I'll test it with Mitra and other FEP-8b32-compliant implementations, and if it works well, it'll be included in 0.10.0.
You can try it out in version 0.10.0-dev.205+0cbca257.
I just released #Fedify 0.9.1, which fixed one small bug.
@[email protected] · Reply to 洪 民憙 (Hong Minhee) 🤏🏼's post
Implementing Object Integrity Proofs (FEP-8b32) and my implementation is not passing the test vectors. I haven't found the reason for 24 hours… 😫
@[email protected] · Reply to 洪 民憙 (Hong Minhee) 🤏🏼's post
FEP-521a has been implemented in #Fedify.
Actors now have the #assertionMethods property, and the #Multikey class has been added. For example, if you look at the the actor from the Fedify Example Blog (https://fedify-blog.deno.dev/users/fedify-example), you can see that it has the assertionMethods property in addition to the publicKey property.
You can try it out in version 0.10.0-dev.196+55cc34d1.
As a first step towards adding Object Integrity Proofs (FEP-8b32) to #Fedify, I've made it support #Ed25519 keys. I've also enabled multiple keys to be associated with an actor. For example, if you look at the actor from the Fedify Example Blog (https://fedify-blog.deno.dev/users/fedify-example), you'll see that it has two public keys, one for RSA and one for Ed25519.
You can try it out in version 0.10.0-dev.190+4dffb89a.
Did you know? #Fedify offers the markdown-it plugins for parsing #Mastodon-style mentions and hashtags syntax.
• @fedify/markdown-it-mention: https://github.com/dahlia/markdown-it-mention
• @fedify/markdown-it-hashtag: https://github.com/dahlia/markdown-it-hashtag
Check it out!
Version 0.9.0 of #Fedify, an #ActivityPub server framework, has been released! Here are the main changes:
• Added Tombstone, Hashtag, and Emoji classes.
• Added normalizeActorHandle() function to normalize an actor handle. This is needed when the domain of the actor handle is an IDN, or when the domain contains capital letters.
• Added an option to the sendActivity() function, excludeBaseUris, to exclude specified servers from sending activities. This can be used when you don't want to send activities to your own server.
• Added Context.parseUri(), a method to parse actor, object, inbox, and collection URIs.
• The time window for HTTP Signatures verification is now configurable.
• The @fedify/fedify/httpsig module has been renamed to . This is in preparation for implementing additional object integrity proofs other than HTTP Signatures.
• Improved interoperability with #Misskey.
Just set up a Misskey instance for debugging #Fedify…