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.

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.

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?

  • Faรงade0 (0%)
  • Metaframework0 (0%)

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

Release Fedify 0.13.0 ยท dahlia/fedify

Released on August 7, 2024. Added closed property to Question class in Activity Vocabulary API. Added Question.closed property. new Question() constructor now accepts closed option. Question.clo...

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

github.com

GitHub - dahlia/fedify-express: Integrate Fedify with Express

Integrate Fedify with Express. Contribute to dahlia/fedify-express development by creating an account on GitHub.

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.

  • Bun0 (0%)
  • Deno0 (0%)
  • Node.js0 (0%)

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

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

github.com

fedify/examples at main ยท dahlia/fedify

ActivityPub server framework in TypeScript. Contribute to dahlia/fedify development by creating an account on GitHub.

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

fedify.dev

Pragmatics | Fedify

This section explains the pragmatic aspects of using Fedify, such as how to utilize the vocabulary API and the de facto norms of ActivityPub implementations.

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

fedify.dev

fedify: CLI toolchain | Fedify

The fedify command is a CLI toolchain for Fedify and debugging ActivityPub-enabled federated server apps. This section explains the key features of the fedify command.

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

fedify.dev

Sending activities | Fedify

Fedify provides a way to send activities to other actors' inboxes. This section explains how to send activities to others.

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

unstable.fedify.dev

Integration | Fedify

Fedify is designed to be used together with web frameworks. This document explains how to integrate Fedify with web frameworks.

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

fedify.dev

Vocabulary | Fedify

The Activity Vocabulary is a collection of type-safe objects that represent the Activity Vocabulary and the vendor-specific extensions. This section explains the key features of the objects.

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

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

fedify.dev

Fedify

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

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

Logging | Fedify

Logging is a useful tool for debugging your federated server app. This section explains how to enable logging in your federated server app.

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

npmjs.com

@fedify/fedify

An ActivityPub server framework. Latest version: 0.12.0, last published: 2 days ago. Start using @fedify/fedify in your project by running `npm i @fedify/fedify`. There is 1 other project in the npm registry using @fedify/fedify.

@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