@fedify/fedify
Version:
An ActivityPub server framework
236 lines (197 loc) • 14.4 kB
Markdown
<!-- deno-fmt-ignore-file -->
 Fedify: an ActivityPub server framework
=======================================================
[![JSR][JSR badge]][JSR]
[![npm][npm badge]][npm]
[![GitHub Actions][GitHub Actions badge]][GitHub Actions]
[![Matrix][Matrix badge]][Matrix]
[![Follow .social][.social badge]][.social]
> [!NOTE]
> Looking for a quick demo? Here it is: [Fedify Demo] on Deno Playground.
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] &
[Creating a microblog]
- [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
[.social badge]: https://fedi-badge.deno.dev/@fedify@hollo.social/followers.svg
[.social]: https://hollo.social/@fedify
[Fedify Demo]: https://dash.deno.com/playground/fedify-demo
[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]: https://fedify.dev/tutorial/basics
[Creating a microblog]: https://fedify.dev/tutorial/microblog
[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*,
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](/packages/fedify/) | [JSR] | [npm] | The core framework of Fedify |
| [/cli](/packages/cli/) | [JSR][jsr:/cli] | [npm][npm:@fedify/cli] | CLI toolchain for testing and debugging |
| [@fedify/create](/packages/create/) | | [npm][npm:/create] | Create a new Fedify project |
| [/amqp](/packages/amqp/) | [JSR][jsr:/amqp] | [npm][npm:@fedify/amqp] | AMQP/RabbitMQ driver |
| [/astro](/packages/astro/) | [JSR][jsr:/astro] | [npm][npm:@fedify/astro] | Astro integration |
| [@fedify/cfworkers](/packages/cfworkers/) | [JSR][jsr:/cfworkers] | [npm][npm:@fedify/cfworkers] | Cloudflare Workers integration |
| [@fedify/debugger](/packages/debugger/) | [JSR][jsr:/debugger] | [npm][npm:@fedify/debugger] | Embedded ActivityPub debug dashboard |
| [@fedify/denokv](/packages/denokv/) | [JSR][jsr:/denokv] | | Deno KV integration |
| [/elysia](/packages/elysia/) | | [npm][npm:/elysia] | Elysia integration |
| [/express](/packages/express/) | [JSR][jsr:/express] | [npm][npm:@fedify/express] | Express integration |
| [@fedify/fastify](/packages/fastify/) | [JSR][jsr:/fastify] | [npm][npm:@fedify/fastify] | Fastify integration |
| [@fedify/fresh](/packages/fresh/) | [JSR][jsr:/fresh] | | Fresh integration |
| [/h3](/packages/h3/) | [JSR][jsr:/h3] | [npm][npm:@fedify/h3] | H3 integration |
| [@fedify/hono](/packages/hono/) | [JSR][jsr:/hono] | [npm][npm:@fedify/hono] | Hono integration |
| [@fedify/init](/packages/init/) | [JSR][jsr:/init] | [npm][npm:@fedify/init] | Project initializer for Fedify |
| [@fedify/koa](/packages/koa/) | [JSR][jsr:/koa] | [npm][npm:@fedify/koa] | Koa integration |
| [@fedify/lint](/packages/lint/) | [JSR][jsr:/lint] | [npm][npm:@fedify/lint] | Linting utilities |
| [@fedify/nestjs](/packages/nestjs/) | | [npm][npm:/nestjs] | NestJS integration |
| [/next](/packages/next/) | | [npm][npm:/next] | Next.js integration |
| [/nuxt](/packages/nuxt/) | [JSR][jsr:/nuxt] | [npm][npm:@fedify/nuxt] | Nuxt integration |
| [@fedify/mysql](/packages/mysql/) | [JSR][jsr:/mysql] | [npm][npm:@fedify/mysql] | MySQL/MariaDB driver |
| [/postgres](/packages/postgres/) | [JSR][jsr:/postgres] | [npm][npm:@fedify/postgres] | PostgreSQL driver |
| [@fedify/redis](/packages/redis/) | [JSR][jsr:/redis] | [npm][npm:@fedify/redis] | Redis driver |
| [@fedify/relay](/packages/relay/) | [JSR][jsr:/relay] | [npm][npm:@fedify/relay] | ActivityPub relay support |
| [@fedify/solidstart](/packages/solidstart/) | [JSR][jsr:/solidstart] | [npm][npm:@fedify/solidstart] | SolidStart integration |
| [@fedify/sqlite](/packages/sqlite/) | [JSR][jsr:/sqlite] | [npm][npm:@fedify/sqlite] | SQLite driver |
| [@fedify/sveltekit](/packages/sveltekit/) | [JSR][jsr:/sveltekit] | [npm][npm:@fedify/sveltekit] | SvelteKit integration |
| [@fedify/testing](/packages/testing/) | [JSR][jsr:/testing] | [npm][npm:@fedify/testing] | Testing utilities |
| [@fedify/vocab](/packages/vocab/) | [JSR][jsr:/vocab] | [npm][npm:@fedify/vocab] | Activity Vocabulary library |
| [@fedify/vocab-runtime](/packages/vocab-runtime/) | [JSR][jsr:/vocab-runtime] | [npm][npm:@fedify/vocab-runtime] | Runtime library for code-generated vocab |
| [@fedify/vocab-tools](/packages/vocab-tools/) | [JSR][jsr:/vocab-tools] | [npm][npm:@fedify/vocab-tools] | Code generation tools for Activity Vocab |
| [@fedify/webfinger](/packages/webfinger/) | [JSR][jsr:/webfinger] | [npm][npm:@fedify/webfinger] | WebFinger client library for ActivityPub |
[jsr:@fedify/cli]: https://jsr.io//cli
[npm:/cli]: https://www.npmjs.com/package/@fedify/cli
[npm:/create]: https://www.npmjs.com/package/@fedify/create
[jsr:/amqp]: https://jsr.io//amqp
[npm:/amqp]: https://www.npmjs.com/package/@fedify/amqp
[jsr:/astro]: https://jsr.io//astro
[npm:/astro]: https://www.npmjs.com/package/@fedify/astro
[jsr:/cfworkers]: https://jsr.io//cfworkers
[npm:/cfworkers]: https://www.npmjs.com/package/@fedify/cfworkers
[jsr:/debugger]: https://jsr.io//debugger
[npm:/debugger]: https://www.npmjs.com/package/@fedify/debugger
[jsr:/denokv]: https://jsr.io//denokv
[npm:/elysia]: https://www.npmjs.com/package/@fedify/elysia
[jsr:/express]: https://jsr.io//express
[npm:/express]: https://www.npmjs.com/package/@fedify/express
[jsr:/fastify]: https://jsr.io//fastify
[npm:/fastify]: https://www.npmjs.com/package/@fedify/fastify
[jsr:/fresh]: https://jsr.io//fresh
[jsr:/h3]: https://jsr.io//h3
[npm:/h3]: https://www.npmjs.com/package/@fedify/h3
[jsr:/hono]: https://jsr.io//hono
[npm:/hono]: https://www.npmjs.com/package/@fedify/hono
[jsr:/init]: https://jsr.io//init
[npm:/init]: https://www.npmjs.com/package/@fedify/init
[jsr:/koa]: https://jsr.io//koa
[npm:/koa]: https://www.npmjs.com/package/@fedify/koa
[jsr:/lint]: https://jsr.io//lint
[npm:/lint]: https://www.npmjs.com/package/@fedify/lint
[npm:/nestjs]: https://www.npmjs.com/package/@fedify/nestjs
[npm:/next]: https://www.npmjs.com/package/@fedify/next
[jsr:/nuxt]: https://jsr.io//nuxt
[npm:/nuxt]: https://www.npmjs.com/package/@fedify/nuxt
[jsr:/mysql]: https://jsr.io//mysql
[npm:/mysql]: https://www.npmjs.com/package/@fedify/mysql
[jsr:/postgres]: https://jsr.io//postgres
[npm:/postgres]: https://www.npmjs.com/package/@fedify/postgres
[jsr:/redis]: https://jsr.io//redis
[npm:/redis]: https://www.npmjs.com/package/@fedify/redis
[jsr:/relay]: https://jsr.io//relay
[npm:/relay]: https://www.npmjs.com/package/@fedify/relay
[jsr:/solidstart]: https://jsr.io//solidstart
[npm:/solidstart]: https://www.npmjs.com/package/@fedify/solidstart
[jsr:/sqlite]: https://jsr.io//sqlite
[npm:/sqlite]: https://www.npmjs.com/package/@fedify/sqlite
[jsr:/sveltekit]: https://jsr.io//sveltekit
[npm:/sveltekit]: https://www.npmjs.com/package/@fedify/sveltekit
[jsr:/testing]: https://jsr.io//testing
[npm:/testing]: https://www.npmjs.com/package/@fedify/testing
[jsr:/vocab]: https://jsr.io//vocab
[npm:/vocab]: https://www.npmjs.com/package/@fedify/vocab
[jsr:/vocab-runtime]: https://jsr.io//vocab-runtime
[npm:/vocab-runtime]: https://www.npmjs.com/package/@fedify/vocab-runtime
[jsr:/vocab-tools]: https://jsr.io//vocab-tools
[npm:/vocab-tools]: https://www.npmjs.com/package/@fedify/vocab-tools
[jsr:/webfinger]: https://jsr.io//webfinger
[npm:/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 every hour.
<!-- hongdown-disable -->
<!-- cSpell: disable -->
<!-- DO NOT EDIT(h3): this section is automatically generated by the script -->
### Corporate sponsors
- [<img src="https://images.opencollective.com/ghost/avatar/128.png" width="64" height="64"> Ghost](https://ghost.org)
### Supporters
- [Daniel Supernault](https://pixelfed.org/)
- [tkgka](https://opencollective.com/tkgka)
- [Blaine](https://opencollective.com/blaine)
- [Erick González Aguilar](https://opencollective.com/erick-gonzalez-aguilar)
### Backers
Robin Riley, yamanoku, Encyclia, taye, okin, Andy Piper, box464, Evan Prodromou, Rafael Goulart, malte
### One-time donations
Robin Riley, Markus P, Nils Bergmann, Rameez
<!-- /DO NOT EDIT -->
<!-- cSpell: enable -->
<!-- hongdown-enable -->
### 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