Fedify: an ActivityPub server framework's avatar

Fedify: an ActivityPub server framework

@[email protected] · 6 following · 336 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

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

@[email protected]

10月26日(土)に開催されるOSC 2024 Tokyo/FallにFedify/Hollo合同で出展します!可愛いFedifyのロゴのシールと『自分だけのフェディバースのマイクロブログを作ろう!』日本語版の紙の本を持って行く予定です。よろしくお願いします。

https://event.ospn.jp/osc2024-fall/

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

@[email protected]

Fedify is an server framework in & . 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 website! There's comprehensive docs, a demo, a tutorial, example code, and more:

https://fedify.dev/

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

@[email protected]

Hello, ! It's the official fedi account of the Fedify, an server framework!

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

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

내일 행사를 위해 급하게 처음으로 기여하는 분들을 위한 이슈를 만들고 있습니다!

Fedify 저장소의 이슈 목록.

• Display icon/image on fedify lookup [enhancement, good first issue]
• fedify node breaks favicon on terminal emulators without truecolor [bug, good first issue]
• Use Fedify to the latest version in example projects [good first issue]
• Specify engines property to package.json [good first issue]
• More examples [documentation, good first issue, help wanted]
Fedify 저장소의 이슈 목록. • Display icon/image on fedify lookup [enhancement, good first issue] • fedify node breaks favicon on terminal emulators without truecolor [bug, good first issue] • Use Fedify to the latest version in example projects [good first issue] • Specify engines property to package.json [good first issue] • More examples [documentation, good first issue, help wanted]
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

내일 서울 서초구 오픈업 플레이그라운드에서 이뤄지는 Open Contribution Jam 2024에 메인테이너(@hongminhee)가 참여합니다. Fedify에 기여해보고 싶은 분들은 와주시면 메인테이너가 성심껏 도와드리겠습니다! 자세한 행사 정보는 아래 링크를 참고하시면 됩니다.

https://festa.io/events/6342

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

@[email protected]

내일 서울 서초구 오픈업 플레이그라운드에서 이뤄지는 Open Contribution Jam 2024에 메인테이너(@hongminhee)가 참여합니다. Fedify에 기여해보고 싶은 분들은 와주시면 메인테이너가 성심껏 도와드리겠습니다! 자세한 행사 정보는 아래 링크를 참고하시면 됩니다.

https://festa.io/events/6342

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

@[email protected]

We are going to add instrumentation support for to . What kind of spans or events would you like to be instrumented?

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

@[email protected]

Have you heard of Val Town? Val Town is a kind of code pastebin + serverless function.

Actually, 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!

https://www.val.town/v/minhee/FedifyOnValTown

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

@[email protected]

Starting with 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

Using different message queues for different tasks

This API is available since Fedify 1.3.0.

In some cases, you may want to use different message queues for different tasks, such as using a faster-but-less-persistent queue for outgoing activities and a slower-but-more-persistent queue for incoming activities. To achieve this, you can pass FederationQueueOptions to the CreateFederationOptions.queue option.

For example, the following code shows how to use a PostgresMessageQueue for the inbox and a RedisMessageQueue for the outbox:

const federation = createFederation<void>({
  queue: {
    inbox: new PostgresMessageQueue(
      postgres("postgresql://user:pass@localhost/db")
    ),
    outbox: new RedisMessageQueue(() => new Redis()),
  },
  // ... other options
});

Or, you can provide a message queue for only the inbox or outbox by omitting the other:

const federation = createFederation<void>({
  queue: {
    inbox: new PostgresMessageQueue(
      postgres("postgresql://user:pass@localhost/db")
    ),
    // outbox is not provided; outgoing activities will not be queued
  },
  // ... other options
});
Using different message queues for different tasks This API is available since Fedify 1.3.0. In some cases, you may want to use different message queues for different tasks, such as using a faster-but-less-persistent queue for outgoing activities and a slower-but-more-persistent queue for incoming activities. To achieve this, you can pass FederationQueueOptions to the CreateFederationOptions.queue option. For example, the following code shows how to use a PostgresMessageQueue for the inbox and a RedisMessageQueue for the outbox: const federation = createFederation<void>({ queue: { inbox: new PostgresMessageQueue( postgres("postgresql://user:pass@localhost/db") ), outbox: new RedisMessageQueue(() => new Redis()), }, // ... other options }); Or, you can provide a message queue for only the inbox or outbox by omitting the other: const federation = createFederation<void>({ queue: { inbox: new PostgresMessageQueue( postgres("postgresql://user:pass@localhost/db") ), // outbox is not provided; outgoing activities will not be queued }, // ... other options });
taichan's avatar
taichan

@[email protected]

fedify使ったAPubリレーの実装組みたいと思ってたの急に思い出した

^Kur0den\d{4}$ :irai_houki_tyuu:'s avatar
^Kur0den\d{4}$ :irai_houki_tyuu:

@[email protected]

暇なときに読もうと思ってもってきたfedify本を読んでる
物理本、やっぱり良き

モナコ広告 :fedibird1: @技術・雑談's avatar
モナコ広告 :fedibird1: @技術・雑談

@[email protected]

Fedify本、ついに完走!
他鯖のフォロイーの投稿を読めるようになったぞい :blobcatalt:

monaco koukoku's microblog
フォローボタン・投稿ボタン・マイクロブログのタイムラインがある。
monaco koukoku's microblog フォローボタン・投稿ボタン・マイクロブログのタイムラインがある。
もちもちずきん :teto_zuho: 🍆's avatar
もちもちずきん :teto_zuho: 🍆

@[email protected]

帰ったらFedifyの本読むんや

段風桜 Dampuzakura's avatar
段風桜 Dampuzakura

@[email protected]

じゃあもうそれこそFedifyでPixelfedみたいなやつ作るか

もちもちずきん :teto_zuho: 🍆's avatar
もちもちずきん :teto_zuho: 🍆

@[email protected]

Fedify使ってGoogle+そっくりさん作りたいかもしれない

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

@[email protected]

Star History of , , and :

star-history.com/#dahlia/fedif

Star History of Fedify, Hollo, and LogTape.
Star History of Fedify, Hollo, and LogTape.
Renaud Chaput's avatar
Renaud Chaput

@[email protected] · Reply to Renaud Chaput's post

@Montreal_Weather But if you plan to have this many bots, I would encourage you to not rely on Mastodon for those bots, but implement your own (very simple) ActivityPub software, it will be much easier for you.
For example see shkspr.mobi/blog/2024/02/a-tin, or fedify.dev for NodeJS

モナコ広告 :fedibird1: @技術・雑談's avatar
モナコ広告 :fedibird1: @技術・雑談

@[email protected]

ようやくFedifyを触り始めた。WSL+DockerでNode.jsの環境をサクッと作って、コードはVSCodeで書けるようにした。後から環境設定が取っ散らからなくて良さそう。

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

@[email protected]

Flyers for and to be used at an open source event in Japan!

https://mstdn.y-zu.org/@Yohei_Zuho/113440544215822210

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

@[email protected] · Reply to Sebastian Lasse's post

@sl007 Okay, we're adding a mention for it!

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

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

for @loops!

The terminal screen of the output of the `fedify node loops.video` command:

loops.video
===========
Software:
  loops v0.1.0
  https://joinloops.org/
  https://github.com/px-loops/loopd
Protocols:
  activitypub
Users:
  8,726 (total)
  8,726 (active half year)
  8,726 (active month)
Local posts:
  1,195
Local comments:
  819
Open registrations:
  Yes
The terminal screen of the output of the `fedify node loops.video` command: loops.video =========== Software: loops v0.1.0 https://joinloops.org/ https://github.com/px-loops/loopd Protocols: activitypub Users: 8,726 (total) 8,726 (active half year) 8,726 (active month) Local posts: 1,195 Local comments: 819 Open registrations: Yes
洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected]

for .social! :pixelfed:

The terminal screen of the output of the `fedify node pixelfed.social` command:

pixelfed.social
===============
Software:
  pixelfed v0.12.3
Protocols:
  activitypub
Users:
  124,264 (total)
  22,376 (active half year)
  7,212 (active month)
Local posts:
  35,773,844
Local comments:
  0
Open registrations:
  No
The terminal screen of the output of the `fedify node pixelfed.social` command: pixelfed.social =============== Software: pixelfed v0.12.3 Protocols: activitypub Users: 124,264 (total) 22,376 (active half year) 7,212 (active month) Local posts: 35,773,844 Local comments: 0 Open registrations: No
💜 Wysteria 🪷🪷🪷's avatar
💜 Wysteria 🪷🪷🪷

@[email protected]

neofetch, but for ActivityPub servers #FedifyNode

Screenshot of the terminal output of the fedify node command, which resembles Neofetch. Output:

baraag.net
==========
Software:
  mastodon v4.3.1
Protocols:
  activitypub
Users:
  294,891 (total)
  66,290 (active half year)
  44,517 (active month)
Local posts: 
  14,734,899
Local comments:
  0
Open registrations:
  No
Screenshot of the terminal output of the fedify node command, which resembles Neofetch. Output: baraag.net ========== Software: mastodon v4.3.1 Protocols: activitypub Users: 294,891 (total) 66,290 (active half year) 44,517 (active month) Local posts: 14,734,899 Local comments: 0 Open registrations: No
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected] · Reply to Sebastian Lasse's post

