Profile
Back to NewsBack
GitHub Trending 9 min
Reader Mode
fedify-dev/fedify: ActivityPub server framework in TypeScript

fedify-dev/fedify: ActivityPub server framework in TypeScript

15 hours ago

Fedify: an ActivityPub server framework =======================================================

[![JSR][JSR badge]][JSR] [![npm][npm badge]][npm] [![GitHub Actions][GitHub Actions badge]][GitHub Actions] [![Matrix][Matrix badge]][Matrix] [![@[email protected]][@[email protected] badge]][@[email protected]]

Fedify is a TypeScript library for building federated server apps powered by [ActivityPub] and other standards, so-called [fediverse].[^1] It aims to eliminate the complexity and boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.

Currently, Fedify provides the following features out of the box:

- Type-safe objects for [Activity Vocabulary] (including some vendor-specific extensions) - [WebFinger] client and server - [HTTP Signatures] & [HTTP Message Signatures] - [Object Integrity Proofs][FEP-8b32] & [Linked Data Signatures] - Middlewares for handling webhooks - [NodeInfo] protocol - Enhanced interoperability with Mastodon and other popular fediverse software - Integration with various web frameworks - CLI toolchain for testing and debugging

If you want to know more about the project, please take a look at the following resources:

- [Installation] - Tutorials - [Learning the basics of Fedify] - [Creating your own federated microblog] - [Creating a federated image sharing service] - [Building a federated blog] - [Building a threadiverse community platform] - [Migrating from other libraries] - [API reference][JSR] - [Examples]

