Fedify: an ActivityPub server framework
The #Fedify repository has reached 600 stars! Thank you everyone!
The #Fedify repository has reached 600 stars! Thank you everyone!
Hollo 0.3.0 released! #Hollo is a single-user federated microblogging software which is #ActivityPub-enabled and powered by #Fedify.
The key changes of this release include:
DRIVE_DISK=fs
and FS_ASSET_PATH
to store media files in the local filesystem. For users who've used S3, no further action is required—but, it's recommended to configure DRIVE_DISK=s3
as DRIVE_DISK
will be required in the future releases.SENTRY_DSN
.You can upgrade to Hollo 0.3.0 using the following ways:
ghcr.io/dahlia/hollo:0.3.0
or simply latest
!stable
branch and switch over to it!#Fedify 1.3.0이 릴리스되었습니다. #OpenTelemetry 서포트들 비롯해 많은 것이 바뀌었으니, 아래 릴리스 노트에서 살펴보세요!
As a side note, most of the new features added in this #Fedify release were commissioned by #Ghost.
https://hollo.social/@fedify/01937890-0cbd-7bee-97eb-08918829d091
The version 1.3.0 of #Fedify, an #ActivityPub server framework, released! The key changes include:
MessageQueue
s for incoming and outgoing activities.Activity
to the corresponding inbox listener. It is useful for invoking an inbox listener for an Activity
enclosed by another Activity
.Context.sendActivity()
and InboxContext.forwardActivity()
methods now reject when they fail to enqueue the task.User-Agent
header, e.g., User-Agent: Fedify/1.3.0 (Deno/2.1.2)
.For details, see the full changelog as well!
I would like to translate #Fedify's docs into Korean and Japanese, the languages I can speak, but the amount of the docs is quite much, so I can't even think of doing it. The maintenance costs for updating the docs also cannot be ignored.
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
#Fedify's @opentelemetry instrumentation works like a charm with @getsentry!
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
@opentelemetry instruments are being added one by one to #Fedify…!
Though we have OpenTelemetry Semantic Conventions 1.28.0, it does not yet define attributes related to the fediverse. So #Fedify is taking the initiative to define semantic attributes related to the ActivityPub protocol and its related protocols. If you have any ideas, please leave a comment!
https://gist.github.com/dahlia/7ad0f197a3a87072707996b2ee14a749
Thanks to @robin_maki, #SvelteKit integration support has been added to #Fedify! This feature will be included in Fedify 1.3.0.
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
#ActivityPub 서버 만들 때 디버깅하기 어려우신가요? #Fedify CLI의 숨은 피처들을 소개합니다!
• authorized fetch가 걸린 API도 쉽게 테스트
• 받은 액티비티의 디테일 보기
• NodeInfo 데이터 비주얼라이제이션
• 로컬 서버 터널링
https://velog.io/@hongminhee/hidden-gems-of-the-fedify-cli-tips-tricks-you-might-have-missed
Did you know the #Fedify CLI can help debug #ActivityPub federation?
Learn about hidden features like:
• Smart object lookup with content negotiation
• Interactive inbox testing with a web UI
• NodeInfo visualization
• Local development tunneling
• And more!
https://dev.to/hongminhee/hidden-gems-of-the-fedify-cli-tips-tricks-you-might-have-missed-54af
The #Hollo v0.2.3 has been released, which fixes a few bugs and brings #Fedify to the latest version, v1.2.7. If you are using the Docker image, you can upgrade by using the ghcr.io/dahlia/hollo:0.2.3
.
My inbox after releasing bug fixes to #Fedify.
내일 서울 서초구 오픈업 플레이그라운드에서 이뤄지는 Open Contribution Jam 2024에 #Fedify 메인테이너(@hongminhee)가 참여합니다. Fedify에 기여해보고 싶은 분들은 와주시면 메인테이너가 성심껏 도와드리겠습니다! 자세한 행사 정보는 아래 링크를 참고하시면 됩니다.
We are going to add instrumentation support for #OpenTelemetry to #Fedify. What kind of spans or events would you like to be instrumented?
Starting with #Fedify 1.3.0, you'll be able to use different message queues for incoming and outgoing activities!
https://unstable.fedify.dev/manual/mq#using-different-message-queues-for-different-tasks
#Fedify 로 페디버스 포스트들 백업을 할 수 있을까.
#fedify #hollo #package ActivityPub server framework in TypeScript https://fedify.dev/
Star History of #Fedify, #Hollo, and #LogTape:
https://star-history.com/#dahlia/fedify&dahlia/logtape&dahlia/hollo&Date
@hongminhee お疲れ様です。HolloとFedifyのチラシが無事届きました〜
KOFなどで配布しますね
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
모두들 스스로만의 #ActivityPub 소프트웨어을 만들어 봅시다! #Fedify 프레임워크를 쓰면 쉽게 할 수 있습니다!
Let's all build your own #ActivityPub implementation! #Fedify makes it easy!
Starting with #Fedify 1.3.0, you can customize the User-Agent
header for every HTTP request that Fedify makes.
Hollo 0.2.0 released! #Hollo is a single-user federated microblogging software which is #ActivityPub-enabled and powered by #Fedify.
The key changes of this release include:
Thanks to @thisismissem, now you can report remote accounts and posts.
Added two-factor authentication support.
Thanks again to @thisismissem, Hollo improved alignment on Mastodon API changes about OAuth and apps.
Thanks again to @thisismissem, RFC 8414 for OAuth Authorization Server metadata endpoint. It will improve interoperability between Hollo and Mastodon-compatible client apps.
Renamed the Data menu from the administration dashboard to Federation, and:
Custom emojis now can be deleted from the administration dashboard.
Thanks to @helge, PORT
and ALLOW_PRIVATE_ADDRESS
environment variables are introduced.
Added a favicon.
Dropped support for Redis, which was an optional dependency.
You can upgrade to Hollo 0.2.0 using the following ways:
To Railway users: Just redeploy the Hollo service!
To Docker users: Switch your Hollo image to ghcr.io/dahlia/hollo:0.2.0
or simply latest
!
To manual installers: Fetch the stable
branch and switch over to it!
Have you heard of Val Town? Val Town is a kind of code pastebin + serverless function.
Actually, #Fedify works just fine with Val Town. Here's a piece of ActivityPub software, implemented in about 170 lines of code, running on Val Town. Of course, it's built with Fedify!
Give it a follow @demo, and it will follow you back.
Curious to see how it was implemented? Check out the source code!
We've added the build guide to the CONTRIBUTING.md
docs in the #Fedify repository. We hope this is helpful for those who want to contribute to Fedify!
https://github.com/dahlia/fedify/blob/main/CONTRIBUTING.md#build
What are your thoughts on Fedify's docs?
Option | Voters |
---|---|
Comprehensive and easy to understand | 4 (67%) |
Comprehensive but hard to understand | 0 (0%) |
Limited but easy to understand | 1 (17%) |
Limited and hard to understand | 1 (17%) |
#fedify
fedify node -b e5n.cc
https://fedify.dev/cli#fedify-node-visualizing-an-instance-s-nodeinfo
minat tapi kayaknya terlalu overkill untuk 1 user instance, butuh postgres, redis dll.
The version 1.2.0 of #Fedify, an #ActivityPub server framework, released! The key changes include:
Added InboxContext.recipient
property. It's useful for determining whether it is a shared inbox or a personal inbox, and whose personal inbox is invoked.
Added getNodeInfo()
function, a NodeInfo client.
Added followedMessage
property, which corresponds to _misskey_followedMessage
, to Actor
type in Activity Vocabulary API.
Log messages now can be traced using LogTape's implicit contexts, which means you can filter log messages by requestId
(an HTTP request identifier) or messageId
(a background task identifier).
Now you can choose an AMQP driver (which supports RabbitMQ) for the message queue in the fedify init
command.
Added the fedify node
subcommand, which fetches the given instance's NodeInfo document and visualizes it in neofetch
-style.
For details, see the full changelog as well!
Continued my experiments with #Fedify and #ActivityPub yesterday and I think I’m confused.
I was trying to make an extension for an Object, and if I understand #JsonLd, the context property contains the definition of any extra property added. I see e.g. the activity streams ns resolves to a nice JSON LD that contains all the properties, but the mastodon one doesn’t resolve to anything? Is it not necessary?
Starting with the next release of #Fedify, v1.2.0, we will support traceable logs for easier debugging. Fedify's traceable logs are implemented using the implicit contexts introduced in LogTape 0.7.0, and most of the logs that Fedify records are given a requestId
or messageId
. This means that logs can be grouped into requests or background tasks for better analysis.
Want to try it out in advance? Try Fedify v1.2.0-dev.468+2e17cd69 (JSR & npm)!
@[email protected] · Reply to 洪 民憙(ホン・ミンヒ)'s post
@[email protected] · Reply to 洪 民憙(ホン・ミンヒ)'s post
As someone who works mainly in the front-end, ActivityPup (and related) always felt quite overwhelming and complicated to understand. I’ve been playing around with #Fedify for the past week or so and the documentation is so good it all just clicked for me! (I think so, at least :p)
Really excited to see what people build as ActivityPub becomes more approachable!
今週土曜日に開催されるOSC 2024 Tokyo/FallにFedify/Hollo合同で出展します!可愛いFedifyのロゴのシールと『自分だけのフェディバースのマイクロブログを作ろう!』日本語版の紙の本を持って行く予定です。よろしくお願いします。
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
Cutting #Fedify stickers with scissors.
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
I'm bringing along the Japanese version of the #Fedify tutorial, Creating your own federated microblog.
Due to the Internet Archive's unavailability, the https://purl.archive.org/socialweb/webfinger context is unable to be loaded, so a patch was made to preload (embed) the JSON-LD context. This patch was applied to #Fedify versions 0.15.3, 1.0.5, and 1.1.1, so please update if you are experiencing this issue.
Latest update from @brewsterkahle (Oct 17, 5:58pm): https://blog.archive.org/2024/10/18/internet-archive-services-update-2024-10-17/
Finally, Hollo 0.1.0 released! #Hollo is a single-user federated microblogging software which is #ActivityPub-enabled and powered by #Fedify.
Hollo has the most of features that Mastodon has except for moderation tools, and also include:
If you're interested in Hollo, please give it a try! There are several ways to install it: using Railway, using Docker (and Docker Compose), or manually.
If you're already using Hollo, please upgrade it to v0.1.0:
ghcr.io/dahlia/hollo:0.1.0
or simply latest
!stable
branch and switch over to it!Fedify 越来越强大了,官方甚至还出了一篇教程: https://fedify.dev/tutorial/microblog
#Fedify
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
Want to build your own #ActivityPub software? Follow the tutorial for #Fedify, the ActivityPub server framework!
The version 1.1.0 of #Fedify, an #ActivityPub server framework, released! The key changes include:
Added uility functions for traversing remote collections. See also the Traversing remote collections section in the docs.
Added EmojiReact
class to Activity Vocabulary API. [FEP-c0e0]
Added successor
property to the Actor
types in the Activity Vocabulary API.
Added DidService
class to Activity Vocabulary API. [FEP-9091]
Added service
property to the Actor
types in the Activity Vocabulary API. [FEP-9091]
The default time window for verifying HTTP Signatures of incoming requests is now an hour (was a minute). This new default window is according to the ActivityPub and HTTP Signatures document.
In the fedify inbox
command's web interface, the Raw Activity tab is added to show the raw JSON object of the received activity.
For details, see the full changelog as well!
The Japanese version of the #Fedify tutorial, Creating your own federated microblog, is now available in paperback!
Note that the AsciiDoc source of the book is fully open source, which is available at this repository!
@[email protected] · Reply to 洪 民憙(ホン・ミンヒ)'s post
印刷所に注文した『自分だけのフェディバースのマイクロブログを作ろう!』の紙の本、到着した‼️
#Fedify takes 20 minutes for GitHub Actions to finish. What do you think?
Option | Voters |
---|---|
That's too slow. Optimize it now. | 0 (0%) |
Not fast, but tolerable. | 0 (0%) |
#Fedify now has an #AMQP driver! This means you can use #RabbitMQ as Fedify's message queue. To use it, first install the @fedify/amqp package, then set it up like below:
import { createFederation } from "@fedify/fedify";
import { AmqpMessageQueue } from "@fedify/amqp";
import { connect } from "amqplib";
const federation = createFederation({
queue: new AmqpMessageQueue(await connect("amqp://localhost")),
// ... other configurations
});
Oh, and we've also added results from AmqpMessageQueue
to our benchmarks.
The #Fedify repository has reached 500 stars! Thank you everyone!
10月26日(土)に開催されるOSC 2024 Tokyo/FallにFedify/Hollo合同で出展します!可愛いFedifyのロゴのシールと『自分だけのフェディバースのマイクロブログを作ろう!』日本語版の紙の本を持って行く予定です。よろしくお願いします。
If you're on the fence about which driver to choose for #Fedify's message queue, here's a benchmark that just came out. In addition to no queue, we compare 5 drivers, for a total of 11 setups:
InProcessMessageQueue
DenoKvMessageQueue
RedisMessageQueue
PostgresMessageQueue
AmqpMessageQueue
InProcessMessageQueue
× 4DenoKvMessageQueue
× 4RedisMessageQueue
× 4PostgresMessageQueue
× 4AmqpMessageQueue
× 4Curious to see the results? Check out the GitHub repository!
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
@thisismissem Here's the benchmark, and while it contains some questionable results, the overall conclusion is as following:
• Response times are much faster with queues than without.
• Overall throughput is better without queues.
• However, some queue setups can achieve throughput close to that of no queue.
This benchmark assumes communication within a single node, so the effect of queues may be greater in real-world networks.
If you're considering creating your own implementation of #ActivityPub, consider #Fedify.
Implementing ActivityPub from scratch requires more than you might think. WebFinger, HTTP Signatures, Linked Data Signatures, Object Integrity Proofs, NodeInfo, queues for sending and receiving activities, followers collection synchronization, remote object lookups, interoperability with Mastodon, Akkoma, Misskey, Threads, and more…
Just use Fedify and feel free to create your own ActivityPub implementation!
独自のActivityPubの実装を作りたい方は、Fedifyを検討してみてください。
ActivityPubをゼロから実装するには、想像以上に多くの物を作る必要が有ります。WebFinger、HTTP Signatures、Linked Data Signatures、Object Integrity Proofs、NodeInfo、アクティビティの送受信のキュー、フォロワーコレクションのシンクロ、リモートオブジェクトの照会、MastodonやMisskey等との相互運用性の為の雑多な処理まで…Fedifyを使えば簡単に自分だけのActivityPubの実装を作る事が出来ます!
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
Adding vocabularies for FEP-9091 to #Fedify.
Did you know that? The #Fedify CLI has a command called fedify lookup
, which can easily look up ActivityStreams objects on servers with authorized fetch (a.k.a. secure mode) enabled by turning on the -a
/--authorized-fetch
flag.
Fedifyを使うのを躊躇う理由が有れば?
Option | Voters |
---|---|
機能不足 | 0 (0%) |
抽象化レベルが低い | 0 (0%) |
TypeScriptに慣れていない、または好みではない | 0 (0%) |
日本語の資料の少なさ | 0 (0%) |
GhostとHollo以外の実例がな | 0 (0%) |
その他(リプライで教えてください) | 0 (0%) |
Let's create your own #ActivityPub implementation using #Fedify!
Are you excited about the #fediverse but find implementing #ActivityPub daunting? Meet #Fedify, a #TypeScript framework that simplifies building federated server apps. Whether you're creating the next Mastodon, Pixelfed, or something entirely new, Fedify has you covered.
Fedify abstracts away the complexities of ActivityPub, letting you focus on your app's unique features. It's designed to work seamlessly with popular web frameworks like Hono, Express, and Fresh.
Check out our step-by-step tutorial to create a microblog: https://fedify.dev/tutorial/microblog
Explore the discussions, contribute, or just star us on GitHub: https://github.com/dahlia/fedify
Join the Fedify community! Questions? Ideas? Find us on Matrix: #fedify:matrix.org.
Let's build a more diverse and interoperable fediverse together with Fedify!
I'm adding the #EmojiReact (FEP-c0e0) class to #Fedify… It will be coming in Fedify 1.1.0.
@[email protected] · Reply to naDne :blobcatmelt2: :debian: 's post
@FiFachik @rf Для тех, кто хочет потестить федерирование для своего бложика с поддержкой #ActivityPub, могу только посоветовать #Fedify. Там есть встроенная команда для подключения к сервису на выбор, который может дать временный домен для тестирования.
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 #framework #typescript #activitypub #foss #opensource #oss #ghostcms #ghostblog #fediverse
Fedify, an ActivityPub framework, has finally released its first stable version, 1.0.0! Here are key changes:
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 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.
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.
Delete(Application)
on fedify inbox
terminationFrom 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.
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.
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!
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
Okay, now #Fedify implements misskey:isCat
property, and it will be shipped with Fedify v1.0.0.
https://github.com/dahlia/fedify/commit/f75c19cf84cabb012e68e2893ce63c10c4416b21
Does #Fedify need to support the misskey:isCat
property?
Option | Voters |
---|---|
Should support it. | 21 (75%) |
Does not need to support it. | 7 (25%) |
Looks like #Fedify v1.0.0 will be released this week! Is there anything you'd like to see added or fixed before then?
In advance of the release of #Fedify v1.0.0, I'm bumping up the versions of dependent packages…
The next version of #Fedify, 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
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
The #Fedify docs now have a section on actor identifiers and #WebFinger usernames.
https://unstable.fedify.dev/manual/actor#actor-identifier-and-webfinger-username
Starting with #Fedify 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.
Q: Which does your #ActivityPub implementation implement, HTTP Signatures, Linked Data Signatures, or Object Integrity Proofs?
Fedifyの次のバージョンであるv1.0.0がリリースされれば、APIは安定化される予定です。APIが安定化する前に入れて欲しい機能は何か有りますか?
#Fedify #fedidev #ActivityPub
QT: https://hollo.social/@fedify/019208ce-cf81-717e-9239-6757a5494510 [参照]
Once the next version of #Fedify, v1.0.0, is released, the API will be stabilized. Are there any features you'd like to see before the API is stabilized?
Once the next version of #Fedify, v1.0.0, is released, the API will be stabilized. Are there any features you'd like to see before the API is stabilized?
In the next release of #Fedify, 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 started out exclusively for #Deno, but now also supports #Node.js and #Bun. However, the #logo we created in the early days still features the character from Deno. Should Fedify change its logo now?
Option | Voters |
---|---|
Yes, because it's misleading. | 5 (28%) |
A logo is a logo, no need to change it. | 13 (72%) |
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
One of the benefits of #Fedify 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.
https://fedify.dev/manual/vocab#object-ids-and-remote-objects
#Fedify has over 400 stars on GitHub now! 🎊
The next version of #Fedify will support #LDSignatures (#RsaSignature2017), which means that Fedify will be able to verify activities forwarded by #Mastodon from other servers.
In addition, activities sent with the Context.sendActivity()
method will have Linked Data Signatures attached in addition to HTTP Signatures if any RSA-PKCS#1-v1.5 key pairs are present.
We were not motivated by implementing Linked Data Signatures, which is already an outdated standard, but we hope this change will lead to better compatibility and interoperability of Fedify apps!
I recently wrote a #Fedify manual in Korean, and then translated it into English and Japanese. It's quite a long post, but it's relatively easy to accomplish with #Claude. Here's how I used it:
• Utilize projects to provide prior knowledge.
• Translate the table of contents first.
• Define a glossary.
• Translate chapter by chapter.
However, this method assumes you speak the target language—it's a way to reduce the labor of #translation, not a way to become fluent in a language you don't know.
Working on @fedify's docs about #LDSignatures… I hope someday #Fedify drop the support for Linked Data Signatures… 😇
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
If you're curious about #Fedify's property hydration, here's the docs for it:
#Fedify has a side effect that when you call the getter method of an Activity Vocabulary object, the property that was internally a URI is populated with the actual ActivityStreams object. Today, someone at Ghost gave us a cool term for this: #hydration.
Imagine what if every website implemented HTTP/TLS themselves. There would be so much fragmentation that we wouldn't see the #interoperability we see today.
To me, that's what the #fediverse looks like today. Mastodon, Pixelfed, etc. have their own implementations of #ActivityPub, WebFinger, HTTP Signatures, etc. and each one behaves slightly differently, which leads to poor interoperability. Adoption of new standards is slow.
I wish each major programming language had something like #Fedify.
I received a request from @ghost today to add #LDSignatures to @fedify for compatibility with #Mastodon, as Mastodon does not plan to implement Object Integrity Proofs (FEP-8b32) for the near future. 😩
However, Mastodon's implementation of LD Signatures does not even use valid JSON-LD properties (despite the name), so I'm not sure how to make it compatible with Mastodon since #Fedify does JSON-LD processing. 🤔
Fedify, an #ActivityPub server framework, has released v0.15.0! The key changes include:
Article
, ChatMessage
, Note
, and Question
classes now have a quoteUrl
property. This property corresponds to three properties at once: as:quoteUrl
, misskey:_misskey_quote
, and fedibird:quoteUri
.Like
to Object | URL
.Context.lookupObject()
method.Link
header or the <link>
/<a>
tag in HTML.-r
/--raw
option to the fedify lookup
command.As a trilingual, I've written the #Fedify's tutorial in three languages:
• English: https://unstable.fedify.dev/tutorial/microblog
• Korean: https://hackmd.io/@hongminhee/fedify-tutorial-ko
• Japanese: https://zenn.dev/hongminhee/books/4a38b6358a027b
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
In the next version of #Fedify, it will allow you to decouple actor URIs from WebFinger usernames with the mapHandle()
method. For example, you can use UUIDs for actor URIs but let users use their own username of choice for their fediverse handle.
한국어판 Fedify 튜토리얼 《나만의 연합우주 마이크로블로그 만들기》를 공개합니다! Fedify나 ActivityPub을 몰라도 차근차근 따라할 수 있게 되어 있으니, ActivityPub 구현에 관심이 있으신 분들은 부디 읽어 주시기 바랍니다. (대신, 조금 깁니다. 😅)
日本語版Fedifyチュートリアル『自分だけのフェディバースのマイクロブログを作ろう!』をZennで公開しました!ActivityPubの実装に興味の有る方々は是非ご覧ください!
We just finished drafting a new tutorial for #Fedify! This tutorial will walk you through the steps of creating your own federated #microblog. It's pretty long, though.
Please read it, give us feedback, and have fun!
The next version of #Fedify will add the Context.lookupObject()
method, which is preferred over the global lookupObject()
function.
I'm guessing the next version of #Fedify might be v1.0.0. 🤔
Are there any features you'd like to see in #Fedify?
Fedifyは、TypeScriptとJavaScriptで書かれたActivityPubサーバーフレームワークです。分散型のソーシャルネットワークを構築するためのサーバーアプリケーションを作る際の複雑さと冗長なコードを排除し、ビジネスロジックとユーザー体験の開発に集中できるようにすることを目指しています。
現在提供している主な機能は以下の通りです:
興味がある方は、Fedifyのウェブサイトをご覧ください!包括的なドキュメント、デモ、チュートリアル、サンプルコードなどが用意されています:
#Fedify #TypeScript #JavaScript #ActivityPub #NodeInfo #Node #Deno #Bun #fedidev
During the development of #Fedify, I ended up with too many #fediverse accounts that I created to test.
Question for those who have followed the #Fedify tutorial: How long did it take you to follow the tutorial?
Option | Voters |
---|---|
30 minutes or shorter | 1 (33%) |
1 hour or shorter | 1 (33%) |
2 hours or shorter | 1 (33%) |
4 hours or shorter | 0 (0%) |
More than 4 hours | 0 (0%) |
#Fedify 튜토리얼 이제 ½도 못 쓴 것 같은데, 目次가 이만큼이다. 다 쓸 수 있을까…? 다 쓰더라도 사람들이 읽고 따라할까?
Today, thanks to @ellemedit, we've added two more example projects to #Fedify!
If you're interested in Fedify and these two frameworks, take a look!
We've released v0.14.0 of #Fedify, the #ActivityPub server framework, with the following key changes:
sendActivity()
method to "followers"
in just the Context
instead of the RequestContext
.Object.toJsonLd()
method by about 3,000 times.source
property to Object
.aliases
property to Actor
, corresponding to ActivityPub's alsoKnownAs
property.fedify init
command now adds default compilerOptions
settings to tsconfig.json and deno.json.Fedify v0.14.0 is available from JSR and npm. See also the full changelog for details.
Happy #fedidev!
@[email protected] · Reply to John Spurlock's post
We've added the Inspecting ActivityPub objects section to the #Fedify docs, introducing BrowserPub and the fedify lookup
command!
https://unstable.fedify.dev/manual/test#inspecting-activitypub-objects
Do you know that? Some of the properties in Activity Vocabulary have been renamed in #Fedify's JavaScript APIs. Below are some examples:
Hollo를 소개합니다!
Hollo는 개인을 위한 연합형 마이크로블로그 소프트웨어입니다. Fedify와 Bun으로 만들어졌으며, #ActivityPub 프로토콜을 통해 다른 인스턴스 및 서비스와 교류할 수 있습니다.
Hollo의 특징은 한 사용자를 위해 설계된 전용 인스턴스라는 점입니다. 이를 통해 사용자는 자신만의 공간을 가지면서도 #Mastodon, #Misskey 및 기타 ActivityPub 지원 서비스의 사용자들과 소통할 수 있습니다.
독자적인 웹 인터페이스는 없지만, Mastodon API와 호환되어 기존의 많은 Mastodon 클라이언트 앱을 사용하여 Hollo에 접근할 수 있습니다. 이로 인해 익숙한 인터페이스로 Hollo를 이용할 수 있습니다.
주요 기능으로는 게시물 작성·편집·삭제, 답글, 미디어 첨부, 투표, 좋아요, 북마크, 고정 등이 있습니다. 또한 프로필 편집, 팔로우/팔로워 관리, 리스트 생성 등도 가능합니다. 더불어 Markdown을 지원하여 게시물이나 프로필의 서식 설정을 쉽게 할 수 있습니다.
Hollo는 현재 개발 초기 단계에 있으며, 지속적으로 기능 추가와 개선이 이루어지고 있습니다. Bun을 사용함으로써 빠른 성능과 효율적인 개발이 이뤄지고 있답니다. 오픈 소스 프로젝트로 GitHub에 공개되어 있으며, 커뮤니티의 기여를 환영합니다.
개인 블로그와 소셜 미디어의 장점을 결합한 Hollo는 프라이버시를 중시하면서도 더 넓은 커뮤니티와의 연결을 원하는 사람들에게 적합한 플랫폼으로 거듭나고 있습니다.
Holloを紹介します!
Holloは、個人向けの連合型マイクロブログソフトウェアです。FedifyとBunを基盤に構築され、ActivityPubプロトコルを通じて他のインスタンスやサービスと連携することができます。
Holloの特徴は、一人のユーザーのために設計された専用のインスタンスという点です。これにより、ユーザーは自分だけのスペースを持ちながら、Mastodon、Misskey、その他のActivityPub対応サービスのユーザーとも交流できます。
独自のウェブインターフェースを持たない代わりに、MastodonのAPIと互換性があるため、既存の多くのMastodonクライアントアプリを使用してHolloにアクセスできます。これにより、使い慣れたインターフェースでHolloを利用することができます。
主な機能には、投稿の作成・編集・削除、返信、メディア添付、投票、お気に入り、ブックマーク、ピン留めなどがあります。また、プロフィール編集、フォロー/フォロワー管理、リスト作成なども可能です。さらに、Markdownをサポートしているため、投稿やプロフィールの書式設定が容易に行えます。
Holloは現在開発の初期段階にあり、継続的に機能の追加や改善が行われています。Bunを使用することで、高速なパフォーマンスと効率的な開発が実現されています。オープンソースプロジェクトとして、GitHubで公開されており、コミュニティからの貢献を歓迎しています。
個人のブログとソーシャルメディアの利点を組み合わせたHolloは、プライバシーを重視しながら、より広いコミュニティとのつながりを求める人々に適したプラットフォームとなっています。
https://github.com/dahlia/hollo
#Hollo #ActivityPub #Mastodon #Markdown #Bun #Fedify #fedidev
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
Haha, I'm writing a #Fedify tutorial following the commit logs of the educational implementation of the microblog I made public the other day.
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
@hongminhee I'd be happy to take a look sometime. I am planning on using #Fedify to build my own ActivityPub server soon and I am pretty new to TypeScript.
The new #Fedify tutorial I'm writing now even includes an explanation of #TypeScript and #JSX for readers who don't know them. As a result, it's getting very long. 😓
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
For educational purpose, I've created a federated microblog example using #Fedify, with a total of about 30 commits, which you can follow step by step.
Now, I'm starting to write a hands-on Fedify tutorial based on this example code. I'll make it public when I'm done!
I've rewritten #Fedify several times and in several languages. The first time it was written in #TypeScript, then #Python, then C#, then back to TypeScript. (It was codenamed FediKit at the time of development.) I settled on TypeScript for the following reasons:
• It has a decent JSON-LD implementation.
• Lots of people use it. (I wanted Fedify to be widely used.)
• It's type-safe enough.
Even if I were to build Fedify again, I would choose TypeScript.
We've patched a vulnerability in the getActorHandle()
function. Versions prior to 0.13.1 and 0.12.3 are affected.
Upgrade immediately:
@lutindiscret @fedify out of interest the MoveTo option that allows a user to move to a different domain, is that possible in #fedify
In the next version (v0.14.0) of #Fedify, the performance of the Object.toJsonLd()
method will be dramatically (~3k ×) faster. This is expected to improve the overall performance of Fedify apps!
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
The database agnosticism of #Fedify as an #ActivityPub server framework is …
Option | Voters |
---|---|
… useful. | 0 (0%) |
… unhelpful. | 0 (0%) |
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
I find that database agnosticism, one of #Fedify's design principles, is a hindrance to raising its abstraction level. 🤔
I feel that the current abstraction level of #Fedify is not high enough which makes the tutorial lengthy, so I'm considering adding a higher-level API. One way would be to add a façade to the @fedify/fedify package, and another way would be to create a sort of metaframework as a separate package (e.g., @fedify/start?). Which way would be better?
Option | Voters |
---|---|
Façade | 0 (0%) |
Metaframework | 0 (0%) |
The JSON-LD processor ended up being #Fedify's bottleneck, so I'm in the process of fixing Fedify to generate JSON-LD without the proper JSON-LD processor.
Fedify, the #ActivityPub server framework, has released v0.13.0. Key changes include:
fedify tunnel
command to expose the local server to the public internet.fedify init
command.Question.closed
property.Question.voters
property.#Fedify v0.13.0 is available now from JSR and npm.
Option | Voters |
---|---|
Koa | 4 (16%) |
Fastify | 5 (20%) |
Oak | 3 (12%) |
Elysia | 3 (12%) |
Next.js | 6 (24%) |
Nuxt.js | 4 (16%) |
Introducing @fedify/express, a package that integrates Express, a popular web framework in Node.js, with Fedify. You can install it with the following command:
npm add @fedify/express
This package provides a middleware called integrateFederation()
that allows you to integrate #Fedify with #Express:
import express from "express";
import { integrateFederation } from "@fedify/express";
import { federation } from "./federation"; // Your `Federation` instance
export const app = express();
app.set("trust proxy", true);
app.use(integrateFederation(federation, (req) => "context data goes here"));
I'm unsure whether to adopt an emerging JavaScript runtime like #Bun or #Deno for #Fedify's tutorial, or stick with traditional #Node.js. 🤔
If I choose Bun/Deno, it comes with built-in #TypeScript support, hot reloading, and a fetch-style HTTP server, so I don't have to explain much about it, but I need to deal with installing Bun/Deno itself.
On the other hand, Node.js can be assumed to be already installed on the reader's system, but they will need to set up TypeScript, hot reloading, etc.
Option | Voters |
---|---|
Bun | 0 (0%) |
Deno | 0 (0%) |
Node.js | 0 (0%) |
Starting with the next release, v0.13.0, the fedify tunnel
command will be added. The following command exposes a local HTTP server running on port 3000 to the public internet:
fedify tunnel 3000
https://unstable.fedify.dev/cli#fedify-tunnel-exposing-a-local-http-server-to-the-public-internet
I ended up implementing the `fedify tunnel` command to eliminate the ngrok installation and sign-up part of the #Fedify tutorial. 😂
https://unstable.fedify.dev/cli#fedify-tunnel-exposing-a-local-http-server-to-the-public-internet
If you've created a new web framework, you can assume that your readers will have some knowledge of HTTP when you write tutorials for it. However, if you have created a new #ActivityPub server framework, you should also explain ActivityPub itself in the tutorials for this framework.
I kept thinking about this while writing the #Fedify framework tutorial. 😩
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
#연합우주 (#fediverse) 개발을 단순화할 준비가 되셨나요? #Fedify 프레임워크를 확인해보세요!
더욱 연결된, 더욱 분산된 웹을 만드는 데 동참해주세요! 🌐 #ActivityPub
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
#Fedify 프레임워크는 #ActivityPub의 실제 쓰임에 집중하고 있습니다. 문서에는 #Mastodon 같은 주요 구현체들이 만든 사실상의 표준에 맞춘 어휘 API 사용법에 대한 가이드가 포함되어 있습니다. 더 적은 고민으로 상호 운용 가능한 앱을 만드세요! 🤝
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
#ActivityPub 인터랙션 디버깅은 꽤 까다롭죠. 그렇지만 #Fedify 툴체인이 도와드립니다! 테스트와 디버깅을 위한 CLI 툴체인을 포함하고 있어 개발과 트러블슈팅이 쉬워집니다. 머리 싸매는 시간을 줄이고 멋진 기능을 만드는 데 더 많은 시간을 쓰세요! 🔍
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
#Fedify 프레임워크는 #연합우주 (#fediverse) 개발에 중요한 기능들을 기본으로 내장하고 있습니다:
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
#Fedify 소개: #연합우주 (#fediverse) 상에 #ActivityPub 서버 앱을 만들기 위한 강력한 #TypeScript 라이브러리! 🚀
Fedify는 연합형 앱의 복잡함을 단순화하여 개발자가 가장 중요한 것—고유한 기능과 사용자 경험—에 집중할 수 있게 해줍니다. Fedify의 특징을 살펴볼까요? 🧵
As a potential #Fedify user, which of the following technologies are you familiar with?
Option | Voters |
---|---|
JavaScript | 17 (14%) |
TypeScript | 13 (11%) |
HTML & CSS | 18 (15%) |
JSX (JavaScript XML) or TSX (TypeScript XML) | 10 (8%) |
HTTP | 14 (11%) |
ActivityPub | 8 (7%) |
Node.js | 13 (11%) |
Unix shell | 12 (10%) |
SQL & relational databases | 14 (11%) |
Digital signatures | 4 (3%) |
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
튜토리얼에서 이렇게 에디터 뭐 쓰라고 이래라 저래라 하는 게 그다지 좋지 않다는 것은 잘 알고 있지만… #Fedify 쓰는데 TypeScript LSP 안 켜두고 코딩하다가 자잘한 타입 에러를 못 보고 지나쳐서 오랫동안 트러블슈팅하는 사람들을 꽤 봤기 때문에 이렇게 Visual Studio Code 쓰라고 할 수밖에 없었다.
I'm writing a new #Fedify #tutorial. If a tutorial on creating an #ActivityPub server needs to deal with persistent data, where should they be stored? I want the tutorial to focus as much as possible on implementing the business logic and as little as possible on other things.
Option | Voters |
---|---|
Regular files | 0 (0%) |
SQLite | 0 (0%) |
MySQL or PostgreSQL | 0 (0%) |
Redis | 0 (0%) |
새 #Fedify 튜토리얼을 써보고 있다.
If you read a #Fedify #tutorial, what #ActivityPub software would you like to see as an #example in the tutorial?
Option | Voters |
---|---|
Microblog (like Mastodon) | 21 (32%) |
Long-form blog (like WordPress) | 10 (15%) |
Photo blog (like Pixelfed) | 7 (11%) |
Forum (like NodeBB) | 6 (9%) |
Link aggregator (like Lemmy) | 9 (14%) |
Much simpler one! | 13 (20%) |
A good issue to contribute to #Fedify for the first time. Anybody interested?
I finally turned the Federation class into an interface now!
https://github.com/dahlia/fedify/commit/4c3015145a10804a5ec8debdc8bb394fe6ed819d
#Fedify, an #ActivityPub server framework, has released v0.12.0. It's a minor release in about a month, so there's quite a few changes:
fedify
command can now also be installed with npm. It can be installed with npm i -g @fedify/cli
in Node.js and bun i -g @fedify/cli
in Bun.fedify init
command to help set up a new Fedify project.ChatMessage
, Move
, Read
, Travel
, View
, TentativeAccept
, and TentativeReject
classes. (Thanks to @moreal!)hostname
, host
, and origin
properties of the Context
.It's available on JSR and npm now, and you can upgrade it using the deno add
command on Deno:
deno add @fedify/fedify@^0.12.0
Or using the bun add
command on Bun:
bun add @fedify/fedify@^0.12.0
Or using the npm add
command on Bun:
npm add @fedify/fedify@^0.12.0
Since #Fedify v0.12.0, when verifying HTTP Signatures or Object Integrity Proofs, it will cache the public keys once fetched. It is okay even if a cached key becomes outdated because a verification failure due to a cached key will invalidate the cache and force a verification retry.
This feature is available for preview in v0.12.0-dev.307+235629d5 (JSR or npm).
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
Due to the details of the behavior of Astro's middleware, it looks like the next #Fedify release (v0.12.0) may not be able to ship with the #Astro integration. 😅
Now that I've created the `fedify init` command, I've been thinking about how to modify #Fedify's #tutorial. If I make Fedify's tutorial use `fedify init`, it could omit the project setup part at the beginning. However, the chance to get some understanding of how things work like in the current tutorial would be lost. 🤔
The fedify
command is now available on #npm! You can install it using the following command:
npm install -g @fedify/cli
Or if you use #Bun:
bun install -g @fedify/cli
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
Currently, #Fedify's tutorial is lengthy in explaining how to set up a project. If there was a command like `fedify init`, that part could be greatly shortened.
I finally realized why so many frameworks come with an init/new command. Having that command makes for shorter tutorials!
I wrote a laravel package to add federation support to various internal @pixelfed projects like FediDB and PubKit
I might just polish this up and ship it, so laravel devs can add federation support with a few lines of code
the fedify of php ✨
finally getting to the #fedify part of my deno-fedify experiment, first thing working is the nodeinfo support
#Fedify offers robust logging capabilities through integration with LogTape. This feature allows you to easily debug and monitor your Fedify app!
To enable #logging, simply install the @logtape/logtape
package and configure it in your app's entry point:
import { configure, getConsoleSink } from "@logtape/logtape";
await configure({
sinks: { console: getConsoleSink() },
filters: {},
loggers: [
{ category: "your-app", sinks: ["console"], level: "debug" },
{ category: "fedify", sinks: ["console"], level: "info" },
],
});
Fedify uses hierarchical categories for fine-grained control over log output. Key categories include ["fedify", "federation", "http"]
for HTTP requests/responses and ["fedify", "federation", "inbox"]
/["fedify", "federation", "outbox"]
for incoming/outgoing activities. (There are more categories.)
With #LogTape integration, you gain valuable insights into your Fedify app's behavior, making troubleshooting and optimization much more straightforward!
@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post
#Fedify's security policy is just written!
I want to create good first issues for @fedify, but I don't have a good idea of appropriate tasks for first-time contributors. Any ideas?
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
Ready to simplify your #fedidev? Check out #Fedify!
Join us in building a more connected and decentralized web! 🌐 #ActivityPub
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
#Fedify also focuses on the practical side of #ActivityPub. Its docs includes guidance on using the vocabulary API in line with de facto norms set by popular implementations like #Mastodon. Build more interoperable apps with less headache! 🤝
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
Debugging #ActivityPub interactions can be tricky, but #Fedify's got your back! It includes a CLI toolchain for testing and debugging, making development and troubleshooting a breeze. Spend less time scratching your head and more time building awesome features! 🔍
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
Out of the box, #Fedify comes packed with features crucial for #fediverse development:
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
Flexibility is key! #Fedify isn't a full-stack solution—it's designed to work alongside your favorite web frameworks. Whether you're using #Astro, #Hono, #Fresh, or others, Fedify has got you covered with easy integration options. Build your #fediverse app, your way! 🛠️
@[email protected] · Reply to Fedify: an ActivityPub server framework's post
One of #Fedify's strongest features is its type-safe vocabulary objects. These represent the Activity Vocabulary and vendor-specific extensions, ensuring robust and safe code when working with ActivityPub objects and activities. Say goodbye to runtime errors and hello to confident coding! 💪🏼
Introducing #Fedify: A powerful #TypeScript library for building #ActivityPub server apps in the #fediverse! 🚀
Fedify aims to simplify the complex world of federated apps, allowing developers to focus on what matters most—their unique features and user experience. Let's explore what makes Fedify stand out! 🧵
In #Fedify's next release, v0.12.0, we'll be adding support for integration with Astro, a web framework for content-driven websites.
We released #Fedify 0.9.2, 0.10.1, and 0.11.1, which patched the last reported #vulnerability, CVE-2024-39687, but the vulnerability of SSRF attacks via DNS rebinding still exists, so we released Fedify 0.9.3, 0.10.2, and 0.11.2, which fixes it.
If you are using an earlier version, please update as soon as possible.
Thanks to @benaryorg for reporting the vulnerability!
We're releasing @fedify/h3! Now you can integrate #Fedify with h3, an HTTP server framework behind Nitro, Analog, Vinxi, SolidStart, TanStack Start, and other many web frameworks.
Woah, #ghost is now live in the #fediverse with @index.
Absolutely outstanding progress! #fedify definitely deserves a great deal of recognition for making this possible. 😎
Feeling like we now have tooling in place to fediverse all things. 😅
Finally, @ghost has open sourced their #ActivityPub implementation powered by #Fedify! For Fedify users, this means another production-grade example code.
If you'd like to follow updates on #Ghost's ActivityPub implementation, you can do so by following @index!
To #Fedify users: please update your Fedify as soon as possible!
https://hollo.social/@fedify/019080c7-c784-755d-a6f2-d1f91f2c5709
CVE-2024-39687, a vulnerability that could potentially allow a Server Side Request Forgery (SSRF) attack, was discovered in #Fedify and a security patch has been applied to fix it. The patched versions are 0.9.2, 0.10.1, and 0.11.1, respectively. If you are using an earlier version, please update as soon as possible.
Thanks to @thisismissem for reporting the vulnerability!
I was planning to play around with #fedify but got sidetracked into learning #deno #fresh #preact #tailwindcss ...
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. Two big differences with Mastodon is that you can use #Markdown in the content of your posts and you can quote another post.
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…