@sl007 That's good idea! We will add a list of projects that use Fedify soon!

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

@[email protected]

Starting with 1.3.0, you can customize the User-Agent header for every HTTP request that Fedify makes.

https://unstable.fedify.dev/manual/federation#useragent

userAgent

This API is available since Fedify 1.3.0.

The options for making User-Agent header in the HTTP requests that Fedify makes. By default, it contains the name and version of the Fedify library, and the name and version of the JavaScript runtime, e.g.:

Fedify/1.3.0 (Deno/2.0.4)
Fedify/1.3.0 (Node.js/v22.10.0)
Fedify/1.3.0 (Bun/1.1.33)

You can customize the User-Agent header by providing options like software and url. For example, if you provide the following options:

{
  software: "MyApp/1.0.0",
  url: "https://myinstance.com/"
}

The User-Agent header will be like:

MyApp/1.0.0 (Fedify/1.3.0; Deno/2.0.4; +https://myinstance.com/)

Or, you can rather provide a custom User-Agent string directly instead of an object for options.
userAgent This API is available since Fedify 1.3.0. The options for making User-Agent header in the HTTP requests that Fedify makes. By default, it contains the name and version of the Fedify library, and the name and version of the JavaScript runtime, e.g.: Fedify/1.3.0 (Deno/2.0.4) Fedify/1.3.0 (Node.js/v22.10.0) Fedify/1.3.0 (Bun/1.1.33) You can customize the User-Agent header by providing options like software and url. For example, if you provide the following options: { software: "MyApp/1.0.0", url: "https://myinstance.com/" } The User-Agent header will be like: MyApp/1.0.0 (Fedify/1.3.0; Deno/2.0.4; +https://myinstance.com/) Or, you can rather provide a custom User-Agent string directly instead of an object for options.
wolf aliceif's avatar
wolf aliceif

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

@aliceif

console output for fedify node hollo.x27.one
on the left, an ascii art version of the orange on black x27 server icon
on the right, information

Software:
  hollo v0.2.0
  https://docs.hollo.social/
  https://github.com/dahlia/hollo
Protocols:
  activitypub
Outbound services:
  atom1.0
Users:
  2 (total)
  1 (active half year)
  1 (active month)
Local posts:
  19
Local comments:
  16
Open registrations:
  No
console output for fedify node hollo.x27.one on the left, an ascii art version of the orange on black x27 server icon on the right, information Software: hollo v0.2.0 https://docs.hollo.social/ https://github.com/dahlia/hollo Protocols: activitypub Outbound services: atom1.0 Users: 2 (total) 1 (active half year) 1 (active month) Local posts: 19 Local comments: 16 Open registrations: No
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Starting with 1.3.0, you can customize the User-Agent header for every HTTP request that Fedify makes.

https://unstable.fedify.dev/manual/federation#useragent

userAgent

This API is available since Fedify 1.3.0.

The options for making User-Agent header in the HTTP requests that Fedify makes. By default, it contains the name and version of the Fedify library, and the name and version of the JavaScript runtime, e.g.:

Fedify/1.3.0 (Deno/2.0.4)
Fedify/1.3.0 (Node.js/v22.10.0)
Fedify/1.3.0 (Bun/1.1.33)

You can customize the User-Agent header by providing options like software and url. For example, if you provide the following options:

{
  software: "MyApp/1.0.0",
  url: "https://myinstance.com/"
}

The User-Agent header will be like:

MyApp/1.0.0 (Fedify/1.3.0; Deno/2.0.4; +https://myinstance.com/)

Or, you can rather provide a custom User-Agent string directly instead of an object for options.
userAgent This API is available since Fedify 1.3.0. The options for making User-Agent header in the HTTP requests that Fedify makes. By default, it contains the name and version of the Fedify library, and the name and version of the JavaScript runtime, e.g.: Fedify/1.3.0 (Deno/2.0.4) Fedify/1.3.0 (Node.js/v22.10.0) Fedify/1.3.0 (Bun/1.1.33) You can customize the User-Agent header by providing options like software and url. For example, if you provide the following options: { software: "MyApp/1.0.0", url: "https://myinstance.com/" } The User-Agent header will be like: MyApp/1.0.0 (Fedify/1.3.0; Deno/2.0.4; +https://myinstance.com/) Or, you can rather provide a custom User-Agent string directly instead of an object for options.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

We're fixing all HTTP requests from Fedify to include the proper User-Agent header.

Poes's avatar
Poes

@[email protected]

single file activity pub:

1. gitlab.com/edent/activity-bot/ from @Edent
2. val.town/v/minhee/FedifyOnValT from @[email protected]

(仮)'s avatar
(仮)

@[email protected]

origin指定で自動的にNodeinfoを取ってきてパースするとか普通に便利な機能が多い

RE:
https://misskey.io/notes/a04wampe1y1509us

(仮)'s avatar
(仮)

@[email protected]

fedify、既存のアプリにサクっとAP対応させるのに便利かもしれない

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

@[email protected]

Have you heard of Val Town? Val Town is a kind of code pastebin + serverless function.

Actually, 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!

https://www.val.town/v/minhee/FedifyOnValTown

네이버 타이머's avatar
네이버 타이머

@[email protected]

Fedify lookup 생각보다 유용해 보이긴 하는데
(이거저거 들쑤셔볼때 액터 사이닝 안되어있어서 존나귀찮은적 많음)

맹꽁이's avatar
맹꽁이

@[email protected]

심심해서 포인트리스 fedify node -b로 출력해봤더니 파비콘 다 깨짐 ㅋㅋㅋㅋㅋㅋ
그리고 포인트리스 꽤 큰 인스턴스였구나
@Native

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

@[email protected]

We've added the build guide to the CONTRIBUTING.md docs in the repository. We hope this is helpful for those who want to contribute to Fedify!

https://github.com/dahlia/fedify/blob/main/CONTRIBUTING.md#build

面条's avatar
面条

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

@hongminhee

totegamma's avatar
totegamma

@[email protected]

白背景が抜かれてしまっているが、一応弊インスタンスも(-b付きで)fetchできるようになった b付きじゃなくてもいけるように整えていくぞ

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

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

If Fedify's docs should be translated, what languages should it be in?

OptionVoters
简体中文4 (7%)
Español4 (7%)
Português6 (11%)
Français5 (9%)
Русский5 (9%)
हिन्दी4 (7%)
Bahasa Indonesia5 (9%)
日本語13 (23%)
اَلْعَرَبِيَّةُ4 (7%)
한국어7 (12%)
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

What are your thoughts on Fedify's docs?

OptionVoters
Comprehensive and easy to understand4 (67%)
Comprehensive but hard to understand0 (0%)
Limited but easy to understand1 (17%)
Limited and hard to understand1 (17%)
gábor ugray's avatar
gábor ugray

@[email protected]

Reposting with
@samplereality @muffinista

Is this the time to launch a new botsinspace, based not on Mastodon code but something like , or even RSS Parrot's minimal Go codebase? A specialized service might be more affordable to operate?

But expertise is clearly needed to detect and block bandwidth-hungry scrapers and other bandits... This needs to be a team effort.

Thoughts, anyone?

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

@[email protected]

Visualize your server in the fediverse with the fedify node command and share it with us using the hashtag!

(See also how to install the fedify command.)

The result of fedify node https://hollo.social/@fedify command. The NodeInfo document is visualized along with the favicon.
The result of fedify node https://hollo.social/@fedify command. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup venera.social. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup venera.social. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup misskey.io. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup misskey.io. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup fosstodon.org. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup fosstodon.org. The NodeInfo document is visualized along with the favicon.
猫茶🍵's avatar
猫茶🍵

@[email protected]

いろんな鯖さんのfaviconを描画したくてついにfedifyをインストールした :blob_dancefloor:
楽しい!かわいい :blob_lovepunch:

Caipira's avatar
Caipira

@[email protected]


로고 출력 은근 잘 나왔다.

Ch. :animal_feed_trickcal:'s avatar
Ch. :animal_feed_trickcal:

@[email protected] · Reply to Ch. :animal_feed_trickcal:'s post

🤔
미스키 / 체리픽 안 됨

Porlam Yuliaskarna Nicla's avatar
Porlam Yuliaskarna Nicla

@[email protected]

:ablobaww:

Ch. :animal_feed_trickcal:'s avatar
Ch. :animal_feed_trickcal:

@[email protected]



파비콘을 이미지화해주는군요

fosstodon.org/@hongminhee/113401254560735839

Charles Chin's avatar
Charles Chin

@[email protected]


fedify node -b e5n.cc

fedify.dev/cli#fedify-node-vis

fedify node command
fedify node command
NTSK's avatar
NTSK

@[email protected]

:neocat_googly:

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

@[email protected]

여러분의 인스턴스를 `fedify node` 커맨드를 써서 `neofetch` 스타일로 비주얼라이즈 해보고, 해시태그와 함께 올려보세요!

`fedify` 커맨드를 깔려면 아래 링크에 적힌대로 따라하시면 됩니다!

fedify.dev/cli#installation

`fedify node -b misskey.io` 커맨드의 아웃풋.
`fedify node -b misskey.io` 커맨드의 아웃풋.
`fedify node -b venera.social` 커맨드의 아웃풋.
`fedify node -b venera.social` 커맨드의 아웃풋.
`fedify node https://hollo.social/@fedify` 커맨드의 아웃풋.
`fedify node https://hollo.social/@fedify` 커맨드의 아웃풋.
`fedify node fosstodon.org` 커맨드의 아웃풋.
`fedify node fosstodon.org` 커맨드의 아웃풋.
const c30 = "せど";'s avatar
const c30 = "せど";

@[email protected]

c30's avatar
c30

@[email protected]

^Kur0den\d{4}$ :irai_houki_tyuu:'s avatar
^Kur0den\d{4}$ :irai_houki_tyuu:

@[email protected]

➜  ~ fedify node -b chpk.kur0den.net
✔ NodeInfo document fetched.
chpk.kur0den.net
================
Software:
  cherrypick v4.12.0
  https://github.com/kokonect-link/cherrypick
  https://github.com/kokonect-link/cherrypick
Protocols:
  activitypub
Outbound services:
  atom1.0
  rss2.0
Users:
  8 (total)
Local posts:
  41,891
Local comments:
  0
Open registrations:
  No

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

@[email protected]

皆さんのフェディバース上のサーバーを`fedify node`コマンドで可視化して「」ハッシュタグで共有してください!
QT: hollo.social/@fedify/0192e1c1-
[参照]

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

@[email protected]

Visualize your server in the fediverse with the fedify node command and share it with us using the hashtag!

(See also how to install the fedify command.)

The result of fedify node https://hollo.social/@fedify command. The NodeInfo document is visualized along with the favicon.
The result of fedify node https://hollo.social/@fedify command. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup venera.social. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup venera.social. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup misskey.io. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup misskey.io. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup fosstodon.org. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup fosstodon.org. The NodeInfo document is visualized along with the favicon.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Visualize your server in the fediverse with the fedify node command and share it with us using the hashtag!

(See also how to install the fedify command.)

The result of fedify node https://hollo.social/@fedify command. The NodeInfo document is visualized along with the favicon.
The result of fedify node https://hollo.social/@fedify command. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup venera.social. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup venera.social. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup misskey.io. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup misskey.io. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup fosstodon.org. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup fosstodon.org. The NodeInfo document is visualized along with the favicon.
poes :pla:'s avatar
poes :pla:

@[email protected]

#fedify

minat tapi kayaknya terlalu overkill untuk 1 user instance, butuh postgres, redis dll.

Fedify CLI : node info for kauaku.us
Fedify CLI : node info for kauaku.us
洪 民憙(ホン・ミンヒ)'s avatar
洪 民憙(ホン・ミンヒ)

@[email protected]

misskey.ioに対するfedify nodeコマンドの出力結果。

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

@[email protected]

It's the output of the fedify node command for fosstodon.org.

The output of the fedify node command for fosstodon.org.
The output of the fedify node command for fosstodon.org.
aliceif's avatar
aliceif

@[email protected]

post your neofetch fedify node outputs!
https://fedify.dev/cli

console output for fedify node mkultra.x27.one -b
on the left, an ascii art version of the lily flowers server icon
on the right, information
Software:
  misskey v2024.10.1
  https://misskey-hub.net/
Protocols:
  activitypub
Outbound services:
  atom1.0
  rss2.0
Users:
  17 (total)
Local posts:
  8,559
Local comments:
  0
Open registrations:
  No
console output for fedify node mkultra.x27.one -b on the left, an ascii art version of the lily flowers server icon on the right, information Software: misskey v2024.10.1 https://misskey-hub.net/ Protocols: activitypub Outbound services: atom1.0 rss2.0 Users: 17 (total) Local posts: 8,559 Local comments: 0 Open registrations: No
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

The version 1.2.0 of , an server framework, released! The key changes include:

For details, see the full changelog as well!

Fedify 1.2.0 is available at JSR and npm.

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

@[email protected]

Starting with the next release of , 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)!

Emelia 👸🏻's avatar
Emelia 👸🏻

@[email protected] · Reply to colin mitchell's post

botsin.space PSA

@muffinista that's quite sad news, but I understand it.

Is your fork of Mastodon open-source? (it should be but y'know)

I'm thinking maybe the next-generation botsin.space could be running something more specialised for bots?

e.g., something written on @fedify instead of mastodon

gábor ugray's avatar
gábor ugray

@[email protected]

Is this the time to launch a new botsinspace, based not on Mastodon code but something like , or even RSS Parrot's minimal Go codebase? A specialized service might be more affordable to operate?

But expertise is clearly needed to detect and block bandwidth-hungry scrapers and other bandits... This needs to be a team effort.

Thoughts, anyone?

muffinlabs.com/posts/2024/10/2

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

@[email protected]

The next release of Fedify will introduce the fedify node command, which fetches the NodeInfo of the asked instance and visualizes it in neofetch-style.

The result of fedify node https://hollo.social/@fedify command. The NodeInfo document is visualized along with the favicon.
The result of fedify node https://hollo.social/@fedify command. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup venera.social. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup venera.social. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup fosstodon.org. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup fosstodon.org. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup misskey.io. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup misskey.io. The NodeInfo document is visualized along with the favicon.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

The next release of Fedify will introduce the fedify node command, which fetches the NodeInfo of the asked instance and visualizes it in neofetch-style.

The result of fedify node https://hollo.social/@fedify command. The NodeInfo document is visualized along with the favicon.
The result of fedify node https://hollo.social/@fedify command. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup venera.social. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup venera.social. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup fosstodon.org. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup fosstodon.org. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup misskey.io. The NodeInfo document is visualized along with the favicon.
The result of fedify lookup misskey.io. The NodeInfo document is visualized along with the favicon.
Emelia 👸🏻's avatar
Emelia 👸🏻

@[email protected]

If you're running GoToSocial prior to v0.17.0, please, for the love of all good developers sanity, please upgrade.

GoToSocial prior to v0.17.0 had a broken JSON-LD context, which prevents federation from working correctly with some servers (e.g., anything built on Fedify)

Screenshot of GoToSocial versions according to FediDB, something like 25% of servers are pre version 0.17.0
Screenshot of GoToSocial versions according to FediDB, something like 25% of servers are pre version 0.17.0
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

The translation of @monaco_koukoku's review on the Japanese version of Creating your own federated microblog:

I read about 70% of the Fedify book on the plane. It was carefully explained step by step, and I could easily understand the contents. Maybe it's because I have researched on implementing ActivityPub before, but I got the impression that I can create it easily. It is also good that there are plenty of ways to check how the implementation works. (I didn't know such a service existed…)

Fedify's only role is to speak ActivityPub, so you need to write your own UI and store data in a database (examples of each are included), but this also means that you can use any UI framework or relational database you like, which opens up a wide range of application possibilities. However, if Fedify does nothing too much, it will just be a hassle, so it is probably a good balance between the two. (Note: I'm saying this before I've even gotten around to doing it myself yet.)

https://fedibird.com/@monaco_koukoku/113378450321946172

モナコ広告 :fedibird1: @技術・雑談's avatar
モナコ広告 :fedibird1: @技術・雑談

@[email protected]

Fedify本、飛行機の中で7割くらい読んだ。
丁寧に順を追って解説されていて、すんなり内容が入ってきた。以前ActivityPubの実装を調べたことがあるからかもしれないが、すぐ作れそうな印象を受けた。実装の動作確認方法が豊富なのも良い。(こんなサービスあったんだ、ってなった)

Fedifyの役割はAPを喋ることだけなので、UIもDBへの保存処理も自分で書く必要があるが(それぞれ実装例は付いている)、逆に言えば好きなUIフレームワークやRDBを使えるということを意味しており、応用可能性が広がる。しかしFedifyが何もしなさすぎても面倒なだけなので、そこのバランスがよくできているということだろう。(※まだ自分で手を動かす前の段階で言っている)

Emelia 👸🏻's avatar
Emelia 👸🏻

@[email protected] · Reply to Emelia 👸🏻's post

This would propagate through @fedify to implementations (e.g., Hollo) where they would fail to lookup the @context for schema.org, which would prevent fetching Actor documents from GoToSocial 0.19.x

cc @gotosocial in case this is something you want to improve on your side

Emelia 👸🏻's avatar
Emelia 👸🏻

@[email protected]

Fixed a rather gnarly bug in @fedify last night where schema.org's @context wasn't being resolved correctly because schema.org doesn't do content-neg and instead using link alternate headers to point to the JSON-LD context document. However, instead of using a fully qualified URL, it used a relative URL to the initial request, which caused Fedify to fail to fetch that context.

github.com/dahlia/fedify/pull/

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

@[email protected] · Reply to 洪 民憙(ホン・ミンヒ)'s post

今日Fedify/Holloのブースに訪問してくれた皆様、本当にありがとうございました‼️機会があれば是非またお会いましょう!

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

@[email protected] · Reply to 洪 民憙(ホン・ミンヒ)'s post

FedifyとHolloのブースです!

NTSK's avatar
NTSK

@[email protected]

初手Holloさん!!

モナコ広告 :fedibird1: @技術・雑談's avatar
モナコ広告 :fedibird1: @技術・雑談

@[email protected]

でFedify本を入手した!​ :ablobattention:

明日の飛行機の中で読もうかな。
朝が早いので爆睡の可能性もあるが…

『自分だけのフェディバースマイクロブログを作ろう!』(洪民憙著)表紙
『自分だけのフェディバースマイクロブログを作ろう!』(洪民憙著)表紙
Evan Prodromou's avatar
Evan Prodromou

@[email protected] · Reply to Anil Dash's post

The main way to do that is to use a library that implements ActivityPub for you, like Fedify. https://fedify.dev/

Pablo Berganza (he/him)'s avatar
Pablo Berganza (he/him)

@[email protected]

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 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!

fedify.dev

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

@[email protected]

10月26日(土)に開催されるOSC 2024 Tokyo/FallにFedify/Hollo合同で出展します!可愛いFedifyのロゴのシールと『自分だけのフェディバースのマイクロブログを作ろう!』日本語版の紙の本を持って行く予定です。よろしくお願いします。

https://event.ospn.jp/osc2024-fall/

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

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

I'm bringing along the Japanese version of the tutorial, Creating your own federated microblog.

github.com/dahlia/fedify-micro

The cover of the Japanese version of the Fedify tutorial, Creating your own federated microblog.
The cover of the Japanese version of the Fedify tutorial, Creating your own federated microblog.
A page of the Japanese version of the Fedify tutorial, Creating your own federated microblog.
A page of the Japanese version of the Fedify tutorial, Creating your own federated microblog.
洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected]

I'm off to Tokyo tomorrow to attend OSC2024 Tokyo/Fall this Saturday!

event.ospn.jp/osc2024-fall/

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

@[email protected]

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 versions 0.15.3, 1.0.5, and 1.1.1, so please update if you are experiencing this issue.

internetarchive's avatar
internetarchive

@[email protected]

Latest update from @brewsterkahle (Oct 17, 5:58pm): blog.archive.org/2024/10/18/in

Last week, along with a DDOS attack and exposure of patron email addresses and encrypted passwords, the Internet Archive’s website javascript was defaced, leading us to bring the site down to access and improve our security. 

The stored data of the Internet Archive is safe and we are working on resuming services safely. This new reality requires heightened attention to cyber security and we are responding. We apologize for the impact of these library services being unavailable.

The Wayback Machine, Archive-It, scanning, and national library crawls have resumed, as well as email, blog, helpdesk, and social media communications.  Our team is working around the clock across time zones to bring other services back online. In coming days more services will resume, some starting in read-only mode as full restoration will take more time. 

We’re taking a cautious, deliberate approach to rebuild and strengthen our defenses. Our priority is ensuring the Internet Archive comes online stronger and more secure.

As a library community, we are seeing other cyber attacks—for instance the British Library, Seattle Public Library, Toronto Public Library, and now Calgary Public Library. We hope these attacks are not indicative of a trend.

For the latest updates, please check this blog and our official social media accounts: X/Twitter, Bluesky and Mastodon.

Thank you for your patience and ongoing support.
Last week, along with a DDOS attack and exposure of patron email addresses and encrypted passwords, the Internet Archive’s website javascript was defaced, leading us to bring the site down to access and improve our security. The stored data of the Internet Archive is safe and we are working on resuming services safely. This new reality requires heightened attention to cyber security and we are responding. We apologize for the impact of these library services being unavailable. The Wayback Machine, Archive-It, scanning, and national library crawls have resumed, as well as email, blog, helpdesk, and social media communications. Our team is working around the clock across time zones to bring other services back online. In coming days more services will resume, some starting in read-only mode as full restoration will take more time. We’re taking a cautious, deliberate approach to rebuild and strengthen our defenses. Our priority is ensuring the Internet Archive comes online stronger and more secure. As a library community, we are seeing other cyber attacks—for instance the British Library, Seattle Public Library, Toronto Public Library, and now Calgary Public Library. We hope these attacks are not indicative of a trend. For the latest updates, please check this blog and our official social media accounts: X/Twitter, Bluesky and Mastodon. Thank you for your patience and ongoing support.
Charles Chin's avatar
Charles Chin

@[email protected]

Fedify 越来越强大了,官方甚至还出了一篇教程: fedify.dev/tutorial/microblog

段風桜 Dampuzakura's avatar
段風桜 Dampuzakura

@[email protected]

dahlia/microblog: A simple federated microblog example using Fedify for educational purpose

github.com/dahlia/microblog

Windowsで試してみた

> This program is for educational purposes only. Do not use it for any other purpose, since it has not been tested for security.
だけどこれ普通に使えたら便利そう

fedify.dev/
@fedify

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

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

Want to build your own software? Follow the tutorial for , the ActivityPub server framework!

fedify.dev/tutorial/microblog

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

@[email protected]

The version 1.1.0 of , an 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 Export 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!

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

@[email protected]

The version 1.1.0 of , an 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 Export 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!

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

@[email protected]

Let's create your own implementation using !

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

@[email protected]

Even though I am a slow coder, it only took me about a month to create most of 's features in . Having a framework makes a huge difference in productivity.

Hollo's avatar
Hollo

@[email protected]

We now have and 's official server! Join us now!

https://discord.gg/hGXXxUq2jK

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

@[email protected]

The Japanese version of the 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!

https://fedibird.com/@hongminhee/113331365440336287

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

@[email protected] · Reply to 洪 民憙(ホン・ミンヒ)'s post

印刷所に注文した『自分だけのフェディバースのマイクロブログを作ろう!』の紙の本、到着した‼️

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

@[email protected]

We now have and 's official server! Join us now!

https://discord.gg/bhtwpzURwd

Thibault Molleman🇧🇪 🌈🐝's avatar
Thibault Molleman🇧🇪 🌈🐝

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

@fedify good to mention: there is also a Matrix space for those who are like "why discord?!"

matrix.to/#/#fedify:matrix.org

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

@[email protected]

We now have and 's official server! Join us now!

https://discord.gg/bhtwpzURwd

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

@[email protected]

now has an driver! This means you can use 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 results of the benchmarks for Fedify's outbox queue.
The results of the benchmarks for Fedify's outbox queue.
洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected]

takes 20 minutes for GitHub Actions to finish. What do you think?

OptionVoters
That's too slow. Optimize it now.0 (0%)
Not fast, but tolerable.0 (0%)
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Fedify is an server framework in & . 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 website! There's comprehensive docs, a demo, a tutorial, example code, and more:

https://fedify.dev/

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

@[email protected]

If you're on the fence about which driver to choose for '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:

Curious to see the results? Check out the GitHub repository!

https://github.com/dahlia/fedify-queue-benchmarks

https://fosstodon.org/@hongminhee/113247723368865290

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

@[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.

github.com/dahlia/fedify-queue

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

@[email protected]

now has an driver! This means you can use 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 results of the benchmarks for Fedify's outbox queue.
The results of the benchmarks for Fedify's outbox queue.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

The repository has reached 500 stars! Thank you everyone!

https://github.com/dahlia/fedify

The Fedify repository has reached 500 stars.
The Fedify repository has reached 500 stars.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

10月26日(土)に開催されるOSC 2024 Tokyo/FallにFedify/Hollo合同で出展します!可愛いFedifyのロゴのシールと『自分だけのフェディバースのマイクロブログを作ろう!』日本語版の紙の本を持って行く予定です。よろしくお願いします。

https://event.ospn.jp/osc2024-fall/

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

@[email protected]

自作ActivityPubサーバーに興味が有る方は、ActivityPubサーバーフレームワークであるFedifyを一度使ってみてください。ちなみに、公式日本語チュートリアルである『自分だけのフェディバースのマイクロブログを作ろう!』がZennにも掲載されています。

zenn.dev/hongminhee/books/4a38

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

@[email protected]

What's your biggest wish for Fedify?

OptionVoters
RabbitMQ driver5 (21%)
Kafka driver3 (13%)
AWS SQS driver2 (8%)
Nuxt integration3 (13%)
AdonisJS integration2 (8%)
Fastify integration4 (17%)
NestJS integration3 (13%)
Koa integration2 (8%)
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

If you're considering creating your own implementation of , consider .

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!

https://fedify.dev/

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

@[email protected]

Did you know that? The 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.

Here's demo!

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

@[email protected] · Reply to Steve Bate's post

@steve Yes, if you specify queue option of createFederation() function, incoming and outgoing activities are queued and processed by the background workers.

See also the following docs:

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

@[email protected]

If you're on the fence about which driver to choose for '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:

Curious to see the results? Check out the GitHub repository!

https://github.com/dahlia/fedify-queue-benchmarks

https://fosstodon.org/@hongminhee/113247723368865290

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

@[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.

github.com/dahlia/fedify-queue

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

@[email protected]

If you're considering creating your own implementation of , consider .

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!

https://fedify.dev/

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

@[email protected]

独自のActivityPubの実装を作りたい方は、Fedifyを検討してみてください。

ActivityPubをゼロから実装するには、想像以上に多くの物を作る必要が有ります。WebFinger、HTTP Signatures、Linked Data Signatures、Object Integrity Proofs、NodeInfo、アクティビティの送受信のキュー、フォロワーコレクションのシンクロ、リモートオブジェクトの照会、MastodonやMisskey等との相互運用性の為の雑多な処理まで…Fedifyを使えば簡単に自分だけのActivityPubの実装を作る事が出来ます!

fedify.dev/

Fediverse Report's avatar
Fediverse Report

@[email protected]

New: Last Week in - ep 86

This week's news:
- Threads degrades their integration, delaying posts by 15 minutes before they appear in the rest of the fediverse
- Website League is a new ActivityPub-based Island network, outside of the rest of the fediverse
- Ghost discusses their beta plans and pricing.

fediversereport.com/last-week-

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

@[email protected]

Adding vocabularies for FEP-9091 to .

github.com/dahlia/fedify/issue

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

@[email protected]

Did you know that? The 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.

Here's demo!

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

@[email protected]

Fedifyを使うのを躊躇う理由が有れば?

OptionVoters
機能不足0 (0%)
抽象化レベルが低い0 (0%)
TypeScriptに慣れていない、または好みではない0 (0%)
日本語の資料の少なさ0 (0%)
GhostとHollo以外の実例がな0 (0%)
その他(リプライで教えてください)0 (0%)
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Introducing Fedify: Build Your Own Fediverse App with Ease! 🚀

Are you excited about the but find implementing daunting? Meet , a framework that simplifies building federated server apps. Whether you're creating the next Mastodon, Pixelfed, or something entirely new, Fedify has you covered.

What Fedify Offers:

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.

Get Started Today!

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!

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

@[email protected]

I'm adding the (FEP-c0e0) class to … It will be coming in Fedify 1.1.0.

w3id.org/fep/c0e

In #Flancia we'll meet's avatar
In #Flancia we'll meet

@[email protected]

[[Fedify]] looks cool:

fedify.dev/intro

> Fedify is a TypeScript library for building federated server apps powered by ActivityPub and other standards, so-called fediverse.

h/t @band

Винт Прокс's avatar
Винт Прокс

@[email protected] · Reply to naDne :blobcatmelt2: :debian: 's post

@FiFachik @rf Для тех, кто хочет потестить федерирование для своего бложика с поддержкой , могу только посоветовать . Там есть встроенная команда для подключения к сервису на выбор, который может дать временный домен для тестирования.

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

@[email protected]

ActivityPub 서버 프레임워크인 Fedify가 드디어 첫 스테이블 버전인 1.0.0을 릴리스했습니다!

velog.io/@hongminhee/fedify-1.

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

@[email protected]

ActivityPubのサーバーフレームワークであるFedifyがついに最初の正規バージョンである1.0.0をリリースしました!

zenn.dev/hongminhee/articles/c
QT: hollo.social/@fedify/019229e7-
[参照]

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!

Anuj Ahooja's avatar
Anuj Ahooja

@[email protected]

If you're a hands-on learner and want to learn how to build for ActivityPub, I urge you to try out @fedify.

The documentation alone is a great way to understand the underlying mechanics, and you'll be prototyping ideas in no time. I've been using it for the last few months and can't recommend it enough.

They just launched their first stable release: fedify.dev/

s/o to @hongminhee for this fantastic resource.

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!

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

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

@[email protected]

We've applied Twoslash to the Fedify docs to show type information as tooltips in TypeScript example code—check it out now!

https://fosstodon.org/@hongminhee/113134894222177741

The mouse cursor is hovering over a method in the example code, and information about that API pops up as a tooltip.
The mouse cursor is hovering over a method in the example code, and information about that API pops up as a tooltip.
洪 民憙(ホン・ミンヒ)'s avatar
洪 民憙(ホン・ミンヒ)

@[email protected]

次のバージョンのFedifyはLinked Data Signatures (RsaSignature2017)に対応します。つまり、Mastodonが他のサーバーからフォワードしたアクティビティをFedifyが検証出来る様になります。

また、Context.sendActivity()メソッドで送信するアクティビティは、RSA-PKCS#1-v1.5の鍵ペアが一つでも有る場合、HTTP Signaturesに加え、Linked Data Signaturesが添付されます。

すでに廃止された標準であるLinked Data Signaturesを実装するのは気が進まなかったのですが、この変更がFedifyアプリのより良い互換性と相互運用性の基礎になる事を願っています。
QT: hollo.social/@fedify/0191ec91-
[参照]

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

@[email protected]

The next version of will support (), which means that Fedify will be able to verify activities forwarded by 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-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!

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

@[email protected]

The next version of will support (), which means that Fedify will be able to verify activities forwarded by 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-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!

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

@[email protected]

Working on @fedify's docs about … I hope someday drop the support for Linked Data Signatures… 😇

The combination of HTTP Signatures and Linked Data Signatures is the most widely supported way to sign activities in the fediverse, as of September 2024. Despite Linked Data Signatures is outdated and not recommended for new implementations, it is still widely used in the fediverse due to Mastodon and other major implementations' reliance on it.

However, for new implementations, you should consider using both Object Integrity Proofs and Linked Data Signatures for maximum compatibility and future-proofing.
The combination of HTTP Signatures and Linked Data Signatures is the most widely supported way to sign activities in the fediverse, as of September 2024. Despite Linked Data Signatures is outdated and not recommended for new implementations, it is still widely used in the fediverse due to Mastodon and other major implementations' reliance on it. However, for new implementations, you should consider using both Object Integrity Proofs and Linked Data Signatures for maximum compatibility and future-proofing.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

The next release will finally be 1.0.0. Stay tuned!

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

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

If you're curious about 's property hydration, here's the docs for it:

https://unstable.fedify.dev/manual/vocab#property-hydration

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

@[email protected]

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: .

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

@[email protected]

The `fedify inbox` command, which is shipped with @fedify/cli, is a tool that creates an ephemeral server so that you can debug and test the activities you send.

Here's a demo of it.

fedify.dev/cli#fedify-inbox-ep

A demo video of fedify inbox command.
A demo video of fedify inbox command.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Fedify, an server framework, has released v0.15.0! The key changes include:

It is now available in JSR and npm.

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

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

@silverpill FEP-e232 should be implemented in an application code. @hollo will implement it later!

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

@[email protected]

In the next version of , the Article, ChatMessage, Note, and Question classes will have a quoteUrl property. This property corresponds to the following three JSON-LD properties all at once:

Available for preview in version 0.15.0-dev.384+6c39741b (JSR & npm).

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

@[email protected]

Today, thanks to @ellemedit, we've added two more example projects to !

If you're interested in Fedify and these two frameworks, take a look!

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

@[email protected]

As a trilingual, I've written the 's tutorial in three languages:

• English: unstable.fedify.dev/tutorial/m
• Korean: hackmd.io/@hongminhee/fedify-t
• Japanese: zenn.dev/hongminhee/books/4a38

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

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

In the next version of , 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.

You can preview it in v0.15.0-dev.382+a8a9b73b: JSR & npm.

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

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

In the next version of , 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.

You can preview it in v0.15.0-dev.382+a8a9b73b: JSR & npm.

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

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

@antolius Glad you enjoyed reading this!

Antolius's avatar
Antolius

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

@fedify this is incredibly helpful! I went into it with some beforehand knowledge & it was still useful.

The structure & flow are great, it's telling a story & leading the reader through it. The tips alone make it worth a read. I love how detailed it is, covering everything from database to frontend. On the other hand, every lib/tool is well & succinctly explained which makes it easy to swap out with an alternative. The prompts for improvements at the end are great.

⭐⭐⭐⭐⭐, will read again.

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

@[email protected] · Reply to kopper [they/them]'s post

Thank you for your advice. As you mentioned, Fedify currently has actor URIs consisting of handles. This limitation is due to the early design of Fedify and will be fixed before we release v1.0!

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

@[email protected]

한국어판 Fedify 튜토리얼 《나만의 연합우주 마이크로블로그 만들기》를 공개합니다! Fedify나 ActivityPub을 몰라도 차근차근 따라할 수 있게 되어 있으니, ActivityPub 구현에 관심이 있으신 분들은 부디 읽어 주시기 바랍니다. (대신, 조금 깁니다. 😅)

https://hackmd.io/@hongminhee/fedify-tutorial-ko

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

@[email protected]

日本語版Fedifyチュートリアル『自分だけのフェディバースのマイクロブログを作ろう!』をZennで公開しました!ActivityPubの実装に興味の有る方々は是非ご覧ください!

zenn.dev/hongminhee/books/4a38

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

@[email protected]

We just finished drafting a new tutorial for ! This tutorial will walk you through the steps of creating your own federated . It's pretty long, though.

Please read it, give us feedback, and have fun!

https://unstable.fedify.dev/tutorial/microblog

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

@[email protected]

We just finished drafting a new tutorial for ! This tutorial will walk you through the steps of creating your own federated . It's pretty long, though.

Please read it, give us feedback, and have fun!

https://unstable.fedify.dev/tutorial/microblog

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

@[email protected]

The next version of will add the Context.lookupObject() method, which is preferred over the global lookupObject() function.

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

@[email protected]

Are there any features you'd like to see in ?

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

@[email protected]

Fedifyは、TypeScriptとJavaScriptで書かれたActivityPubサーバーフレームワークです。分散型のソーシャルネットワークを構築するためのサーバーアプリケーションを作る際の複雑さと冗長なコードを排除し、ビジネスロジックとユーザー体験の開発に集中できるようにすることを目指しています。

現在提供している主な機能は以下の通りです:

  • Activity Vocabularyのための型安全なオブジェクト(一部のベンダー固有の拡張機能を含む)
  • WebFingerクライアントとサーバー
  • HTTP SignaturesObject Integrity Proofs
  • ウェブフックを処理するためのミドルウェア
  • NodeInfoプロトコル
  • Node.js、Deno、Bunのサポート
  • テストとデバッグのためのCLIツールチェーン

興味がある方は、Fedifyのウェブサイトをご覧ください!包括的なドキュメント、デモ、チュートリアル、サンプルコードなどが用意されています:

https://fedify.dev/

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

@[email protected]

Question for those who have followed the tutorial: How long did it take you to follow the tutorial?

OptionVoters
30 minutes or shorter1 (33%)
1 hour or shorter1 (33%)
2 hours or shorter1 (33%)
4 hours or shorter0 (0%)
More than 4 hours0 (0%)
洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected]

I finally finished the first draft of the new tutorial, but it's still in Korean. Now I just need to polish it up and translate it into English.

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

@[email protected]

Did you know? offers the markdown-it plugins for parsing -style mentions and hashtags syntax:

Check it out!

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

@[email protected]

Today, thanks to @ellemedit, we've added two more example projects to !

If you're interested in Fedify and these two frameworks, take a look!

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

@[email protected]

Released 0.14.2 & 0.13.3, which fix an incompatibility issue with Meta's Threads where sent activities had not been verified by their inbox.

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

@[email protected]

Released Fedify 0.14.1 & 0.13.2, which fix a few bugs in the fedify inbox command:

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

@[email protected]

If you'd like to support the development of or , you can sponsor me on GitHub!

github.com/sponsors/dahlia

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

@[email protected]

This frustration later became the impetus for creating @fedify:

todon.eu/@hongminhee/110971265

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

@[email protected]

We've released v0.14.0 of , the server framework, with the following key changes:

Fedify v0.14.0 is available from JSR and npm. See also the full changelog for details.

Happy !

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

@[email protected] · Reply to John Spurlock's post

We've added the Inspecting ActivityPub objects section to the docs, introducing BrowserPub and the fedify lookup command!

https://unstable.fedify.dev/manual/test#inspecting-activitypub-objects

Inspecting ActivityPub objects

BrowserPub

BrowserPub is a browser for debugging ActivityPub and the fediverse. You can punch in any ActivityPub discoverable web URL or fediverse handle, and it will discover and display the underlying ActivityPub.

For example:

• hollo.social/@fedify
• @hongminhee@fosstodon.org

If you want to know further details about BrowserPub, read the creator's Mastodon thread.

fedify lookup command

Fedify provides a CLI toolchain for testing and debugging. The fedify lookup command is a simple tool for looking up an ActivityPub object by its URL or fediverse handle.
Inspecting ActivityPub objects BrowserPub BrowserPub is a browser for debugging ActivityPub and the fediverse. You can punch in any ActivityPub discoverable web URL or fediverse handle, and it will discover and display the underlying ActivityPub. For example: • hollo.social/@fedify • @[email protected] If you want to know further details about BrowserPub, read the creator's Mastodon thread. fedify lookup command Fedify provides a CLI toolchain for testing and debugging. The fedify lookup command is a simple tool for looking up an ActivityPub object by its URL or fediverse handle.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected] · Reply to John Spurlock's post

We've added the Inspecting ActivityPub objects section to the docs, introducing BrowserPub and the fedify lookup command!

https://unstable.fedify.dev/manual/test#inspecting-activitypub-objects

Inspecting ActivityPub objects

BrowserPub

BrowserPub is a browser for debugging ActivityPub and the fediverse. You can punch in any ActivityPub discoverable web URL or fediverse handle, and it will discover and display the underlying ActivityPub.

For example:

• hollo.social/@fedify
• @hongminhee@fosstodon.org

If you want to know further details about BrowserPub, read the creator's Mastodon thread.

fedify lookup command

Fedify provides a CLI toolchain for testing and debugging. The fedify lookup command is a simple tool for looking up an ActivityPub object by its URL or fediverse handle.
Inspecting ActivityPub objects BrowserPub BrowserPub is a browser for debugging ActivityPub and the fediverse. You can punch in any ActivityPub discoverable web URL or fediverse handle, and it will discover and display the underlying ActivityPub. For example: • hollo.social/@fedify • @[email protected] If you want to know further details about BrowserPub, read the creator's Mastodon thread. fedify lookup command Fedify provides a CLI toolchain for testing and debugging. The fedify lookup command is a simple tool for looking up an ActivityPub object by its URL or fediverse handle.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Do you know that? Some of the properties in Activity Vocabulary have been renamed in 's JavaScript APIs. Below are some examples:

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

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

I'm sharing a prototype of written in , codenamed “FediKit.” Many of the ideas for Fedify were already implemented in this prototype, albeit in a different language.

github.com/dahlia/fedikit

Винт Прокс's avatar
Винт Прокс

@[email protected] · Reply to Йошильда :CrabVerified:'s post

@cybertailor @oleg_ru

Касаясь систем управления контентом с поддержкой , хотелось бы отметить и библиотеку для построения собственного федеративного сервера @fedify. Отлично подходит, когда "все эти ваши вордпрессы мне нафиг не сдались". :blobcatmeltthumbsup:

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

@[email protected]

For educational purpose, I've created a federated microblog example using , 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!

github.com/dahlia/microblog

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

@[email protected]

I've rewritten several times and in several languages. The first time it was written in , then , 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.

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

@[email protected]

Did you know? not only fully supports .js, but also and !

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

@[email protected]

Security alert for Fedify users

We've patched a vulnerability in the getActorHandle() function. Versions prior to 0.13.1 and 0.12.3 are affected.

Upgrade immediately:

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

@[email protected]

In the next version (v0.14.0) of , the performance of the Object.toJsonLd() method will be dramatically (~3k ×) faster. This is expected to improve the overall performance of Fedify apps!

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

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

Oh, and in the template for Deno, compilerOptions is added to the deno.json file (if needed).

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

@[email protected]

The next version of fedify init will also generate a tsconfig.json file with decent default settings.

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

@[email protected]

I feel that the current abstraction level of 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?

OptionVoters
Façade0 (0%)
Metaframework0 (0%)
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

Fedify, the server framework, has released v0.13.0. Key changes include:

v0.13.0 is available now from JSR and npm.

https://github.com/dahlia/fedify/releases/tag/0.13.0

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

@[email protected]

What other web frameworks would you like to see integrate with more?

OptionVoters
Koa4 (16%)
Fastify5 (20%)
Oak3 (12%)
Elysia3 (12%)
Next.js6 (24%)
Nuxt.js4 (16%)
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

What other web frameworks would you like to see integrate with more?

OptionVoters
Koa4 (16%)
Fastify5 (20%)
Oak3 (12%)
Elysia3 (12%)
Next.js6 (24%)
Nuxt.js4 (16%)
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

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 with :

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"));

https://github.com/dahlia/fedify-express

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

@[email protected]

I'm unsure whether to adopt an emerging JavaScript runtime like or for 's tutorial, or stick with traditional .js. 🤔

If I choose Bun/Deno, it comes with built-in 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.

OptionVoters
Bun0 (0%)
Deno0 (0%)
Node.js0 (0%)
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

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

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

@[email protected]

I ended up implementing the `fedify tunnel` command to eliminate the ngrok installation and sign-up part of the tutorial. 😂

unstable.fedify.dev/cli#fedify

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

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

() 개발을 단순화할 준비가 되셨나요? 프레임워크를 확인해보세요!

더욱 연결된, 더욱 분산된 웹을 만드는 데 동참해주세요! 🌐

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

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

프레임워크는 실제 쓰임에 집중하고 있습니다. 문서에는 같은 주요 구현체들이 만든 사실상의 표준에 맞춘 어휘 API 사용법에 대한 가이드가 포함되어 있습니다. 더 적은 고민으로 상호 운용 가능한 앱을 만드세요! 🤝

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

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

인터랙션 디버깅은 꽤 까다롭죠. 그렇지만 툴체인이 도와드립니다! 테스트와 디버깅을 위한 CLI 툴체인을 포함하고 있어 개발과 트러블슈팅이 쉬워집니다. 머리 싸매는 시간을 줄이고 멋진 기능을 만드는 데 더 많은 시간을 쓰세요! 🔍

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

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

프레임워크는 () 개발에 중요한 기능들을 기본으로 내장하고 있습니다:

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

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

유연성은 중요하죠! 프레임워크는 풀 스택 솔루션이 아닙니다—여러분이 좋아하는 웹 프레임워크와 함께 작동하도록 설계되었죠. 등, Fedify는 여러 웹 프레임워크와의 쉬운 통합 옵션을 제공합니다. 여러분만의 방식으로 () 앱을 만드세요! 🛠️

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

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

Fedify의 가장 강력한 기능 중 하나는 타입 안전한 어휘 객체입니다. 이는 Activity Vocabulary와 벤더 별 확장을 표현하는데, ActivityPub 객체와 액티비티를 다룰 때 견고하고 안전한 코드를 보장합니다. 런타임 오류와 작별하고 자신 있는 코딩을 시작하세요! 💪🏼

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

@[email protected]

소개: () 상에 서버 앱을 만들기 위한 강력한 라이브러리! 🚀

Fedify는 연합형 앱의 복잡함을 단순화하여 개발자가 가장 중요한 것—고유한 기능과 사용자 경험—에 집중할 수 있게 해줍니다. Fedify의 특징을 살펴볼까요? 🧵

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

@[email protected]

offers robust logging capabilities through integration with LogTape. This feature allows you to easily debug and monitor your Fedify app!

To enable , 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 integration, you gain valuable insights into your Fedify app's behavior, making troubleshooting and optimization much more straightforward!

https://fedify.dev/manual/log

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

@[email protected]

As a potential user, which of the following technologies are you familiar with?

OptionVoters
JavaScript17 (14%)
TypeScript13 (11%)
HTML & CSS18 (15%)
JSX (JavaScript XML) or TSX (TypeScript XML)10 (8%)
HTTP14 (11%)
ActivityPub8 (7%)
Node.js13 (11%)
Unix shell12 (10%)
SQL & relational databases14 (11%)
Digital signatures4 (3%)
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

If you read a , what software would you like to see as an in the tutorial?

OptionVoters
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%)
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

If you read a , what software would you like to see as an in the tutorial?

OptionVoters
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%)
洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected]

