<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
<p>We'd like to recognize the valuable contributions from two developers who participated in Korea's <a href="/tags/ossca/" rel="tag">#OSSCA</a> (Open Source Contribution Academy) program. Both contributors identified important gaps in <a href="/tags/fedify/" rel="tag">#Fedify</a>'s functionality and documentation, providing thoughtful solutions that benefit the broader <a href="/tags/activitypub/" rel="tag">#ActivityPub</a> ecosystem.</p><p><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> contributed <a href="https://github.com/fedify-dev/fedify/pull/365" rel="nofollow">PR #365</a>, addressing <a href="https://github.com/fedify-dev/fedify/issues/353" rel="nofollow">issue #353</a> regarding NodeInfo parser compatibility, originally reported by <span class="h-card"><a href="https://macaw.social/@andypiper" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>andypiper</span></a></span>. The issue arose when Fedify incorrectly rejected <a href="/tags/nodeinfo/" rel="tag">#NodeInfo</a> documents from snac instances due to overly strict version string parsing that required semantic versioning compliance. Their solution improves the fallback behavior in the parseSoftware() function to handle non-SemVer version strings by parsing dot-separated numbers and defaulting to zero for missing components. The implementation includes thorough test coverage for various edge cases, including single numbers (3), two-part versions (2.81), and malformed version strings. This fix provides immediate compatibility improvements across the fediverse while maintaining backward compatibility, and will be included in Fedify 1.9. The contribution serves as an interim solution, with a more comprehensive fix planned for Fedify 2.0 (<a href="https://github.com/fedify-dev/fedify/issues/366" rel="nofollow">issue #366</a>), where the NodeInfo software.version field will be changed from the SemVer type to a plain string to fully comply with the NodeInfo specification.</p><p><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> contributed <a href="https://github.com/fedify-dev/fedify/pull/364" rel="nofollow">PR #364</a>, resolving <a href="https://github.com/fedify-dev/fedify/issues/337" rel="nofollow">issue #337</a> by adding practical examples for Fedify's custom collection dispatchers feature. Custom collections were introduced in Fedify 1.8 but lacked clear documentation for developers seeking to implement them. Their contribution provides a comprehensive example demonstrating how to set up custom collections for tagged posts, including proper routing patterns, pagination handling, and counter functionality. The example includes mock data structures, shows how to configure collection dispatchers with URL patterns like /users/{userId}/tags/{tag}, and demonstrates the complete request/response cycle using federation.fetch(). This work provides developers with a clear, runnable reference that reduces the complexity of implementing custom collections in ActivityPub applications.</p><p>We appreciate these meaningful contributions that help make Fedify more accessible and robust for the entire ActivityPub community.</p><p><a href="/tags/opensource/" rel="tag">#opensource</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a> <a href="/tags/fediverse/" rel="tag">#fediverse</a></p>
<p>Excited to share that I've joined <a href="/tags/ossca/" rel="tag">#OSSCA</a> (Open Source Software Contribution Academy) as a mentor for the <span class="h-card"><a href="https://hollo.social/@fedify" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>fedify</span></a></span> project!</p><p>OSSCA is a national program run by South Korea's NIPA (National IT Industry Promotion Agency) through their Open Source Software Support Center, aimed at fostering the next generation of open source contributors.</p><p>We're currently in the process of selecting around 20 mentees who will start contributing to <a href="/tags/fedify/" rel="tag">#Fedify</a> once the selection is complete. I've been busy preparing good first issues to help them get started on their open source journey.</p><p>Looking forward to working with these new contributors and seeing what amazing things we can build together!</p><p><a href="/tags/opensource/" rel="tag">#opensource</a> <a href="/tags/mentoring/" rel="tag">#mentoring</a> <a href="/tags/activitypub/" rel="tag">#ActivityPub</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
<p>We're thrilled to highlight five outstanding contributions from the Korean Open Source Contribution Academy (<a href="/tags/ossca/" rel="tag">#OSSCA</a>) program participants who have been working on <a href="/tags/fedify/" rel="tag">#Fedify</a>! Their dedication and effort have significantly enhanced our <a href="/tags/activitypub/" rel="tag">#ActivityPub</a> server framework.</p><p>First up is <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> with his monumental <a href="/tags/318 pr/" rel="tag">#318 PR</a>, implementing a SQLite-based key–value store to address <a href="/tags/274/" rel="tag">#274</a>. This contribution adds the SqliteKvStore class with full cross-runtime support for Node.js, Deno, and Bun through the new @fedify/sqlite package. His implementation includes atomic operations, TTL support, comprehensive test coverage, and careful attention to SQL injection prevention. This enables developers to use SQLite as a persistent storage backend while maintaining compatibility with Fedify's existing KvStore API—a crucial feature for production deployments!</p><p>Next, <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> delivered an excellent quality-of-life improvement with <a href="/tags/341 pr/" rel="tag">#341 PR</a>, fixing <a href="/tags/257/" rel="tag">#257</a>. He enhanced the CLI to properly respect TTY status and the NO_COLOR environment variable, implementing intelligent color control across all CLI commands. The solution involved switching from @cliffy/ansi/colors to @std/fmt/colors, creating a helper function using Deno.inspect() to handle object formatting, and ensuring colors are correctly disabled when output is redirected to files. This makes the CLI much more pipe-friendly and suitable for automated workflows!</p><p><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> contributed a thoughtful enhancement with <a href="/tags/342 pr/" rel="tag">#342 PR</a>, addressing <a href="/tags/191/" rel="tag">#191</a>. She updated the fedify inbox command to display not just the activity type, but also the type of object contained within each activity—transforming output like "Create" into the more informative "Create(Note)" or "Undo" into "Undo(Follow)". This seemingly simple change required making the display function asynchronous to fetch the enclosed objects, significantly improving the debugging experience for developers!</p><p><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> tackled an important developer experience issue with <a href="/tags/329 pr/" rel="tag">#329 PR</a>, solving <a href="/tags/306/" rel="tag">#306</a>. Previously, the fedify init command would often install outdated versions of Fedify packages like @fedify/redis because version numbers were hardcoded in the CLI. They created a getLatestVersion() function that dynamically retrieves package versions from local metadata files, ensuring that developers always get the latest versions of all Fedify packages when initializing a new project. This improvement includes comprehensive test coverage and eliminates the frustration of starting a project with outdated dependencies!</p><p>Finally, <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> made a significant contribution with <a href="/tags/309 pr/" rel="tag">#309 PR</a>, implementing <a href="/tags/269/" rel="tag">#269</a>—NestJS integration! They created the @fedify/nestjs package with a FedifyModule that seamlessly integrates Fedify into NestJS applications. This includes proper middleware implementation, dependency injection support through NestJS's module system, and compatibility with both CommonJS and ESM environments. This opens up Fedify to the large NestJS developer community, making it easier than ever to build ActivityPub-enabled applications with this popular enterprise framework!</p><p>These contributions showcase the incredible talent and dedication of the OSSCA participants. From core infrastructure improvements to developer experience enhancements, each contribution makes Fedify better for the entire community. Thank you all for your hard work and welcome to the Fedify contributor family! 🚀</p><p>We're looking forward to seeing more amazing contributions from the OSSCA program and the broader community. If you're interested in contributing to Fedify, check out our <a href="https://github.com/fedify-dev/fedify" rel="nofollow">GitHub repository</a> and join us in building the future of federated social web! 🌟</p><p><a href="/tags/opensource/" rel="tag">#opensource</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a> <a href="/tags/fediverse/" rel="tag">#fediverse</a></p>
<p>🎉 Huge shoutout to two amazing contributors from Korea's <a href="/tags/ossca/" rel="tag">#OSSCA</a> program who've made excellent contributions to <a href="/tags/fedify/" rel="tag">#Fedify</a>!</p><p>👏 <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> tackled a tricky terminal compatibility issue in <a href="https://github.com/fedify-dev/fedify/pull/282" rel="nofollow">PR #282</a>, fixing the fedify node command's favicon display on terminal emulators without truecolor support (<a href="/tags/168/" rel="tag">#168</a>). His solution elegantly detects terminal capabilities and falls back to 256-color mode when needed—ensuring a great experience across different environments.</p><p>🌟 <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> enhanced Fedify's <a href="/tags/webfinger/" rel="tag">#WebFinger</a> functionality in <a href="https://github.com/fedify-dev/fedify/pull/281" rel="nofollow">PR #281</a> by adding a configurable maxRedirection option to the lookupWebFinger() function (<a href="/tags/248/" rel="tag">#248</a>). He transformed a hardcoded limitation into a flexible, user-customizable parameter while maintaining perfect backward compatibility.</p><p>Both delivered thoughtful, well-implemented solutions that showcase the quality of contributions coming from the OSSCA program. Welcome to the Fedify community! <img src="https://neodb.social/media/emoji/hollo.social/fedify.png" class="emoji" alt=":fedify:" title=":fedify:"></p><p><a href="/tags/activitypub/" rel="tag">#ActivityPub</a> <a href="/tags/opensource/" rel="tag">#opensource</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
<p>🎉 Huge shoutouts to two amazing contributors from Korea's <a href="/tags/ossca/" rel="tag">#OSSCA</a> program who just made <a href="/tags/fedify/" rel="tag">#Fedify</a> even better!</p><p>First, <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> delivered <a href="https://github.com/fedify-dev/fedify/pull/321" rel="nofollow">PR #321</a>, adding a handy -o/--output option to fedify lookup. Now you can save lookup results directly to files instead of just printing to terminal—a nice quality-of-life improvement for analysis and scripting workflows.</p><p>But the real showstopper is <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>'s incredible <a href="https://github.com/fedify-dev/fedify/pull/283" rel="nofollow">PR #283</a>, which introduces the brand new @fedify/testing package! This massive contribution (2,014 lines across 20 files) brings MockFederation and MockContext classes that completely transform how we test federated applications. No more complex setups or actual network requests—just clean, straightforward unit testing with activity tracking, inbox simulation, and queue-aware testing capabilities.</p><p>These contributions solve real pain points and showcase the amazing talent emerging from the OSSCA program. Both features will be available in the upcoming Fedify 1.8 release. The future of federated software development just got a lot brighter! 🚀</p><p><a href="/tags/activitypub/" rel="tag">#ActivityPub</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a> <a href="/tags/fediverse/" rel="tag">#fediverse</a> <a href="/tags/opensource/" rel="tag">#opensource</a></p>
<p>We'd like to recognize some excellent contributions from our <a href="/tags/ossca/" rel="tag">#OSSCA</a> (Open Source Contribution Academy) participants who have been working on <a href="/tags/fedify/" rel="tag">#Fedify</a>.</p><p><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> contributed <a href="https://github.com/fedify-dev/fedify/pull/339" rel="nofollow">PR #339</a>, which introduces the @fedify/elysia package to provide <a href="https://elysiajs.com/" rel="nofollow">Elysia</a> integration for Fedify. This work addresses <a href="https://github.com/fedify-dev/fedify/issues/286" rel="nofollow">issue #286</a> by creating a plugin that enables developers using <a href="/tags/bun/" rel="tag">#Bun</a> and <a href="/tags/elysia/" rel="tag">#Elysia</a> to integrate Fedify's <a href="/tags/activitypub/" rel="tag">#ActivityPub</a> capabilities into their applications. The contribution includes the core integration module, documentation, examples, and proper monorepo configuration, making Fedify accessible to the Elysia community.</p><p><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> submitted <a href="https://github.com/fedify-dev/fedify/pull/315" rel="nofollow">PR #315</a>, implementing comprehensive <a href="https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal" rel="nofollow">AbortSignal</a> support across multiple APIs to resolve <a href="https://github.com/fedify-dev/fedify/issues/51" rel="nofollow">issue #51</a>. This contribution adds request cancellation capabilities not only to lookupWebFinger() but also to lookupObject(), DocumentLoader, and the HTTP signature authentication flow (doubleKnock()), allowing developers to properly handle timeouts and abort ongoing requests throughout the entire request chain. The implementation includes extensive test coverage for cancellation scenarios across all affected components and lays the groundwork for <a href="https://github.com/fedify-dev/fedify/issues/258" rel="nofollow">adding --timeout options to various CLI commands like fedify lookup</a>, fedify webfinger, and fedify nodeinfo, making federated applications more robust and responsive.</p><p><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> addressed a testing infrastructure issue with <a href="https://github.com/fedify-dev/fedify/pull/350" rel="nofollow">PR #350</a>, fixing a race condition in PostgreSQL message queue tests that was causing intermittent failures (<a href="https://github.com/fedify-dev/fedify/issues/346" rel="nofollow">issue #346</a>). By adding explicit initialization before concurrent message queue listeners, this fix prevents table creation conflicts that were affecting test reliability, ensuring more consistent PR testing for all contributors.</p><p><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> provided two test stability improvements with <a href="https://github.com/fedify-dev/fedify/pull/344" rel="nofollow">PR #344</a> and <a href="https://github.com/fedify-dev/fedify/pull/347" rel="nofollow">PR #347</a>. The first PR adds skip guards to RedisKvStore tests as a workaround for a known Bun runtime issue, keeping the test suite functional while awaiting an upstream fix. The second PR resolves a race condition in the code generation process by randomizing output filenames, preventing conflicts during parallel test execution. These contributions help maintain a stable testing environment for the project.</p><p>Thank you all for your contributions to Fedify. Your work helps make federated social networking more accessible to developers.</p><p><a href="/tags/opensource/" rel="tag">#opensource</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a> <a href="/tags/fediverse/" rel="tag">#fediverse</a></p>