<p>I have deeply mixed feelings about <a href="/tags/activitypub/" rel="tag">#ActivityPub</a>'s adoption of JSON-LD, as someone who's spent way too long dealing with it while building <a href="/tags/fedify/" rel="tag">#Fedify</a>.</p><p>Part of me wishes it had never happened. A lot of developers jump into ActivityPub development without really understanding JSON-LD, and honestly, can you blame them? The result is a growing number of implementations producing technically invalid JSON-LD. It works, sort of, because everyone's just pattern-matching against what Mastodon does, but it's not correct. And even developers who do take the time to understand JSON-LD often end up hardcoding their documents anyway, because proper JSON-LD processor libraries simply don't exist for many languages. No safety net, no validation, just vibes and hoping you got the @context right. Naturally, mistakes creep in.</p><p>But then the other part of me thinks: well, we're stuck with JSON-LD now. There's no going back. So wouldn't it be nice if people actually used it properly? Process the documents, normalize them, do the compaction and expansion dance the way the spec intended. That's what Fedify does.</p><p>Here's the part that really gets to me, though. Because Fedify actually processes JSON-LD correctly, it's more likely to break when talking to implementations that produce malformed documents. From the end user's perspective, Fedify looks like the fragile one. “Why can't I follow this person?” Well, because their server is emitting garbage JSON-LD that happens to work with implementations that just treat it as a regular JSON blob. Every time I get one of these bug reports, I feel a certain injustice. Like being the only person in the group project who actually read the assignment.</p><p>To be fair, there are real practical reasons why most people don't bother with proper JSON-LD processing. Implementing a full processor is genuinely a lot of work. It leans on the entire Linked Data stack, which is bigger than most people expect going in. And the performance cost isn't trivial either. Fedify uses some tricks to keep things fast, and I'll be honest, that code isn't my proudest work.</p><p>Anyway, none of this is going anywhere. Just me grumbling into the void. If you're building an ActivityPub implementation, maybe consider using a JSON-LD processor if one's available for your language. And if you're not going to, at least test your output against implementations that do.</p><p><a href="/tags/jsonld/" rel="tag">#JSONLD</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
fedidev
<p>The <a href="/tags/botkit/" rel="tag">#BotKit</a> docs now have <a href="https://botkit.fedify.dev/recipes" rel="nofollow">Recipes</a>! It contains practical examples for common tasks like:</p><p><a href="https://botkit.fedify.dev/recipes#sending-a-direct-message" rel="nofollow">Sending a direct message</a><br><a href="https://botkit.fedify.dev/recipes#following-back" rel="nofollow">Following back</a><br><a href="https://botkit.fedify.dev/recipes#automatically-deleting-old-messages" rel="nofollow">Automatically deleting old messages</a><br><a href="https://botkit.fedify.dev/recipes#scheduled-messages" rel="nofollow">Scheduled messages</a><br><a href="https://botkit.fedify.dev/recipes#automatically-replying-to-mentions" rel="nofollow">Automatically replying to mentions</a><br><a href="https://botkit.fedify.dev/recipes#thread-creation" rel="nofollow">Thread creation</a><br><a href="https://botkit.fedify.dev/recipes#thread-traversal" rel="nofollow">Thread traversal</a></p><p>More recipes are on the way. <a href="https://botkit.fedify.dev/recipes" rel="nofollow">Check it out now.</a></p><p><a href="/tags/activitypub/" rel="tag">#ActivityPub</a> <a href="/tags/fediverse/" rel="tag">#fediverse</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a> <a href="/tags/botdev/" rel="tag">#botdev</a> <a href="/tags/botkit/" rel="tag">#BotKit</a></p>
<p>Exciting update on <a href="/tags/botkit/" rel="tag">#BotKit</a>: we've introduced a new <a href="https://botkit.fedify.dev/concepts/repository" rel="nofollow">Repository</a> abstraction layer that provides cleaner data access. While previously data operations went directly through <a href="https://fedify.dev/manual/kv" rel="nofollow">KvStore</a>, they now go through <a href="https://botkit.fedify.dev/concepts/repository" rel="nofollow">Repository</a>—improving separation of concerns and making the codebase more maintainable. Don't worry though—there are no breaking changes to the public API that BotKit users rely on!</p><p>Key benefits:</p><p>Better abstraction over data sources<br>Cleaner internal architecture<br>Fully backwards compatible</p><p>Check out our docs for the technical details: <a href="https://botkit.fedify.dev/concepts/repository" rel="nofollow" class="ellipsis" title="botkit.fedify.dev/concepts/repository"><span class="invisible">https://</span><span class="ellipsis">botkit.fedify.dev/concepts/rep</span><span class="invisible">ository</span></a>.</p><p><a href="/tags/activitypub/" rel="tag">#ActivityPub</a> <a href="/tags/fediverse/" rel="tag">#fediverse</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a> <a href="/tags/botkit/" rel="tag">#BotKit</a></p><p><a href="https://hollo.social/@hongminhee/0194a0d4-1d67-7c81-80ba-e7ade212d27a" rel="nofollow" class="ellipsis" title="hollo.social/@hongminhee/0194a0d4-1d67-7c81-80ba-e7ade212d27a"><span class="invisible">https://</span><span class="ellipsis">hollo.social/@hongminhee/0194a</span><span class="invisible">0d4-1d67-7c81-80ba-e7ade212d27a</span></a></p>
<p><a href="/tags/botkit/" rel="tag">#BotKit</a>'s web interface now supports theme customization! 🎨 You can set your preferred color theme using the <a href="https://botkit.fedify.dev/concepts/bot#createbotoptions-pages" rel="nofollow">pages.color</a> option in <a href="https://botkit.fedify.dev/concepts/bot#instantiation" rel="nofollow">createBot()</a>. Here are some examples showing the same interface in different colors: "violet", "pumpkin", "azure", and "green" (default).</p><p>const bot = createBot<void>({ // ... other options pages: { color: "violet" // or "pumpkin", "azure", etc. }});</p><p>We support all color themes from Pico CSS—including "amber", "fuchsia", "indigo", "jade", "lime", "pink", "sand", "slate", "yellow", "zinc", and more! Check out <a href="https://picocss.com/docs/colors" rel="nofollow">Pico CSS's Colors docs</a> for the full list of available themes.</p><p>Which color is your favorite? 🤔</p><p><a href="/tags/activitypub/" rel="tag">#ActivityPub</a> <a href="/tags/fediverse/" rel="tag">#fediverse</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
Edited 1y ago
<p>📢 Important announcement! <a href="/tags/botkit/" rel="tag">#BotKit</a>'s <a href="/tags/github/" rel="tag">#GitHub</a> repository has moved to a new home! 🏠</p><p>The repository is now located at <a href="https://github.com/fedify-dev/botkit" rel="nofollow">@fedify-dev/botkit</a> (previously <a href="https://github.com/dahlia/botkit" rel="nofollow">@dahlia/botkit</a>). All future development will continue at the new location.</p><p>Don't worry—everything's the same, just a new address! Please update your bookmarks and project references. Thanks for being part of our community! <img src="https://neodb.social/media/emoji/hollo.social/botkit.png" class="emoji" alt=":botkit:" title=":botkit:"></p><p><a href="/tags/fedify/" rel="tag">#Fedify</a> <a href="/tags/activitypub/" rel="tag">#ActivityPub</a> <a href="/tags/fediverse/" rel="tag">#fediverse</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a></p><p><a href="https://hollo.social/@fedify/0194a851-581d-779c-b777-dc39e753ef14" rel="nofollow" class="ellipsis" title="hollo.social/@fedify/0194a851-581d-779c-b777-dc39e753ef14"><span class="invisible">https://</span><span class="ellipsis">hollo.social/@fedify/0194a851-</span><span class="invisible">581d-779c-b777-dc39e753ef14</span></a></p>
<p>Valtteri Laitinen (<a href="https://fedi.valtlai.fi/@valtlai" rel="nofollow">@valtlai</a>) managed to get <a href="/tags/fedify/" rel="tag">#Fedify</a> running on <a href="/tags/cloudflare/" rel="tag">#Cloudflare</a> Workers!</p><p><a href="/tags/cloudflareworkers/" rel="tag">#CloudflareWorkers</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a> <a href="/tags/activitypub/" rel="tag">#ActivityPub</a></p><p><a href="https://fedi.valtlai.fi/@valtlai/113906145660141267" rel="nofollow" class="ellipsis" title="fedi.valtlai.fi/@valtlai/113906145660141267"><span class="invisible">https://</span><span class="ellipsis">fedi.valtlai.fi/@valtlai/11390</span><span class="invisible">6145660141267</span></a></p>
<p>Are you interested in creating bots for the <a href="/tags/fediverse/" rel="tag">#fediverse</a>? Meet <a href="/tags/botkit/" rel="tag">#BotKit</a>, a <a href="/tags/typescript/" rel="tag">#TypeScript</a> framework that makes bot development easier than ever!</p><p>Key Features:</p><p>True Independence</p><p>Create standalone <a href="/tags/activitypub/" rel="tag">#ActivityPub</a> bots<br>No need for a Mastodon or Misskey account<br>Free from platform-specific limitations</p><p>Simple and Intuitive API</p><p>Create a complete bot in a single TypeScript file<br>Intuitive event handlers for mentions, follows, and messages<br>Rich text formatting with Markdown support</p><p>Modern Deployment</p><p>Deploy on Deno Deploy, <a href="http://Fly.io" rel="nofollow">Fly.io</a>, Railway, or any virtual server<br>Minimal dependencies<br>Designed for modern cloud platforms</p><p>Enterprise-Ready Foundation</p><p>Built on Fedify, a rock-solid ActivityPub framework<br>Seamless federation with Mastodon, Misskey, and other platforms<br>Robust compatibility across the fediverse</p><p>Developer Experience</p><p>Full TypeScript support with great IDE integration<br>Comprehensive documentation<br>Built-in testing utilities</p><p>Here's a quick example of how simple it is to create a bot:</p><p>import { createBot, mention, text } from "@fedify/botkit";const bot = createBot<void>({ username: "greetbot", name: "Greet Bot", summary: text`A friendly bot that greets people!`, // ... configuration ...});// Respond to mentionsbot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);};export default bot;</p><p>Getting Started:</p><p>Install <a href="/tags/deno/" rel="tag">#Deno</a><br>Run: deno add jsr:@fedify/botkit@^0.1.0-dev<br>Create your bot with just a few lines of code</p><p>Check out our documentation at <a href="https://botkit.fedify.dev/" rel="nofollow"><span class="invisible">https://</span>botkit.fedify.dev/</a> to learn more!</p><p><a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
<p><a href="/tags/botkit/" rel="tag">#BotKit</a> now supports <a href="/tags/hashtags/" rel="tag">#hashtags</a> in your bot messages!</p><p>You can now add searchable hashtags to your bot's posts using either our dedicated <a href="https://botkit.fedify.dev/concepts/text#hashtags" rel="nofollow">hashtag()</a> function or through <a href="https://botkit.fedify.dev/concepts/text#hashtags-1" rel="nofollow">BotKit's extended Markdown syntax</a>. This makes your bot's content more discoverable across the fediverse and helps engage with broader conversations.</p><p>Whether you're building a news bot, content curator, or community engagement tool, hashtags can help your bot reach the right audience.</p><p>Check out <a href="https://botkit.fedify.dev/concepts/text" rel="nofollow">our docs</a> to learn more about implementing hashtags in your bots!</p><p><a href="/tags/activitypub/" rel="tag">#ActivityPub</a> <a href="/tags/fediverse/" rel="tag">#fediverse</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a> <a href="/tags/botdev/" rel="tag">#botdev</a></p>
<p>Did you know? <a href="/tags/fedify/" rel="tag">#Fedify</a> provides <a href="/tags/documentation/" rel="tag">#documentation</a> optimized for LLMs through the <a href="https://llmstxt.org/" rel="nofollow">llms.txt standard</a>.</p><p>Available endpoints:</p><p><a href="https://fedify.dev/llms.txt" rel="nofollow"><span class="invisible">https://</span>fedify.dev/llms.txt</a> — Core documentation overview<br><a href="https://fedify.dev/llms-full.txt" rel="nofollow"><span class="invisible">https://</span>fedify.dev/llms-full.txt</a> — Complete documentation dump</p><p>Useful for training <a href="/tags/ai/" rel="tag">#AI</a> assistants on <a href="/tags/activitypub/" rel="tag">#ActivityPub</a>/<a href="/tags/fediverse/" rel="tag">#fediverse</a> development, building documentation chatbots, or <a href="/tags/llm/" rel="tag">#LLM</a>-powered dev tools.</p><p><a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
<p>As the maintainer of <a href="/tags/fedify/" rel="tag">#Fedify</a>, I'd be grateful for your support to help keep the project sustainable! <img src="https://neodb.social/media/emoji/hollo.social/fedify.png" class="emoji" alt=":fedify:" title=":fedify:"></p><p><a href="https://hollo.social/@fedify/0194b112-b604-7d03-84e0-4faaf4ab46cd" rel="nofollow" class="ellipsis" title="hollo.social/@fedify/0194b112-b604-7d03-84e0-4faaf4ab46cd"><span class="invisible">https://</span><span class="ellipsis">hollo.social/@fedify/0194b112-</span><span class="invisible">b604-7d03-84e0-4faaf4ab46cd</span></a></p><p><a href="/tags/fedidev/" rel="tag">#fedidev</a> <a href="/tags/sponsor/" rel="tag">#sponsor</a> <a href="/tags/backer/" rel="tag">#backer</a> <a href="/tags/donation/" rel="tag">#donation</a></p>
<p>A milestone worth celebrating—<a href="/tags/fedify/" rel="tag">#Fedify</a> just hit <a href="https://github.com/fedify-dev/fedify/releases" rel="nofollow">100+ releases</a>! From day one, we've been committed to building a robust <a href="/tags/activitypub/" rel="tag">#ActivityPub</a> framework, and each release has brought us closer to that goal. Here's to many more releases as we continue growing the <a href="/tags/fediverse/" rel="tag">#fediverse</a> together! <img src="https://neodb.social/media/emoji/hollo.social/fedify.png" class="emoji" alt=":fedify:" title=":fedify:"> <a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
<p><a href="https://github.com/fedify-dev/botkit/releases/tag/0.1.1" rel="nofollow">BotKit 0.1.1</a> is out!</p><p>This security update fixes a message visibility bug where direct/followers-only replies to bots were unintentionally forwarded to bot followers. Upgrade recommended. Download at <a href="https://jsr.io/@fedify/[email protected]" rel="nofollow">JSR</a>:</p><p>deno add jsr:@fedify/botkit@^0.1.1</p><p><a href="/tags/botkit/" rel="tag">#BotKit</a> <a href="/tags/activitypub/" rel="tag">#ActivityPub</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
<p>Build your own <a href="/tags/fediverse/" rel="tag">#fediverse</a> server with <a href="/tags/fedify/" rel="tag">#Fedify</a>!</p><p><a href="https://fedify.dev/" rel="nofollow">Fedify</a> is a <a href="/tags/typescript/" rel="tag">#TypeScript</a> framework that simplifies <a href="/tags/activitypub/" rel="tag">#ActivityPub</a> implementation. Want to build a federated server without the complexity? Fedify has got you covered!</p><p>✨ Key features</p><p>Complete protocol support including <a href="https://fedify.dev/manual/actor" rel="nofollow">WebFinger</a>, <a href="https://fedify.dev/manual/send#http-signatures" rel="nofollow">HTTP Signatures</a>, and <a href="https://fedify.dev/manual/nodeinfo" rel="nofollow">NodeInfo</a><br>Enhanced interoperability with <a href="https://fedify.dev/manual/send#object-integrity-proofs" rel="nofollow">Object Integrity Proofs</a> and <a href="https://fedify.dev/manual/send#linked-data-signatures" rel="nofollow">Linked Data Signatures</a><br>Type-safe <a href="https://fedify.dev/manual/vocab" rel="nofollow">Activity Vocabulary API</a> to prevent development mistakes<br>Reliable delivery with <a href="https://fedify.dev/manual/send#enqueuing-an-outgoing-activity" rel="nofollow">automatic retries and message queues</a><br>Full observability through <a href="https://fedify.dev/manual/opentelemetry" rel="nofollow">OpenTelemetry integration</a><br>Multiple backend support: <a href="https://fedify.dev/manual/mq#redismessagequeue" rel="nofollow">Redis</a>, <a href="https://fedify.dev/manual/mq#postgresmessagequeue" rel="nofollow">PostgreSQL</a>, <a href="https://fedify.dev/manual/mq#amqpmessagequeue" rel="nofollow">AMQP</a><br>Seamless integration with popular web frameworks: <a href="https://fedify.dev/manual/integration#express" rel="nofollow">Express</a>, <a href="https://fedify.dev/manual/integration#hono" rel="nofollow">Hono</a>, <a href="https://fedify.dev/manual/integration#fresh" rel="nofollow">Fresh</a>, <a href="https://fedify.dev/manual/integration#sveltekit" rel="nofollow">SvelteKit</a><br>Comprehensive <a href="https://fedify.dev/manual/log" rel="nofollow">logging and tracing</a></p><p>🔧 <a href="https://fedify.dev/cli" rel="nofollow">CLI toolchain</a></p><p>Debug ActivityPub in real-time with <a href="https://fedify.dev/cli#fedify-inbox-ephemeral-inbox-server" rel="nofollow">ephemeral inbox server</a><br>Inspect ActivityPub objects and actors with <a href="https://fedify.dev/cli#fedify-lookup-looking-up-an-activitypub-object" rel="nofollow">lookup tool</a><br><a href="https://fedify.dev/cli#fedify-tunnel-exposing-a-local-http-server-to-the-public-internet" rel="nofollow">Tunnel your local server</a> for development</p><p>🚀 Runtime support</p><p><a href="https://deno.com/" rel="nofollow">Deno</a><br><a href="https://nodejs.org/" rel="nofollow">Node.js</a><br><a href="https://bun.sh/" rel="nofollow">Bun</a></p><p>📚 Easy to learn</p><p><a href="https://fedify.dev/" rel="nofollow">Extensive docs</a><br><a href="https://fedify.dev/tutorial/microblog" rel="nofollow">Step-by-step tutorials</a><br>Community support via <a href="https://matrix.to/#/#fedify:matrix.org" rel="nofollow">Matrix</a> & <a href="https://discord.gg/bhtwpzURwd" rel="nofollow">Discord</a></p><p>Available under the <a href="/tags/mit/" rel="tag">#MIT</a> license—free and open source!</p><p><a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
<p>RE: <a href="https://mastodon.social/@by_caballero/115968453192473247" rel="nofollow" class="ellipsis" title="mastodon.social/@by_caballero/115968453192473247"><span class="invisible">https://</span><span class="ellipsis">mastodon.social/@by_caballero/</span><span class="invisible">115968453192473247</span></a></p><p>interesting writeup about federated package management by <span class="h-card"><a href="https://mastodon.social/@andrewnez" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>andrewnez</span></a></span><br><a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
<p>We're excited to announce two major features coming in <a href="/tags/fedify/" rel="tag">#Fedify</a> 1.5.0, focused on giving you more control over domain names in your federated apps:</p><p><a href="https://unstable.fedify.dev/manual/federation#separating-webfinger-host-from-the-server-origin" rel="nofollow">Separate WebFinger Host from Server Origin</a></p><p>Want different domains for your WebFinger handles and server URIs? Fedify 1.5.0 will let you use domains like @[email protected] as fediverse handles while serving content from <a href="https://ap.example.com" rel="nofollow"><span class="invisible">https://</span>ap.example.com</a>. This gives you more flexibility in how you structure your federated services.</p><p><a href="https://unstable.fedify.dev/manual/federation#explicitly-setting-the-canonical-origin" rel="nofollow">Canonical Origin Support</a></p><p>Need to ensure consistent URLs across your infrastructure? The new canonical origin support lets you explicitly set your server's authoritative domain. This is particularly useful when running behind reverse proxies or load balancers—no more unexpected URLs generated from internal hostnames.</p><p>These features represent our ongoing commitment to making Fedify more flexible and production-ready.</p><p>Can't wait to try these features? You can experiment with them today using our unstable release v1.5.0-dev.680+562e3dc0 (<a href="https://jsr.io/@fedify/[email protected]+562e3dc0" rel="nofollow">JSR</a> & <a href="https://www.npmjs.com/package/@fedify/fedify/v/1.5.0-dev.680" rel="nofollow">npm</a>). Keep in mind that this is an unstable release intended for testing—use it in production at your own risk.</p><p>Otherwise, stay tuned for the stable Fedify 1.5.0 release!</p><p><a href="/tags/fedidev/" rel="tag">#fedidev</a> <a href="/tags/activitypub/" rel="tag">#ActivityPub</a></p>
<p>We're pleased to announce that <a href="/tags/node/" rel="tag">#Node</a>.js support has been merged and will be available in <a href="/tags/botkit/" rel="tag">#BotKit</a> 0.3.0.</p><p>Now you can build your <a href="/tags/activitypub/" rel="tag">#ActivityPub</a> bots with both <a href="/tags/deno/" rel="tag">#Deno</a> and Node.js, giving you more flexibility in choosing your preferred runtime environment.</p><p>Stay tuned for BotKit 0.3.0!</p><p><a href="/tags/fedidev/" rel="tag">#fedidev</a> <a href="/tags/fediverse/" rel="tag">#fediverse</a></p>
<p>👋 Everyone: see what you think:</p><p>The Seven Deadly <a href="/tags/fediverse/" rel="tag">#Fediverse</a> UX Sins Part 2: The Road To Redemption: <a href="https://www.timothychambers.net/2025/06/24/the-seven-deadly-fediverse-ux.html" rel="nofollow" class="ellipsis" title="www.timothychambers.net/2025/06/24/the-seven-deadly-fediverse-ux.html"><span class="invisible">https://</span><span class="ellipsis">www.timothychambers.net/2025/0</span><span class="invisible">6/24/the-seven-deadly-fediverse-ux.html</span></a></p><p>Don't claim that these are final answers - but hope they help continue constructive motion to final answers!</p><p>cc: <span class="h-card"><a href="https://oisaur.com/@renchap" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>renchap</span></a></span> <span class="h-card"><a href="https://pixelfed.social/dansup" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>dansup</span></a></span><br><span class="h-card"><a href="https://mastodon.social/@cheeaun" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>cheeaun</span></a></span> <span class="h-card"><a href="https://social.coop/@scottjenson" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>scottjenson</span></a></span> <span class="h-card"><a href="https://backend.newsmast.org/@newsmast" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>newsmast</span></a></span> <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> <span class="h-card"><a href="https://mastodon.social/@ricmac" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>ricmac</span></a></span> <span class="h-card"><a href="https://cosocial.ca/@evan" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>evan</span></a></span> <span class="h-card"><a href="https://indieweb.social/@laurenshof" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>laurenshof</span></a></span> <span class="h-card"><a href="https://indieweb.social/@pfefferle" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>pfefferle</span></a></span> <span class="h-card"><a href="https://venera.social/profile/fediversenews" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>fediversenews</span></a></span> <a href="/tags/fedidev/" rel="tag">#fedidev</a> <a href="/tags/mastodev/" rel="tag">#mastodev</a> <span class="h-card"><a href="https://cosocial.ca/@timbray" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>timbray</span></a></span></p>
Edited 285d ago
<p>We're pleased to share that <a href="https://fedify.dev/why#encyclia-bridging-academic-research-to-the-fediverse" rel="nofollow">Encyclia has joined our success stories.</a></p><p><span class="h-card"><a href="https://fietkau.social/@encyclia" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>encyclia</span></a></span> bridges academic research to the <a href="/tags/fediverse/" rel="tag">#fediverse</a> by making <a href="/tags/orcid/" rel="tag">#ORCID</a> researcher profiles and publications discoverable through <a href="/tags/activitypub/" rel="tag">#ActivityPub</a>—built with <a href="/tags/fedify/" rel="tag">#Fedify</a> for seamless interoperability across Mastodon and other fediverse platforms.</p><p>This demonstrates Fedify's versatility beyond traditional social networking, helping specialized domains connect to the federated web.</p><p>We're also grateful for <a href="/tags/encyclia/" rel="tag">#Encyclia</a>'s sponsorship support, which helps make Fedify's development possible.</p><p>Learn more about Encyclia at <a href="https://encyclia.pub/" rel="nofollow"><span class="invisible">https://</span>encyclia.pub/</a>. 📚</p><p><a href="/tags/fedidev/" rel="tag">#fedidev</a> <a href="/tags/openscience/" rel="tag">#openscience</a></p>
<p>We are pleased to announce the release of <a href="/tags/fedify/" rel="tag">#Fedify</a> 1.7.0. This release was expedited at the request of the Ghost team, who are actively using Fedify for their <a href="/tags/activitypub/" rel="tag">#ActivityPub</a> implementation. As a result, several features originally planned for this version have been moved to Fedify 1.8.0 to ensure timely delivery of the most critical improvements.</p><p>This release focuses on enhancing message queue functionality and improving compatibility with ActivityPub servers through refined HTTP signature handling.</p><p>Native retry mechanism support</p><p>This release introduces support for native retry mechanisms in message queue backends. The new <a href="https://fedify.dev/manual/mq#native-retry-mechanisms" rel="nofollow">MessageQueue.nativeRetrial</a> property allows queue implementations to indicate whether they provide built-in retry functionality, enabling Fedify to optimize its retry behavior accordingly.</p><p>When nativeRetrial is set to true, Fedify will delegate retry handling to the queue backend rather than implementing its own retry logic. This approach reduces overhead and leverages the proven retry mechanisms of established queue systems.</p><p>Current implementations with native retry support include:</p><p><a href="https://fedify.dev/manual/mq#denokvmessagequeue-deno-only" rel="nofollow">DenoKvMessageQueue</a> — utilizes Deno KV's automatic retry with exponential backoff<br><a href="https://fedify.dev/manual/mq#workersmessagequeue-cloudflare-workers-only" rel="nofollow">WorkersMessageQueue</a> — leverages Cloudflare Queues' automatic retry and dead-letter queue features<br><a href="https://fedify.dev/manual/mq#amqpmessagequeue" rel="nofollow">AmqpMessageQueue</a> — can now be configured to use AMQP broker's native retry mechanisms</p><p>The <a href="https://fedify.dev/manual/mq#inprocessmessagequeue" rel="nofollow">InProcessMessageQueue</a> continues to use Fedify's internal retry mechanism, while <a href="https://fedify.dev/manual/mq#parallel-message-processing" rel="nofollow">ParallelMessageQueue</a> inherits the retry behavior from its wrapped queue.</p><p>AMQP message queue improvements</p><p>Alongside Fedify 1.7.0, we have also released <a href="https://github.com/fedify-dev/amqp" rel="nofollow">@fedify/amqp</a> 0.3.0. This release adds the nativeRetrial option to AmqpMessageQueueOptions, enabling you to leverage your AMQP broker's built-in retry mechanisms. When enabled, this option allows the AMQP broker to handle message retries according to its configured policies, rather than relying on Fedify's internal retry logic.</p><p>Configurable double-knocking</p><p>The new <a href="https://fedify.dev/manual/federation#firstknock" rel="nofollow">FederationOptions.firstKnock</a> option provides control over the HTTP Signatures specification used for the initial signature attempt when communicating with previously unknown servers.</p><p>Previously, the first knock for newly encountered servers always used <a href="https://datatracker.ietf.org/doc/html/rfc9421" rel="nofollow">RFC 9421</a> (HTTP Message Signatures), falling back to <a href="https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures-12" rel="nofollow">draft-cavage-http-signatures-12</a> if needed. With this release, you can now configure which specification to use for the first knock when communicating with unknown servers, with RFC 9421 remaining the default.</p><p>Summary</p><p>This release maintains Fedify's commitment to reliability and compatibility while laying the groundwork for more efficient message processing. The native retry mechanism support will particularly benefit applications using queue backends with sophisticated retry capabilities, while the double-knocking mechanism addresses real-world compatibility challenges in the ActivityPub ecosystem.</p><p>For detailed technical information about these changes, please refer to the <a href="https://github.com/fedify-dev/fedify/blob/1.7.0/CHANGES.md#version-170" rel="nofollow">changelog</a> in the repository.</p><p><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 considering adding custom background task support to <a href="/tags/fedify/" rel="tag">#Fedify</a> 1.5.0.</p><p>Want to use Fedify's worker system for your own background tasks? We're exploring ways to let you register and process custom tasks alongside <a href="/tags/activitypub/" rel="tag">#ActivityPub</a> jobs.</p><p>Check out the proposal: <a href="https://github.com/fedify-dev/fedify/issues/206" rel="nofollow" class="ellipsis" title="github.com/fedify-dev/fedify/issues/206"><span class="invisible">https://</span><span class="ellipsis">github.com/fedify-dev/fedify/i</span><span class="invisible">ssues/206</span></a>.</p><p>Key considerations:</p><p>Should this be part of Fedify's scope?<br>Quick API extension vs complete worker architecture redesign<br>Integration with existing task queue systems</p><p>We'd love to hear your thoughts! Do you need this feature? How would you use it? Share your feedback in the issue thread.</p><p><a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
<p>I've just deployed the first set of changes to have proper activitypub quotes on bird.makeup, those exemples should (in theory) work on Mastodon 4.4 and others implementations that support those:</p><p><a href="https://bird.makeup/users/davidfowl/statuses/1939555328343085175" rel="nofollow" class="ellipsis" title="bird.makeup/users/davidfowl/statuses/1939555328343085175"><span class="invisible">https://</span><span class="ellipsis">bird.makeup/users/davidfowl/st</span><span class="invisible">atuses/1939555328343085175</span></a></p><p><a href="https://bird.makeup/users/bigtechalert/statuses/1937857604488970603" rel="nofollow" class="ellipsis" title="bird.makeup/users/bigtechalert/statuses/1937857604488970603"><span class="invisible">https://</span><span class="ellipsis">bird.makeup/users/bigtechalert</span><span class="invisible">/statuses/1937857604488970603</span></a></p><p><a href="https://bird.makeup/users/nntaleb/statuses/1937556442103288296" rel="nofollow" class="ellipsis" title="bird.makeup/users/nntaleb/statuses/1937556442103288296"><span class="invisible">https://</span><span class="ellipsis">bird.makeup/users/nntaleb/stat</span><span class="invisible">uses/1937556442103288296</span></a></p><p>Can you all test and report back? I will fix any incompatibilty with any implementation <a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
<p>Just installed the fedify CLI tool on my Mac. Very useful tool for AP developers and tinkerers alike.</p><p>You can ask to to look up an AP object and it returns the response. Cool!</p><p>`fedify lookup <a href="https://spark.box464.social/pub/actors/spark464`" rel="nofollow" class="ellipsis" title="spark.box464.social/pub/actors/spark464`"><span class="invisible">https://</span><span class="ellipsis">spark.box464.social/pub/actors</span><span class="invisible">/spark464`</span></a></p><p><a href="https://fedify.dev/cli" rel="nofollow"><span class="invisible">https://</span>fedify.dev/cli</a></p><p>Thanks, <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> </p><p><a href="/tags/fedidev/" rel="tag">#FediDev</a> <a href="/tags/activitypub/" rel="tag">#ActivityPub</a></p>
<p><a href="/tags/fedify/" rel="tag">#Fedify</a> has moved to a monorepo structure with unified versioning across all packages (@fedify/fedify, @fedify/cli, database adapters & framework integrations).</p><p>All packages now release together, making dependency management much simpler!</p><p><a href="/tags/activitypub/" rel="tag">#ActivityPub</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
<p>I just discovered why some of my followers from larger <a href="/tags/mastodon/" rel="tag">#Mastodon</a> instances (like mastodon.social) would mysteriously unfollow me after a while!</p><p><a href="https://github.com/mastodon/mastodon/pull/34272" rel="nofollow">A pull request was just merged in Mastodon that fixes a critical bug in their follower synchronization mechanism.</a></p><p>Turns out Mastodon implements the <a href="https://w3id.org/fep/8fcf" rel="nofollow">FEP-8fcf</a> specification (Followers collection synchronization across servers), but it expected all followers to be in a single page collection. When followers were split across multiple pages, it would only see the first page and incorrectly remove all followers from subsequent pages!</p><p>This explains so much about the strange behavior I've been seeing with <a href="/tags/hollo/" rel="tag">#Hollo</a> and other <a href="/tags/fedify/" rel="tag">#Fedify</a>-based servers over the past few months. Some people would follow me from large instances, then mysteriously unfollow later without any action on their part.</p><p>Thankfully this fix has been marked for backporting, so it should appear in an upcoming patch release rather than waiting for the next major version. Great news for all of us building on <a href="/tags/activitypub/" rel="tag">#ActivityPub</a>!</p><p>This is why I love open source—we can identify, understand, and fix these kinds of interoperability issues together. 😊</p><p><a href="/tags/fediverse/" rel="tag">#fediverse</a> <a href="/tags/fedidev/" rel="tag">#fedidev</a></p>