A good issue to contribute to for the first time. Anybody interested?

github.com/dahlia/fedify/issue

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

@[email protected]

, an server framework, has released v0.12.0. It's a minor release in about a month, so there's quite a few changes:

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

John O'Nolan's avatar
John O'Nolan

@[email protected]

I'm very excited to be successfully following our Ghost newsletter about building ActivityPub support, on Mastodon!

Photo by John O'Nolan on July 26, 2024. May be a video game screenshot of text.
Photo by John O'Nolan on July 26, 2024. May be a video game screenshot of text.
fedicat's avatar
fedicat

@[email protected]

More slow tinkering with , now have the actor dispatcher working and serving up my profile as seen from .

fediverse profile showing me working on a laptop on a sofa with a dog on each side
fediverse profile showing me working on a laptop on a sofa with a dog on each side
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected] · Reply to Matthias Bohlen's post

@admin Now fixed the stable docs too!

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

@[email protected]

, an server framework, has released v0.12.0. It's a minor release in about a month, so there's quite a few changes:

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

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

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

The Astro integration code has been reverted. It will come back in at some point once the blockers are resolved.

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

@[email protected]

Since 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).

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

@[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 release (v0.12.0) may not be able to ship with the integration. 😅

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

@[email protected]

Working on the `fedify init` command, the project setup wizard for

A demo of the `fedify init` command. The JavaScript runtime choices are Deno, Node.js, and Bun, of which Deno is selected. The web framework choices are Bare-bones, Astro, Fresh, and Hono, with Hono selected. The key-value store options are No cache, Redis, and Deno KV, with Deno KV selected. The message queue options are No background jobs, Redis, Deno KV, and Deno KV is selected. Finally, an Hono project integrated with Fedify is created and the server is started by running the `deno task dev` command.
A demo of the `fedify init` command. The JavaScript runtime choices are Deno, Node.js, and Bun, of which Deno is selected. The web framework choices are Bare-bones, Astro, Fresh, and Hono, with Hono selected. The key-value store options are No cache, Redis, and Deno KV, with Deno KV selected. The message queue options are No background jobs, Redis, Deno KV, and Deno KV is selected. Finally, an Hono project integrated with Fedify is created and the server is started by running the `deno task dev` command.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

The fedify command is now available on ! You can install it using the following command:

npm install -g @fedify/cli

Or if you use :

bun install -g @fedify/cli

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

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

@[email protected] · Reply to Matthias Bohlen's post

@admin They are fixed in the unstable docs. For now, could you please use them instead? The stable docs will be fixed in the next release. Thanks!

https://unstable.fedify.dev/manual/federation

dansup's avatar
dansup

@[email protected]

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 ✨

fedicat's avatar
fedicat

@[email protected]

finally getting to the part of my deno-fedify experiment, first thing working is the nodeinfo support

screenshot of web browser showing a debug view of JSON showing server info
screenshot of web browser showing a debug view of JSON showing server info
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

offers robust logging capabilities through integration with LogTape. This feature allows you to easily debug and monitor your Fedify app!

To enable , 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 integration, you gain valuable insights into your Fedify app's behavior, making troubleshooting and optimization much more straightforward!

https://fedify.dev/manual/log

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

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

's security policy is just written!

github.com/dahlia/fedify/secur

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

@[email protected]

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?

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

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

Ready to simplify your ? Check out !

Join us in building a more connected and decentralized web! 🌐

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

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

also focuses on the practical side of . Its docs includes guidance on using the vocabulary API in line with de facto norms set by popular implementations like . Build more interoperable apps with less headache! 🤝

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

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

Debugging interactions can be tricky, but '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! 🔍

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

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

Out of the box, comes packed with features crucial for development:

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

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

Flexibility is key! isn't a full-stack solution—it's designed to work alongside your favorite web frameworks. Whether you're using , , , or others, Fedify has got you covered with easy integration options. Build your app, your way! 🛠️

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

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

One of '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! 💪🏼

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

@[email protected]

Introducing : A powerful library for building server apps in the ! 🚀

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! 🧵

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

@[email protected]

In 's next release, v0.12.0, we'll be adding support for integration with Astro, a web framework for content-driven websites.

https://unstable.fedify.dev/manual/integration#astro

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

@[email protected]

We released 0.9.2, 0.10.1, and 0.11.1, which patched the last reported , 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!

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

@[email protected] · Reply to Mitex Leo's post

@ml Apparently they (Ghost) have a bug. We'll inform them!

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

@[email protected]

We're releasing @fedify/h3! Now you can integrate with h3, an HTTP server framework behind Nitro, Analog, Vinxi, SolidStart, TanStack Start, and other many web frameworks.

https://github.com/dahlia/fedify-h3

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

@[email protected] · Reply to Mitex Leo's post

@ml What Mastodon client app do you use?

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

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

@silverpill Yeah, they apparently missed to wrap it with Image object! See their code:

https://github.com/TryGhost/ActivityPub/blob/c82715db4529f9a71de8853d159ae26d576c385f/src/dispatchers.ts#L40

It should be changed as like below (from @hollo):

https://github.com/dahlia/hollo/blob/7b51666bfdfd6efea511c03cd305432643e423b7/src/federation/index.ts#L86-L88

Alejandro Baez's avatar
Alejandro Baez

@[email protected]

Woah, is now live in the with @index.

Absolutely outstanding progress! definitely deserves a great deal of recognition for making this possible. 😎

Feeling like we now have tooling in place to fediverse all things. 😅

Ayo :webtools:'s avatar
Ayo :webtools:

@[email protected]

looks like there will be lighter-weight alternatives to mastodon, thanks to @fedify — maybe I’ll hack together a simple one? 🙃

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

@[email protected]

Finally, @ghost has open sourced their implementation powered by ! For Fedify users, this means another production-grade example code.

If you'd like to follow updates on 's ActivityPub implementation, you can do so by following @index!

https://github.com/TryGhost/ActivityPub

Anuj Ahooja's avatar
Anuj Ahooja

@[email protected]

Two big pieces of news in Ghost's progress on ActivtyPub integration:

1. You can now follow their newsletter from the Fediverse at this address: @index
2. They've open sourced their ActivityPub work!

We're many steps closer to being able to follow Ghost newsletters on the rather than cluttering up your email inbox 🙏🏻

activitypub.ghost.org/lets-fix

Emelia 👸🏻's avatar
Emelia 👸🏻

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

@fedify users of Fedify still need to keep potential for SSRF in mind when requesting any URLs in Activities/Objects not through these APIs, e.g., when downloading media from a remote server for caching

technicat's avatar
technicat

@[email protected]

I was planning to play around with but got sidetracked into learning ...

Hollo's avatar
Hollo

@[email protected]

To users: please update your to 0.1.0-dev.46, a patch which addresses @fedify's CVE-2024-39687, as soon as possible!

https://hollo.social/@fedify/019080c7-c784-755d-a6f2-d1f91f2c5709

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

@[email protected]

To users: please update your Fedify as soon as possible!

hollo.social/@fedify/019080c7-

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

@[email protected]

CVE-2024-39687, a vulnerability that could potentially allow a Server Side Request Forgery (SSRF) attack, was discovered in 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!

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

@[email protected]

Hooray, 's GitHub repository just hit 300 stars!

Fedify's GitHub repository, which has over 300 stars.
Fedify's GitHub repository, which has over 300 stars.
Anuj Ahooja's avatar
Anuj Ahooja

@[email protected] · Reply to Tim Chambers's post

I've been using fedify for the last few months and I'm absolutely loving it. It makes it really easy to prototype new ideas.

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

@[email protected]

I jsut wrote a detailed post on my blog about @ghost's for @fedify! (Both English and Korean available.)

writings.hongminhee.org/2024/0

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

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

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:

unstable.fedify.dev/manual/inb

You can give it a try by installing 0.12.0-dev.265+cb851932, the latest unstable release:

jsr.io/@fedify/[email protected]
npmjs.com/package/@fedify/fedi

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

@[email protected]

In the next version of , the 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.

outboxRetryPolicy

This API is available since Fedify 0.12.0.

The retry policy for sending activities to recipients' inboxes.

By default, this uses an exponential backoff strategy with a maximum of 10 attempts and a maximum delay of 12 hours.

You can fully customize the retry policy by providing a custom function that satisfies the RetryPolicy type. Or you can adjust the parameters of the createExponentialBackoffRetryPolicy() function, which is a default implementation of the retry policy.
outboxRetryPolicy This API is available since Fedify 0.12.0. The retry policy for sending activities to recipients' inboxes. By default, this uses an exponential backoff strategy with a maximum of 10 attempts and a maximum delay of 12 hours. You can fully customize the retry policy by providing a custom function that satisfies the RetryPolicy type. Or you can adjust the parameters of the createExponentialBackoffRetryPolicy() function, which is a default implementation of the retry policy.
洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected]

