<p>We're thrilled to announce <a href="https://github.com/fedify-dev/fedify/releases/tag/1.8.1" rel="nofollow">Fedify 1.8.1</a>, a mega release made possible through the incredible efforts of contributors from South Korea's <a href="/tags/ossca/" rel="tag">#OSSCA</a> (Open Source Contribution Academy). This release marks a significant milestone in <a href="/tags/fedify/" rel="tag">#Fedify</a>'s development, bringing major architectural changes, new packages, and numerous enhancements across the board.</p><p><p>Note: Version 1.8.0 was skipped due to a versioning error.</p></p><p>π Major Milestone: Monorepo Architecture</p><p>Fedify has been restructured as a <a href="/tags/monorepo/" rel="tag">#monorepo</a>, 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.</p><p>Consolidated Packages</p><p>All existing Fedify packages now live under one roof:</p><p>@fedify/fedify β Main library<br>@fedify/cli β CLI toolchain<br>@fedify/amqp β AMQP/RabbitMQ driver<br>@fedify/express β Express integration<br>@fedify/h3 β h3 framework integration<br>@fedify/postgres β PostgreSQL drivers<br>@fedify/redis β Redis drivers</p><p>π New Packages</p><p>This release introduces four new packages to the Fedify ecosystem:</p><p>@fedify/elysia β <a href="https://elysiajs.com/" rel="nofollow">Elysia</a> integration for Bun-powered applications<br>@fedify/nestjs β <a href="https://nestjs.com/" rel="nofollow">NestJS</a> integration for enterprise Node.js apps<br>@fedify/sqlite β SQLite driver compatible with Bun, Deno, and Node.js<br>@fedify/testing β Testing utilities with mock Federation and Context classes</p><p>@fedify/fedify</p><p>Custom Collection Dispatchers</p><p>A powerful new feature that allows you to create <a href="https://fedify.dev/manual/collections#custom-collections" rel="nofollow">custom collections</a> beyond the standard ActivityPub collections. This enables implementation of domain-specific collections while maintaining federation compatibility.</p><p>Contributors: ChanHaeng Lee [<a href="/tags/310/" rel="tag">#310</a>, <a href="/tags/332/" rel="tag">#332</a>]</p><p>Added comprehensive types and interfaces for custom collection handling<br>New methods on Federatable interface: setCollectionDispatcher() and setOrderedCollectionDispatcher()<br>Added getCollectionUri() method to the Context interface<br>Full support for paginated custom collections</p><p>Compare-and-Swap (CAS) Support for KV Stores</p><p>Keyβvalue stores now optionally support CAS operations for atomic updates, enabling optimistic locking and preventing lost updates in concurrent environments.</p><p>Added optional KvStore.cas() method<br>Implemented in MemoryKvStore and DenoKvStore<br>Useful for implementing distributed locks and counters</p><p>Fediverse Handle Utilities</p><p>New utility functions make working with <a href="/tags/fediverse/" rel="tag">#fediverse</a> handles more convenient.</p><p>Contributors: ChanHaeng Lee [<a href="/tags/278/" rel="tag">#278</a>]</p><p>parseFediverseHandle() β Parse handles into components<br>isFediverseHandle() β Validate handle format<br>toAcctUrl() β Convert handles to URLs<br>FediverseHandle interface for type safety</p><p>Enhanced HTTP Request APIs</p><p>Contributors: Lee ByeongJun [<a href="/tags/248/" rel="tag">#248</a>, <a href="/tags/281/" rel="tag">#281</a>], Hyunchae Kim [<a href="/tags/51/" rel="tag">#51</a>, <a href="/tags/315/" rel="tag">#315</a>]</p><p>Added LookupWebFingerOptions.maxRedirection option for controlling redirect behavior<br>APIs now support AbortSignal for request cancellation<br>New DocumentLoaderOptions interface<br>Added signal options to LookupObjectOptions, LookupWebFingerOptions, and DoubleKnockOptions</p><p>@fedify/cli</p><p>New Commands and Enhancements</p><p>The CLI has received significant improvements thanks to our OSSCA contributors:</p><p><a href="https://fedify.dev/cli#fedify-webfinger-looking-up-a-webfinger-resource" rel="nofollow">fedify webfinger Command</a></p><p>Contributors: ChanHaeng Lee [<a href="/tags/260/" rel="tag">#260</a>, <a href="/tags/278/" rel="tag">#278</a>], KeunHyeong Park [<a href="/tags/311/" rel="tag">#311</a>, <a href="/tags/328/" rel="tag">#328</a>]</p><p>Look up WebFinger information for any fediverse resource:</p><p>Supports handles (@user@server) and URLs<br>--user-agent option for custom User-Agent headers<br>--allow-private-address for local testing<br>--max-redirection to control redirect following</p><p>fedify nodeinfo Command</p><p>Contributors: Hyeonseo Kim [<a href="/tags/267/" rel="tag">#267</a>, <a href="/tags/331/" rel="tag">#331</a>, <a href="/tags/168/" rel="tag">#168</a>, <a href="/tags/282/" rel="tag">#282</a>, <a href="/tags/304/" rel="tag">#304</a>]</p><p>Replaces the deprecated fedify node command with improved terminal rendering.</p><p>Enhanced fedify lookup Command</p><p>Contributors: Jiwon Kwon [<a href="/tags/169/" rel="tag">#169</a>, <a href="/tags/348/" rel="tag">#348</a>, <a href="/tags/261/" rel="tag">#261</a>, <a href="/tags/321/" rel="tag">#321</a>]</p><p>Terminal-specific image display for Kitty, WezTerm, Konsole, Warp, Wayst, st, and iTerm<br>-o/--output option to save results to files</p><p>Improved fedify inbox Command</p><p>Contributors: Hasang Cho [<a href="/tags/262/" rel="tag">#262</a>, <a href="/tags/285/" rel="tag">#285</a>], Jang Hanarae [<a href="/tags/191/" rel="tag">#191</a>, <a href="/tags/342/" rel="tag">#342</a>]</p><p>--actor-name and --actor-summary options for customizing temporary actors<br>Now displays object types contained in activities</p><p>fedify init --dry-run</p><p>Contributors: Lee ByeongJun [<a href="/tags/263/" rel="tag">#263</a>, <a href="/tags/298/" rel="tag">#298</a>]</p><p>Preview project initialization without creating files.</p><p>Better Terminal Support</p><p>Contributors: Cho Hasang [<a href="/tags/257/" rel="tag">#257</a>, <a href="/tags/341/" rel="tag">#341</a>]</p><p>Correctly handles color output based on TTY detection and NO_COLOR environment variable.</p><p>@fedify/elysia</p><p>Contributors: Hyeonseo Kim [<a href="/tags/286/" rel="tag">#286</a>, <a href="/tags/339/" rel="tag">#339</a>]</p><p>New <a href="https://fedify.dev/manual/integration#elysia" rel="nofollow">Elysia integration</a> brings Fedify to Bun-powered applications with a simple plugin interface:</p><p>import { Elysia } from "elysia";import { fedify } from "@fedify/elysia";const app = new Elysia() .use(fedify(federation, { /* options */ })) .listen(3000);</p><p>@fedify/nestjs</p><p>Contributors: Jaeyeol Lee [<a href="/tags/269/" rel="tag">#269</a>, <a href="/tags/309/" rel="tag">#309</a>]</p><p>Enterprise-ready <a href="https://fedify.dev/manual/integration#nestjs" rel="nofollow">NestJS integration</a> with dependency injection support:</p><p>import { FedifyModule } from "@fedify/nestjs";@Module({ imports: [ FedifyModule.forRoot({ kv: new MemoryKvStore(), queue: new InProcessMessageQueue(), origin: "<a href="https://example.com" rel="nofollow"><span class="invisible">https://</span>example.com</a>", }), ],})export class AppModule {}</p><p>@fedify/sqlite</p><p>Contributors: An Subin [<a href="/tags/274/" rel="tag">#274</a>, <a href="/tags/318/" rel="tag">#318</a>]</p><p><a href="https://fedify.dev/manual/kv#sqlitekvstore" rel="nofollow">SqliteKvStore</a> implementation compatible across all major JavaScript runtimes:</p><p>import { SqliteKvStore } from "@fedify/sqlite";const kv = new SqliteKvStore("./fedify.db");</p><p>@fedify/testing</p><p>Contributors: Lee ByeongJun [<a href="/tags/197/" rel="tag">#197</a>, <a href="/tags/283/" rel="tag">#283</a>]</p><p>Comprehensive <a href="https://fedify.dev/manual/test#mocking" rel="nofollow">testing utilities with mocking support</a> for Fedify applications:</p><p>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</p><p>π Acknowledgments</p><p>This release represents an extraordinary community effort, particularly from the participants of South Korea's <a href="https://www.oss.kr/contribution_academy" rel="nofollow">OSSCA (Open Source Contribution Academy)</a> (Note: page in Korean). We extend our heartfelt thanks to all contributors:</p><p>Core Contributors</p><p>ChanHaeng Lee (<span class="h-card"><a href="https://hackers.pub/@2chanhaeng" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>2chanhaeng</span></a></span>) β Custom collections, fediverse handles, WebFinger command<br>Lee ByeongJun (<span class="h-card"><a href="https://hackers.pub/@joonnot" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>joonnot</span></a></span>) β WebFinger redirections, dry-run, testing utilities<br>Hyunchae Kim (<span class="h-card"><a href="https://hackers.pub/@r4bb1t" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>r4bb1t</span></a></span>) β AbortSignal support<br>Hyeonseo Kim (<span class="h-card"><a href="https://yuri.garden/@gaebalgom" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>gaebalgom</span></a></span>) β Elysia integration, nodeinfo command<br>Jaeyeol Lee (<span class="h-card"><a href="https://hackers.pub/@kodingwarrior" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>kodingwarrior</span></a></span>) β NestJS integration<br>An Subin (<span class="h-card"><a href="https://hackers.pub/@nyeong" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>nyeong</span></a></span>) β SQLite driver<br>Jiwon Kwon (<span class="h-card"><a href="https://hackers.pub/@z9mb1" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>z9mb1</span></a></span>) β Terminal image display, output options<br>Hasang Cho (<span class="h-card"><a href="https://hackers.pub/@crohasang" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>crohasang</span></a></span>) β Color output handling, actor customization<br>Jang Hanarae (<span class="h-card"><a href="https://hackers.pub/@menele" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>menele</span></a></span>) β Activity object type display<br>KeunHyeong Park (<span class="h-card"><a href="https://hackers.pub/@w8385" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>w8385</span></a></span>) β WebFinger redirect options</p><p>Test Infrastructure Contributors</p><p>Oh Daeun (<span class="h-card"><a href="https://hackers.pub/@ooheunda" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>ooheunda</span></a></span>) β Fixed PostgreSQL test race conditions [<a href="/tags/346/" rel="tag">#346</a>, <a href="/tags/350/" rel="tag">#350</a>]<br>Song Hanseo (<span class="h-card"><a href="https://hackers.pub/@songbirds" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>songbirds</span></a></span>) β Test stability improvements for Redis and code generation [<a href="/tags/344/" rel="tag">#344</a>, <a href="/tags/347/" rel="tag">#347</a>]<br>Kim Jonghyeon (<span class="h-card"><a href="https://hackers.pub/@woaol" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>woaol</span></a></span>) β CLI version management and documentation fixes [<a href="/tags/306/" rel="tag">#306</a>, <a href="/tags/329/" rel="tag">#329</a>, <a href="/tags/330/" rel="tag">#330</a>, <a href="/tags/343/" rel="tag">#343</a>]</p><p>Your contributions have made Fedify stronger and more versatile than ever. The OSSCA program's support has been instrumental in achieving this milestone release.</p><p>Migration Guide</p><p>Updating from Previous Versions</p><p>If you're using separate Fedify packages, update all packages to version 1.8.1:</p><p>{ "dependencies": { "@fedify/fedify": "^1.8.1", "@fedify/cli": "^1.8.1", "@fedify/express": "^1.8.1" }}</p><p>All packages now share the same version number, simplifying dependency management.</p><p>Breaking Changes</p><p>There are no breaking changes in this release. All existing code should continue to work without modifications.</p><p>What's Next</p><p>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!</p><p>For detailed technical information about all changes, please refer to the <a href="https://fedify.dev/changelog#version-1-8-1" rel="nofollow">full changelog</a>.</p><p>Fedify is an open-source project that helps developers build federated server applications powered by ActivityPub. Join us on <a href="https://github.com/fedify-dev/fedify" rel="nofollow">GitHub</a> or <a href="https://discord.gg/fedify" rel="nofollow">Discord</a> to contribute or get help!</p><p><a href="/tags/opensource/" rel="tag">#opensource</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
Edited 243d ago