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