Basic implementation of the inbox queue is complete and documentation is being worked on.

hollo.social/@fedify/0190687b-

Making inbox listeners non-blocking

This API is available since Fedify 0.12.0.

Usually, processes inside an inbox listener should be non-blocking because they may involve long-running tasks. Fortunately, you can easily turn inbox listeners into non-blocking by providing a queue option to createFederation() function. If it is not present, incoming activities are processed immediately and block the response to the sender until the processing is done.

While the queue option is not mandatory, it is highly recommended to use it in production environments to prevent the server from being overwhelmed by incoming activities.

Note: Activities with invalid signatures/proofs are silently ignored and not queued.
Making inbox listeners non-blocking This API is available since Fedify 0.12.0. Usually, processes inside an inbox listener should be non-blocking because they may involve long-running tasks. Fortunately, you can easily turn inbox listeners into non-blocking by providing a queue option to createFederation() function. If it is not present, incoming activities are processed immediately and block the response to the sender until the processing is done. While the queue option is not mandatory, it is highly recommended to use it in production environments to prevent the server from being overwhelmed by incoming activities. Note: Activities with invalid signatures/proofs are silently ignored and not queued.
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

In the next version of , 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

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

@[email protected]

has always been queuing outgoing activities, but not incoming activities. Thanks to @ghost's sponsorship, we are now implementing queues for incoming activities!