If you have any questions, suggestions, or feedback, please feel free to join our [Matrix chat space][Matrix] or [GitHub Discussions]. Or tag [#Fedify] in the fediverse!

[^1]: You may already know some of the networks in the fediverse, such as [Mastodon], [Lemmy], [Pixelfed], [PeerTube], and so on.

[JSR badge]: https://jsr.io/badges/@fedify/fedify [JSR]: https://jsr.io/@fedify/fedify [npm badge]: https://img.shields.io/npm/v/@fedify/fedify?logo=npm [npm]: https://www.npmjs.com/package/@fedify/fedify [GitHub Actions badge]: https://github.com/fedify-dev/fedify/actions/workflows/build.yaml/badge.svg [GitHub Actions]: https://github.com/fedify-dev/fedify/actions/workflows/build.yaml [Matrix badge]: https://img.shields.io/matrix/fedify%3Amatrix.org?logo=matrix [Matrix]: https://matrix.to/#/#fedify:matrix.org [@[email protected] badge]: https://fedi-badge.minhee.org/@[email protected]/followers.svg [@[email protected]]: https://hackers.pub/@fedify [ActivityPub]: https://www.w3.org/TR/activitypub/ [fediverse]: https://en.wikipedia.org/wiki/Fediverse [Activity Vocabulary]: https://www.w3.org/TR/activitystreams-vocabulary/ [WebFinger]: https://datatracker.ietf.org/doc/html/rfc7033 [HTTP Signatures]: https://tools.ietf.org/html/draft-cavage-http-signatures-12 [HTTP Message Signatures]: https://www.rfc-editor.org/rfc/rfc9421 [FEP-8b32]: https://w3id.org/fep/8b32 [Linked Data Signatures]: https://web.archive.org/web/20170923124140/https://w3c-dvcg.github.io/ld-signatures/ [NodeInfo]: https://nodeinfo.diaspora.software/ [Installation]: https://fedify.dev/install [Learning the basics of Fedify]: https://fedify.dev/tutorial/basics [Creating your own federated microblog]: https://fedify.dev/tutorial/microblog [Creating a federated image sharing service]: https://fedify.dev/tutorial/content-sharing [Building a federated blog]: https://fedify.dev/tutorial/astro-blog [Building a threadiverse community platform]: https://fedify.dev/tutorial/threadiverse [Migrating from other libraries]: https://fedify.dev/manual/migrate [Examples]: https://github.com/fedify-dev/fedify/tree/main/examples [GitHub Discussions]: https://github.com/fedify-dev/fedify/discussions [#Fedify]: https://mastodon.social/tags/fedify

[Mastodon]: https://joinmastodon.org/ [Lemmy]: https://join-lemmy.org/ [Pixelfed]: https://pixelfed.org/ [PeerTube]: https://joinpeertube.org/

Packages --------

Fedify is a monorepo that contains several packages, each of which provides different features. The main package is @fedify/fedify, which provides the core functionality of the framework. Other packages provide integrations with various web frameworks, database drivers, and other features. Here is the list of packages:

| Package | JSR | npm | Description | | --------------------------------------------------------------- | --------------------------------------- | --------------------------------------- | ---------------------------------------- | | @fedify/fedify | [JSR] | [npm] | The core framework of Fedify | | @fedify/cli | [JSR][jsr:@fedify/cli] | [npm][npm:@fedify/cli] | CLI toolchain for testing and debugging | | @fedify/create | | [npm][npm:@fedify/create] | Create a new Fedify project | | @fedify/adonisjs | | [npm][npm:@fedify/adonisjs] | AdonisJS integration | | @fedify/amqp | [JSR][jsr:@fedify/amqp] | [npm][npm:@fedify/amqp] | AMQP/RabbitMQ driver | | @fedify/astro | [JSR][jsr:@fedify/astro] | [npm][npm:@fedify/astro] | Astro integration | | @fedify/backfill | [JSR][jsr:@fedify/backfill] | [npm][npm:@fedify/backfill] | ActivityPub backfill support | | @fedify/cfworkers | [JSR][jsr:@fedify/cfworkers] | [npm][npm:@fedify/cfworkers] | Cloudflare Workers integration | | @fedify/debugger | [JSR][jsr:@fedify/debugger] | [npm][npm:@fedify/debugger] | Embedded ActivityPub debug dashboard | | @fedify/denokv | [JSR][jsr:@fedify/denokv] | | Deno KV integration | | @fedify/elysia | | [npm][npm:@fedify/elysia] | Elysia integration | | @fedify/express | [JSR][jsr:@fedify/express] | [npm][npm:@fedify/express] | Express integration | | @fedify/fastify | [JSR][jsr:@fedify/fastify] | [npm][npm:@fedify/fastify] | Fastify integration | | @fedify/fresh | [JSR][jsr:@fedify/fresh] | | Fresh integration | | @fedify/h3 | [JSR][jsr:@fedify/h3] | [npm][npm:@fedify/h3] | H3 integration | | @fedify/hono | [JSR][jsr:@fedify/hono] | [npm][npm:@fedify/hono] | Hono integration | | @fedify/init | [JSR][jsr:@fedify/init] | [npm][npm:@fedify/init] | Project initializer for Fedify | | @fedify/interaction-controls | [JSR][jsr:@fedify/interaction-controls] | [npm][npm:@fedify/interaction-controls] | Interaction control helpers | | @fedify/koa | [JSR][jsr:@fedify/koa] | [npm][npm:@fedify/koa] | Koa integration | | @fedify/lint | [JSR][jsr:@fedify/lint] | [npm][npm:@fedify/lint] | Linting utilities | | @fedify/nestjs | | [npm][npm:@fedify/nestjs] | NestJS integration | | @fedify/next | | [npm][npm:@fedify/next] | Next.js integration | | @fedify/nuxt | [JSR][jsr:@fedify/nuxt] | [npm][npm:@fedify/nuxt] | Nuxt integration | | @fedify/mysql | [JSR][jsr:@fedify/mysql] | [npm][npm:@fedify/mysql] | MySQL/MariaDB driver | | @fedify/netlify | [JSR][jsr:@fedify/netlify] | [npm][npm:@fedify/netlify] | Netlify Async Workloads integration | | @fedify/pglite | [JSR][jsr:@fedify/pglite] | [npm][npm:@fedify/pglite] | PGlite driver | | @fedify/postgres | [JSR][jsr:@fedify/postgres] | [npm][npm:@fedify/postgres] | PostgreSQL driver | | @fedify/redis | [JSR][jsr:@fedify/redis] | [npm][npm:@fedify/redis] | Redis driver | | @fedify/relay | [JSR][jsr:@fedify/relay] | [npm][npm:@fedify/relay] | ActivityPub relay support | | @fedify/solidstart | [JSR][jsr:@fedify/solidstart] | [npm][npm:@fedify/solidstart] | SolidStart integration | | @fedify/sqlite | [JSR][jsr:@fedify/sqlite] | [npm][npm:@fedify/sqlite] | SQLite driver | | @fedify/sveltekit | [JSR][jsr:@fedify/sveltekit] | [npm][npm:@fedify/sveltekit] | SvelteKit integration | | @fedify/testing | [JSR][jsr:@fedify/testing] | [npm][npm:@fedify/testing] | Testing utilities | | @fedify/uri-template | [JSR][jsr:@fedify/uri-template] | [npm][npm:@fedify/uri-template] | RFC 6570 URI Template library | | @fedify/vocab | [JSR][jsr:@fedify/vocab] | [npm][npm:@fedify/vocab] | Activity Vocabulary library | | @fedify/vocab-runtime | [JSR][jsr:@fedify/vocab-runtime] | [npm][npm:@fedify/vocab-runtime] | Runtime library for code-generated vocab | | @fedify/vocab-tools | [JSR][jsr:@fedify/vocab-tools] | [npm][npm:@fedify/vocab-tools] | Code generation tools for Activity Vocab | | @fedify/webfinger | [JSR][jsr:@fedify/webfinger] | [npm][npm:@fedify/webfinger] | WebFinger client library for ActivityPub |

[jsr:@fedify/cli]: https://jsr.io/@fedify/cli [npm:@fedify/cli]: https://www.npmjs.com/package/@fedify/cli [npm:@fedify/create]: https://www.npmjs.com/package/@fedify/create [npm:@fedify/adonisjs]: https://www.npmjs.com/package/@fedify/adonisjs [jsr:@fedify/amqp]: https://jsr.io/@fedify/amqp [npm:@fedify/amqp]: https://www.npmjs.com/package/@fedify/amqp [jsr:@fedify/astro]: https://jsr.io/@fedify/astro [npm:@fedify/astro]: https://www.npmjs.com/package/@fedify/astro [jsr:@fedify/backfill]: https://jsr.io/@fedify/backfill [npm:@fedify/backfill]: https://www.npmjs.com/package/@fedify/backfill [jsr:@fedify/cfworkers]: https://jsr.io/@fedify/cfworkers [npm:@fedify/cfworkers]: https://www.npmjs.com/package/@fedify/cfworkers [jsr:@fedify/debugger]: https://jsr.io/@fedify/debugger [npm:@fedify/debugger]: https://www.npmjs.com/package/@fedify/debugger [jsr:@fedify/denokv]: https://jsr.io/@fedify/denokv [npm:@fedify/elysia]: https://www.npmjs.com/package/@fedify/elysia [jsr:@fedify/express]: https://jsr.io/@fedify/express [npm:@fedify/express]: https://www.npmjs.com/package/@fedify/express [jsr:@fedify/fastify]: https://jsr.io/@fedify/fastify [npm:@fedify/fastify]: https://www.npmjs.com/package/@fedify/fastify [jsr:@fedify/fresh]: https://jsr.io/@fedify/fresh [jsr:@fedify/h3]: https://jsr.io/@fedify/h3 [npm:@fedify/h3]: https://www.npmjs.com/package/@fedify/h3 [jsr:@fedify/hono]: https://jsr.io/@fedify/hono [npm:@fedify/hono]: https://www.npmjs.com/package/@fedify/hono [jsr:@fedify/init]: https://jsr.io/@fedify/init [npm:@fedify/init]: https://www.npmjs.com/package/@fedify/init [jsr:@fedify/interaction-controls]: https://jsr.io/@fedify/interaction-controls [npm:@fedify/interaction-controls]: https://www.npmjs.com/package/@fedify/interaction-controls [jsr:@fedify/koa]: https://jsr.io/@fedify/koa [npm:@fedify/koa]: https://www.npmjs.com/package/@fedify/koa [jsr:@fedify/lint]: https://jsr.io/@fedify/lint [npm:@fedify/lint]: https://www.npmjs.com/package/@fedify/lint [npm:@fedify/nestjs]: https://www.npmjs.com/package/@fedify/nestjs [npm:@fedify/next]: https://www.npmjs.com/package/@fedify/next [jsr:@fedify/nuxt]: https://jsr.io/@fedify/nuxt [npm:@fedify/nuxt]: https://www.npmjs.com/package/@fedify/nuxt [jsr:@fedify/mysql]: https://jsr.io/@fedify/mysql [npm:@fedify/mysql]: https://www.npmjs.com/package/@fedify/mysql [jsr:@fedify/netlify]: https://jsr.io/@fedify/netlify [npm:@fedify/netlify]: https://www.npmjs.com/package/@fedify/netlify [jsr:@fedify/pglite]: https://jsr.io/@fedify/pglite [npm:@fedify/pglite]: https://www.npmjs.com/package/@fedify/pglite [jsr:@fedify/postgres]: https://jsr.io/@fedify/postgres [npm:@fedify/postgres]: https://www.npmjs.com/package/@fedify/postgres [jsr:@fedify/redis]: https://jsr.io/@fedify/redis [npm:@fedify/redis]: https://www.npmjs.com/package/@fedify/redis [jsr:@fedify/relay]: https://jsr.io/@fedify/relay [npm:@fedify/relay]: https://www.npmjs.com/package/@fedify/relay [jsr:@fedify/solidstart]: https://jsr.io/@fedify/solidstart [npm:@fedify/solidstart]: https://www.npmjs.com/package/@fedify/solidstart [jsr:@fedify/sqlite]: https://jsr.io/@fedify/sqlite [npm:@fedify/sqlite]: https://www.npmjs.com/package/@fedify/sqlite [jsr:@fedify/sveltekit]: https://jsr.io/@fedify/sveltekit [npm:@fedify/sveltekit]: https://www.npmjs.com/package/@fedify/sveltekit [jsr:@fedify/testing]: https://jsr.io/@fedify/testing [npm:@fedify/testing]: https://www.npmjs.com/package/@fedify/testing [jsr:@fedify/uri-template]: https://jsr.io/@fedify/uri-template [npm:@fedify/uri-template]: https://www.npmjs.com/package/@fedify/uri-template [jsr:@fedify/vocab]: https://jsr.io/@fedify/vocab [npm:@fedify/vocab]: https://www.npmjs.com/package/@fedify/vocab [jsr:@fedify/vocab-runtime]: https://jsr.io/@fedify/vocab-runtime [npm:@fedify/vocab-runtime]: https://www.npmjs.com/package/@fedify/vocab-runtime [jsr:@fedify/vocab-tools]: https://jsr.io/@fedify/vocab-tools [npm:@fedify/vocab-tools]: https://www.npmjs.com/package/@fedify/vocab-tools [jsr:@fedify/webfinger]: https://jsr.io/@fedify/webfinger [npm:@fedify/webfinger]: https://www.npmjs.com/package/@fedify/webfinger

Sponsors --------

This project exists thanks to all the people who contribute, donate, and sponsor it. We are grateful for their support. We would like to thank the following financial contributors:[^2]

[^2]: Those lists are automatically updated twice a day.

Corporate sponsors

| Avatar | Name | Description | | ------ | ---- | ----------- | | | Ghost | Fiercely independent, professional publishing | | | AltStore | |

Supporters

Backers

Robin Riley, Encyclia, box464, Evan Prodromou, taye, okin, yamanoku, malte, Rafael Goulart, Andy Piper

One-time donations

Robin Riley, malte, Nils Bergmann, Markus P, Rameez, Guest, Guest, Guest, Guest, Guest, Guest, Guest, Guest

Become a sponsor

We welcome financial contributions to help us maintain and improve this project. If you would like to become a financial contributor, please visit our [Open Collective].

[Open Collective]: https://opencollective.com/fedify

Chat with me