Fedify: ActivityPub server framework's avatar

Fedify: ActivityPub server framework

@fedify@hollo.social

9 following1,147 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/

() ๊ฐœ๋ฐœ์„ ๋‹จ์ˆœํ™”ํ•  ์ค€๋น„๊ฐ€ ๋˜์…จ๋‚˜์š”? ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™•์ธํ•ด๋ณด์„ธ์š”!

๋”์šฑ ์—ฐ๊ฒฐ๋œ, ๋”์šฑ ๋ถ„์‚ฐ๋œ ์›น์„ ๋งŒ๋“œ๋Š” ๋ฐ ๋™์ฐธํ•ด์ฃผ์„ธ์š”! ๐ŸŒ

ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์‹ค์ œ ์“ฐ์ž„์— ์ง‘์ค‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ์—๋Š” ๊ฐ™์€ ์ฃผ์š” ๊ตฌํ˜„์ฒด๋“ค์ด ๋งŒ๋“  ์‚ฌ์‹ค์ƒ์˜ ํ‘œ์ค€์— ๋งž์ถ˜ ์–ดํœ˜ API ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์ ์€ ๊ณ ๋ฏผ์œผ๋กœ ์ƒํ˜ธ ์šด์šฉ ๊ฐ€๋Šฅํ•œ ์•ฑ์„ ๋งŒ๋“œ์„ธ์š”! ๐Ÿค

์ธํ„ฐ๋ž™์…˜ ๋””๋ฒ„๊น…์€ ๊ฝค ๊นŒ๋‹ค๋กญ์ฃ . ๊ทธ๋ ‡์ง€๋งŒ ํˆด์ฒด์ธ์ด ๋„์™€๋“œ๋ฆฝ๋‹ˆ๋‹ค! ํ…Œ์ŠคํŠธ์™€ ๋””๋ฒ„๊น…์„ ์œ„ํ•œ CLI ํˆด์ฒด์ธ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด ๊ฐœ๋ฐœ๊ณผ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์ด ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ๋จธ๋ฆฌ ์‹ธ๋งค๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ๋ฉ‹์ง„ ๊ธฐ๋Šฅ์„ ๋งŒ๋“œ๋Š” ๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ์“ฐ์„ธ์š”! ๐Ÿ”

ํ”„๋ ˆ์ž„์›Œํฌ๋Š” () ๊ฐœ๋ฐœ์— ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๊ธฐ๋ณธ์œผ๋กœ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

์œ ์—ฐ์„ฑ์€ ์ค‘์š”ํ•˜์ฃ ! ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํ’€ ์Šคํƒ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹คโ€”์—ฌ๋Ÿฌ๋ถ„์ด ์ข‹์•„ํ•˜๋Š” ์›น ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์ฃ . ๋ฐ ๋“ฑ, Fedify๋Š” ์—ฌ๋Ÿฌ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ์‰ฌ์šด ํ†ตํ•ฉ ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„๋งŒ์˜ ๋ฐฉ์‹์œผ๋กœ () ์•ฑ์„ ๋งŒ๋“œ์„ธ์š”! ๐Ÿ› ๏ธ

Fedify์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ํƒ€์ž… ์•ˆ์ „ํ•œ ์–ดํœ˜ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ด๋Š” Activity Vocabulary์™€ ๋ฒค๋” ๋ณ„ ํ™•์žฅ์„ ํ‘œํ˜„ํ•˜๋Š”๋ฐ, ActivityPub ๊ฐ์ฒด์™€ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๊ฒฌ๊ณ ํ•˜๊ณ  ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜์™€ ์ž‘๋ณ„ํ•˜๊ณ  ์ž์‹  ์žˆ๋Š” ์ฝ”๋”ฉ์„ ์‹œ์ž‘ํ•˜์„ธ์š”! ๐Ÿ’ช๐Ÿผ

์†Œ๊ฐœ: () ์ƒ์— ์„œ๋ฒ„ ์•ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ! ๐Ÿš€

Fedify๋Š” ์—ฐํ•ฉํ˜• ์•ฑ์˜ ๋ณต์žกํ•จ์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒโ€”๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜โ€”์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. Fedify์˜ ํŠน์ง•์„ ์‚ดํŽด๋ณผ๊นŒ์š”? ๐Ÿงต

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

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

  • 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%)

, 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

@johnonolan@threads.net

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

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

@fedicat@pc.cafe

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

fediverse profile showing me working on a laptop on a sofa with a dog on each side

, 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

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

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

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.

@fedicat@pc.cafe

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

screenshot of web browser showing a debug view of JSON showing server info

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