We're excited to announce the release of #Fedify 1.6.1, which marks the beginning of the 1.6 series following the retraction of version 1.6.0. This release introduces significant new capabilities that expand Fedify's deployment options and enhance security compatibility across the #fediverse.
Cloudflare Workers support
Fedify 1.6 introduces first-class support for Cloudflare Workers, enabling #serverless deployment of #ActivityPub applications at the edge.
New components
WorkersKvStore
: A key–value store implementation using Cloudflare's KV API for persistent storage in Workers environmentsWorkersMessageQueue
: A message queue implementation leveraging Cloudflare Queues for reliable message processingKey features
queue()
methodFederation.processQueuedTask()
methodFor a complete working example, see the Cloudflare Workers example in the Fedify repository.
Federation builder pattern
Fedify 1.6 introduces the FederationBuilder
class and createFederationBuilder()
function to support deferred federation instantiation. This pattern provides several benefits:
The builder pattern is particularly useful for large applications and environments like Cloudflare Workers where configuration data is only available at runtime.
HTTP Message Signatures (RFC 9421)
Fedify 1.6 implements the official HTTP Message Signatures standard (RFC 9421) specification, the final revision of the HTTP Signatures specification.
Double-knocking mechanism
To ensure maximum compatibility across the fediverse, Fedify 1.6 introduces an intelligent double-knocking mechanism:
This approach ensures seamless communication with both modern and legacy ActivityPub implementations while positioning Fedify at the forefront of security standards.
Interoperability testing
The RFC 9421 implementation has been thoroughly tested for interoperability with existing ActivityPub implementations that support RFC 9421 signature verification:
These tests confirm that other ActivityPub implementations can successfully verify RFC 9421 signatures generated by Fedify, ensuring proper federation as the ecosystem gradually adopts the official specification. While these implementations currently support verification of RFC 9421 signatures, they do not yet generate RFC 9421 signatures themselves—making Fedify one of the first ActivityPub implementations to support both generation and verification of the modern standard.
WebFinger enhancements
Dedicated WebFinger lookup
The new Context.lookupWebFinger()
method provides direct access to WebFinger data, offering developers more granular control over account discovery and resource resolution beyond the higher-level Context.lookupObject()
method.
Context API improvements
Context data replacement
The new Context.clone()
method enables dynamic context data replacement, providing greater flexibility in request processing and data flow management. This is particularly useful for middleware implementations and complex request routing scenarios.
Migration considerations
Backward compatibility
Fedify 1.6 maintains full backward compatibility with existing applications. The new HTTP Message Signatures and double-knocking mechanisms work transparently without requiring any code changes.
Node.js version requirement
Important: Fedify 1.6 requires Node.js 22.0.0 or later for Node.js environments. This change does not affect applications using Deno or Bun runtimes. If you're currently using Node.js, please ensure your environment meets this requirement before upgrading.
New deployment options
For new deployments, consider leveraging Cloudflare Workers support for:
Looking forward
Fedify 1.6 represents a significant expansion of deployment possibilities while maintaining the framework's commitment to broad compatibility across the fediverse. The addition of Cloudflare Workers support opens new architectural patterns for federated applications, while the RFC 9421 implementation ensures Fedify stays current with emerging ActivityPub security standards.
For detailed migration guides, API documentation, and examples, please visit the Fedify documentation. Join our community on Matrix or Discord for support and discussions.
When an #ActivityPub server implements authorized fetch (aka secure mode), how does it associate the keyId in an HTTP request with the actual actor? I know major implementations (like Mastodon) use a fragment appended to the actor IRI as a keyId, but in theory a keyId could be any IRI that seems unrelated to the actor IRI, right? Should I maintain a table of actor–keyIds somewhere in the server?
This document, edited by @snarfed.org, is really helpful for implementing #Fedify in practice.
I hate this requirement of having to sign the HTTP request to see the Activity-JSON for ActivityPub actor.
I hate it so much.
...
It makes it so I cannot do a simple "curl" command to get an ActivityPub actor's activity-JSON.
Is https://github.com/HelgeKrueger/bovine/blob/main/docs/client_to_server_activitypub.md#this your Client built to work with a generic #ActivityPub server?
I am interested in clients that want to work with our backend.
Note, #DBMS and Authentication matters are none issues since our servers implement most of these protocols (including the likes of #HTTPSignatures etc).
/cc @gabek @mike @atomicpoet @davew @judell @Mastodon @smallcircles
Notes so far on #Mastodon's #ActivityPub implementation, covering basics on #WebFinger, #HTTPSignatures, #JSONLD signatures, and #ActivityStream vocab. Pretty much a loosely-organized collection of links to useful specs and implementations for understanding how Mastodon specifically does things.
https://raphaelluckom.com/posts/Things%20I%27ve%20learned%20about%20ActivityPub%20so%20far.html
Just found this how to. I think that is very well explained! Thanks for that! It's to earley for #rdfpub, but I'm looking forward to it.