Fedify: ActivityPub server framework's avatar

Fedify: ActivityPub server framework

@fedify@hollo.social

9 following1,121 followers

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

Pinned

🎉 Excited to announce that is now on Open Collective! Support the project's development starting at:

  • Backer (from $5/mo)
  • Supporter (from $25/mo)
  • Sponsor (from $100/mo)
  • Corporate Sponsor (from $500/mo)
  • Custom donations welcome

Your support will help us maintain and improve Fedify. Check it out here:

https://opencollective.com/fedify

:fedify:

Fedify's Open Collective page showing the project logo, description as “A TypeScript library for building federated server apps powered by ActivityPub and other standards”, and five contribution tiers starting from $5/month Backer to $500/month Corporate Sponsor, with custom contribution options available.
ALT text

Fedify's Open Collective page showing the project logo, description as “A TypeScript library for building federated server apps powered by ActivityPub and other standards”, and five contribution tiers starting from $5/month Backer to $500/month Corporate Sponsor, with custom contribution options available.

Pinned

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

Fedify

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

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

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]
ALT text

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]

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

https://festa.io/events/6342

festa.io

Open Contribution Jam 2024 | Festa!

Festa에서 당신이 찾는 이벤트를 만나보세요.

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

https://festa.io/events/6342

festa.io

Open Contribution Jam 2024 | Festa!

Festa에서 당신이 찾는 이벤트를 만나보세요.

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
});
ALT text

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

@kur0den0010@chpk.kur0den.net

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

@monaco_koukoku@fedibird.com

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

monaco koukoku's microblog
フォローボタン・投稿ボタン・マイクロブログのタイムラインがある。
ALT text

monaco koukoku's microblog フォローボタン・投稿ボタン・マイクロブログのタイムラインがある。

@dampuzakura@fedibird.com

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

@renchap@oisaur.com · Reply to Renaud Chaput

@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

fedify.dev

Fedify

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

@monaco_koukoku@fedibird.com

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

@hongminhee@fosstodon.org
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
ALT text

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

@hongminhee@fosstodon.org

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
ALT text

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

@wysteriary.art@bsky.brid.gy

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
ALT text

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

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.
ALT text

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.

@aliceif@hollo.x27.one · Reply to aliceif :totally_a_real_lesbian_flag:
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
ALT text

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

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.
ALT text

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.

@poes@bsd.cafe
@kakkokari_gtyih@misskey.io

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

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

misskey.io

(仮) (@kakkokari_gtyih)

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

@kakkokari_gtyih@misskey.io

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

@kakkokari_gtyih@misskey.io

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

@maka@social.maka.nagoya

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