https://github.com/dahlia/fedify/issues/70

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

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

It was trivial than I expected; now supports type!

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

@[email protected]

Did you know? offers the markdown-it plugins for parsing -style mentions and hashtags syntax.

• @fedify/markdown-it-mention: github.com/dahlia/markdown-it-
• @fedify/markdown-it-hashtag: github.com/dahlia/markdown-it-

Check it out!

Week in Fediverse's avatar
Week in Fediverse

@[email protected]

Week in Fediverse 2024-06-28

Servers

- Sharkey v2024.5.1
- Gancio v1.18.0
- Mitra v2.23.0
- neodb v0.10.2.3
- Castopod v1.12.0
- NodeBB v4.0.0-alpha (aka ActivityPub alpha release)
- Hollo: Federated single-user microblogging software powered by Fedify

Clients

- IceCubesApp v1.10.43
- Tuba v0.8.1
- Pachli v2.6.0
- mlmym v0.0.46
- P2Play v0.8.1
- Phanpy changelog

Tools and Plugins

- FediFetcher v7.1.1
- Granary v7.0
- Fedify v0.11.0
- Betulon: A simple utility to add Mastodon bookmarks to Betula

Articles

- Meta is connecting Threads more deeply with the fediverse

-----

#WeekInFediverse #Fediverse #ActivityPub

