Fedify: ActivityPub server framework
@fedify@hollo.social
We're thrilled to announce Fedify 1.8.1, a mega release made possible through the incredible efforts of contributors from South Korea's #OSSCA (Open Source Contribution Academy). This release marks a significant milestone in #Fedify's development, bringing major architectural changes, new packages, and numerous enhancements across the board.
Note: Version 1.8.0 was skipped due to a versioning error.
π Major Milestone: Monorepo Architecture
Fedify has been restructured as a #monorepo, consolidating all packages into a single repository with unified versioning. This change streamlines development and ensures all packages are released together with consistent version numbers.
Consolidated Packages
All existing Fedify packages now live under one roof:
- @fedify/fedify β Main library
- @fedify/cli β CLI toolchain
- @fedify/amqp β AMQP/RabbitMQ driver
- @fedify/express β Express integration
- @fedify/h3 β h3 framework integration
- @fedify/postgres β PostgreSQL drivers
- @fedify/redis β Redis drivers
π New Packages
This release introduces four new packages to the Fedify ecosystem:
- @fedify/elysia β Elysia integration for Bun-powered applications
- @fedify/nestjs β NestJS integration for enterprise Node.js apps
- @fedify/sqlite β SQLite driver compatible with Bun, Deno, and Node.js
- @fedify/testing β Testing utilities with mock
FederationandContextclasses
@fedify/fedify
Custom Collection Dispatchers
A powerful new feature that allows you to create custom collections beyond the standard ActivityPub collections. This enables implementation of domain-specific collections while maintaining federation compatibility.
Contributors: ChanHaeng Lee [#310, #332]
- Added comprehensive types and interfaces for custom collection handling
- New methods on
Federatableinterface:setCollectionDispatcher()andsetOrderedCollectionDispatcher() - Added
getCollectionUri()method to theContextinterface - Full support for paginated custom collections
Compare-and-Swap (CAS) Support for KV Stores
Keyβvalue stores now optionally support CAS operations for atomic updates, enabling optimistic locking and preventing lost updates in concurrent environments.
- Added optional
KvStore.cas()method - Implemented in
MemoryKvStoreandDenoKvStore - Useful for implementing distributed locks and counters
Fediverse Handle Utilities
New utility functions make working with #fediverse handles more convenient.
Contributors: ChanHaeng Lee [#278]
parseFediverseHandle()β Parse handles into componentsisFediverseHandle()β Validate handle formattoAcctUrl()β Convert handles to URLsFediverseHandleinterface for type safety
Enhanced HTTP Request APIs
Contributors: Lee ByeongJun [#248, #281], Hyunchae Kim [#51, #315]
- Added
LookupWebFingerOptions.maxRedirectionoption for controlling redirect behavior - APIs now support
AbortSignalfor request cancellation - New
DocumentLoaderOptionsinterface - Added
signaloptions toLookupObjectOptions,LookupWebFingerOptions, andDoubleKnockOptions
@fedify/cli
New Commands and Enhancements
The CLI has received significant improvements thanks to our OSSCA contributors:
fedify webfinger Command
Contributors: ChanHaeng Lee [#260, #278], KeunHyeong Park [#311, #328]
Look up WebFinger information for any fediverse resource:
- Supports handles (
@user@server) and URLs --user-agentoption for custom User-Agent headers--allow-private-addressfor local testing--max-redirectionto control redirect following
fedify nodeinfo Command
Contributors: Hyeonseo Kim [#267, #331, #168, #282, #304]
Replaces the deprecated fedify node command with improved terminal rendering.
Enhanced fedify lookup Command
Contributors: Jiwon Kwon [#169, #348, #261, #321]
- Terminal-specific image display for Kitty, WezTerm, Konsole, Warp, Wayst, st, and iTerm
-o/--outputoption to save results to files
Improved fedify inbox Command
Contributors: Hasang Cho [#262, #285], Jang Hanarae [#191, #342]
--actor-nameand--actor-summaryoptions for customizing temporary actors- Now displays object types contained in activities
fedify init --dry-run
Contributors: Lee ByeongJun [#263, #298]
Preview project initialization without creating files.
Better Terminal Support
Contributors: Cho Hasang [#257, #341]
Correctly handles color output based on TTY detection and NO_COLOR environment variable.
@fedify/elysia
Contributors: Hyeonseo Kim [#286, #339]
New Elysia integration brings Fedify to Bun-powered applications with a simple plugin interface:
import { Elysia } from "elysia";
import { fedify } from "@fedify/elysia";
const app = new Elysia()
.use(fedify(federation, { /* options */ }))
.listen(3000);@fedify/nestjs
Contributors: Jaeyeol Lee [#269, #309]
Enterprise-ready NestJS integration with dependency injection support:
import { FedifyModule } from "@fedify/nestjs";
@Module({
imports: [
FedifyModule.forRoot({
kv: new MemoryKvStore(),
queue: new InProcessMessageQueue(),
origin: "https://example.com",
}),
],
})
export class AppModule {}@fedify/sqlite
Contributors: An Subin [#274, #318]
SqliteKvStore implementation compatible across all major JavaScript runtimes:
import { SqliteKvStore } from "@fedify/sqlite";
const kv = new SqliteKvStore("./fedify.db");@fedify/testing
Contributors: Lee ByeongJun [#197, #283]
Comprehensive testing utilities with mocking support for Fedify applications:
import { MockFederation, MockContext } from "@fedify/testing";
const mockFederation = new MockFederation();
const mockContext = new MockContext();
// Track sent activities with full metadata
// Support custom path registration
// Multiple activity type listenersπ Acknowledgments
This release represents an extraordinary community effort, particularly from the participants of South Korea's OSSCA (Open Source Contribution Academy) (Note: page in Korean). We extend our heartfelt thanks to all contributors:
Core Contributors
- ChanHaeng Lee (@2chanhaeng) β Custom collections, fediverse handles, WebFinger command
- Lee ByeongJun (@joonnot) β WebFinger redirections, dry-run, testing utilities
- Hyunchae Kim (@r4bb1t) β AbortSignal support
- Hyeonseo Kim (@gaebalgom) β Elysia integration, nodeinfo command
- Jaeyeol Lee (@kodingwarrior) β NestJS integration
- An Subin (@nyeong) β SQLite driver
- Jiwon Kwon (@z9mb1) β Terminal image display, output options
- Hasang Cho (@crohasang) β Color output handling, actor customization
- Jang Hanarae (@menele) β Activity object type display
- KeunHyeong Park (@w8385) β WebFinger redirect options
Test Infrastructure Contributors
- Oh Daeun (@ooheunda) β Fixed PostgreSQL test race conditions [#346, #350]
- Song Hanseo (@songbirds) β Test stability improvements for Redis and code generation [#344, #347]
- Kim Jonghyeon (@woaol) β CLI version management and documentation fixes [#306, #329, #330, #343]
Your contributions have made Fedify stronger and more versatile than ever. The OSSCA program's support has been instrumental in achieving this milestone release.
Migration Guide
Updating from Previous Versions
If you're using separate Fedify packages, update all packages to version 1.8.1:
{
"dependencies": {
"@fedify/fedify": "^1.8.1",
"@fedify/cli": "^1.8.1",
"@fedify/express": "^1.8.1"
}
}All packages now share the same version number, simplifying dependency management.
Breaking Changes
There are no breaking changes in this release. All existing code should continue to work without modifications.
What's Next
With the monorepo structure in place and new integrations available, we're excited to continue improving Fedify's developer experience and expanding its capabilities. Stay tuned for more updates, and thank you for being part of the Fedify community!
For detailed technical information about all changes, please refer to the full changelog.
Fedify is an open-source project that helps developers build federated server applications powered by ActivityPub. Join us on GitHub or Discord to contribute or get help!