Previous edition: https://mitra.social/objects/01903bb6-c8eb-3a66-3305-460bf5a946d1

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

@[email protected]

Version 0.11.0 of Fedify, an ActivityPub server framework, has been released! Here are the key changes:

https://github.com/dahlia/fedify/releases/tag/0.11.0

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

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

If you want a message queue backend for as well, please upvote this issue!

Hollo's avatar
Hollo

@[email protected]

is using this @fedify/redis package for caching and queuing. Battle tested!

https://hollo.social/@fedify/01905e6b-deec-785a-9bda-b72883031f8f

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

@[email protected]

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 as both a message queue backend and a cache backend! Unlike DenoKvMessageQueue and DenoKvStore, it's also available for .js and .

This feature was made possible with the support of @ghost.

https://github.com/dahlia/fedify-redis

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

@[email protected]

We have a space on for the community, so if you have any questions, feel free to join us and ask!

matrix.to/#/#fedify:matrix.org

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

@[email protected]

Fedify is an server framework in & . 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 website! There's comprehensive docs, a demo, a tutorial, example code, and more:

https://fedify.dev/

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

@[email protected]

now has the official account! Please follow @fedify!

hollo.social/@fedify/01905d6a-

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

@[email protected]

Hello, ! It's the official fedi account of the Fedify, an server framework!