Fedify 1.9.0
Released on October 14, 2025.
@fedify/fedify
-
Implemented FEP-fe34 origin-based security model to protect against content spoofing attacks and ensure secure federation practices. The security model enforces same-origin policy for ActivityPub objects and their properties, preventing malicious actors from impersonating content from other servers. [#440]
- Added
crossOriginoption to Activity Vocabulary property accessors (get*()methods) with three security levels:"ignore"(default, logs warning and returnsnull),"throw"(throws error), and"trust"(bypasses checks). - Added
LookupObjectOptions.crossOriginoption tolookupObject()function andContext.lookupObject()method for controlling cross-origin validation. - Embedded objects are now validated against their parent object's origin and only trusted when they share the same origin or are explicitly marked as trusted.
- Property hydration now respects origin-based security, automatically performing remote fetches when embedded objects have different origins.
- Internal trust tracking system maintains security context throughout object lifecycles (construction, cloning, and property access).
- Added
-
Added
withIdempotency()method to configure activity idempotency strategies for inbox processing. This addresses issue #441 where activities with the same ID sent to different inboxes were incorrectly deduplicated globally instead of per-inbox. [#441]- Added
IdempotencyStrategytype. - Added
IdempotencyKeyCallbacktype. - Added
InboxListenerSetters.withIdempotency()method. - By default,
"per-origin"strategy is used for backward compatibility. This will change to"per-inbox"in Fedify 2.0. We recommend explicitly setting the strategy to avoid unexpected behavior changes.
- Added
-
Fixed handling of ActivityPub objects containing relative URLs. The Activity Vocabulary classes now automatically resolve relative URLs by inferring the base URL from the object's
@idor document URL, eliminating the need for manualbaseUrlspecification in most cases. This improves interoperability with ActivityPub servers that emit relative URLs in properties likeicon.urlandimage.url. [#411, #443 by Jiwon Kwon] -
Added TypeScript support for all RFC 6570 URI Template expression types in dispatcher path parameters. Previously, only simple string expansion (
{identifier}) was supported in TypeScript types, while the runtime already supported all RFC 6570 expressions. Now TypeScript accepts all expression types including{+identifier}(reserved string expansion, recommended for URI identifiers),{#identifier}(fragment expansion),{.identifier}(label expansion),{/identifier}(path segments),{;identifier}(path-style parameters),{?identifier}(query component), and{&identifier}(query continuation). [#426, #446 by Jiwon Kwon]- Added
Rfc6570Expression<TParam>type helper. - Updated all dispatcher path type parameters to accept RFC 6570 expressions:
setActorDispatcher(),setObjectDispatcher(),setInboxDispatcher(),setOutboxDispatcher(),setFollowingDispatcher(),setFollowersDispatcher(),setLikedDispatcher(),setFeaturedDispatcher(),setFeaturedTagsDispatcher(),setInboxListeners(),setCollectionDispatcher(), andsetOrderedCollectionDispatcher().
- Added
-
Added inverse properties for collections to Vocabulary API. [FEP-5711, #373, #381 by Jiwon Kwon]
new Collection()constructor now acceptslikesOfoption.- Added
Collection.likesOfIdproperty. - Added
Collection.getLikesOf()method. new Collection()constructor now acceptssharesOfoption.- Added
Collection.sharedOfIdproperty. - Added
Collection.getSharedOf()method. new Collection()constructor now acceptsrepliesOfoption.- Added
Collection.repliesOfIdproperty. - Added
Collection.getRepliesOf()method. new Collection()constructor now acceptsinboxOfoption.- Added
Collection.inboxOfIdproperty. - Added
Collection.getInboxOf()method. new Collection()constructor now acceptsoutboxOfoption.- Added
Collection.outboxOfIdproperty. - Added
Collection.getOutboxOf()method. new Collection()constructor now acceptsfollowersOfoption.- Added
Collection.followersOfIdproperty. - Added
Collection.getFollowersOf()method. new Collection()constructor now acceptsfollowingOfoption.- Added
Collection.followingOfIdproperty. - Added
Collection.getFollowingOf()method. new Collection()constructor now acceptslikedOfoption.- Added
Collection.likedOfIdproperty. - Added
Collection.getLikedOf()method.
-
Changed how
parseSoftware()function handles non-Semantic Versioning number strings ontryBestEffortmode. [#353, #365 by Hyeonseo Kim] -
Separated modules from
@fedify/fedify/xinto dedicated packages to improve modularity and reduce bundle size. The existing integration functions in@fedify/fedify/xare now deprecated and will be removed in version 2.0.0. [#375 by Chanhaeng Lee]- Deprecated
@fedify/fedify/x/cfworkersin favor of@fedify/cfworkers. - Deprecated
@fedify/fedify/x/denokvin favor of@fedify/denokv. - Deprecated
@fedify/fedify/x/honoin favor of@fedify/hono. - Deprecated
@fedify/fedify/x/sveltekitin favor of@fedify/sveltekit.
- Deprecated
-
Extended
Linkfrom@fedify/fedify/webfingerto support OStatus 1.0 Draft 2. [#402, #404 by Hyeonseo Kim]- Added an optional
templatefield to theLinkinterface. - Changed the
hreffield optional from theLinkinterface according to RFC 7033 Section 4.4.4.3.
- Added an optional
-
Added
Federatable.setWebFingerLinksDispatcher()method to set additional links to WebFinger. [#119, #407 by HyeonseoKim] -
Added CommonJS support alongside ESM for better NestJS integration and broader Node.js ecosystem compatibility. This eliminates the need for Node.js's
--experimental-require-moduleflag and resolves dual package hazard issues. [#429, #431]
@fedify/cli
-
Added
Next.jsoption tofedify initcommand. This option allows users to initialize a new Fedify project with Next.js integration. [#313 by Chanhaeng Lee] -
Changed how
fedify nodeinfocommand handles non-Semantic Versioning number strings on-b/--best-effortmode. Now it uses the same logic as theparseSoftware()function in the @fedify/fedify package, which allows it to parse non-Semantic Versioning number strings more flexibly. [#353, #365 by Hyeonseo Kim]] -
Added
-T/--timeoutoption tofedify lookupcommand. This option allows users to specify timeout in seconds for network requests to prevent hanging on slow or unresponsive servers. [[#258], #372 by Hyunchae Kim]
@fedify/amqp
- Added CommonJS support alongside ESM for better compatibility with CommonJS-based Node.js applications. [#429, #431]
@fedify/cfworkers
- Created Cloudflare Workers integration as the @fedify/cfworkers package. Separated from
@fedify/fedify/x/cfworkersto improve modularity and reduce bundle size. [#375 by Chanhaeng Lee]
@fedify/denokv
- Created Deno KV integration as the @fedify/denokv package. Separated from
@fedify/fedify/x/denokvto improve modularity and reduce bundle size. [#375 by Chanhaeng Lee]
@fedify/elysia
- Added CommonJS support alongside ESM for better compatibility with CommonJS-based Node.js applications. [#429, #431]
@fedify/express
- Added CommonJS support alongside ESM for better compatibility with CommonJS-based Node.js applications. [#429, #431]
@fedify/fastify
-
Created Fastify integration as the @fedify/fastify package. [#151, #450 by An Subin]
- Added
fedifyPlugin()function for integrating Fedify into Fastify applications. - Converts between Fastify's request/reply API and Web Standards
Request/Response. - Supports both ESM and CommonJS for broad Node.js compatibility.
- Added
@fedify/h3
- Added CommonJS support alongside ESM for better compatibility with CommonJS-based Node.js applications. [#429, #431]
@fedify/hono
-
Created Hono integration as the @fedify/hono package. Separated from
@fedify/fedify/x/honoto improve modularity and reduce bundle size. [#375 by Chanhaeng Lee] -
Added CommonJS support alongside ESM for better compatibility with CommonJS-based Node.js applications. [#429, #431]
@fedify/koa
-
Created Koa integration as the @fedify/koa package. [#454, #455]
- Added
createMiddleware()function for integrating Fedify into Koa applications. - Supports both Koa v2.x and v3.x via peer dependencies.
- Converts between Koa's context-based API and Web Standards Request/Response.
- Builds for both npm (ESM/CJS) and JSR distribution.
- Added
@fedify/next
-
Created Next.js integration as the @fedify/next package. [#313 by Chanhaeng Lee]
-
Added CommonJS support alongside ESM for better compatibility with CommonJS-based Node.js applications. [#429, #431]
@fedify/postgres
- Added CommonJS support alongside ESM for better compatibility with CommonJS-based Node.js applications. [#429, #431]
@fedify/redis
-
Added support for Redis Cluster to the @fedify/redis package. [#368 by Michael Barrett]
-
Added CommonJS support alongside ESM for better compatibility with CommonJS-based Node.js applications. [#429, #431]
@fedify/sqlite
- Added CommonJS support alongside ESM for better compatibility with CommonJS-based Node.js applications. [#429, #431]
@fedify/sveltekit
-
Created SvelteKit integration as the @fedify/sveltekit package. Separated from
@fedify/fedify/x/sveltekitto improve modularity and reduce bundle size. [#375 by Chanhaeng Lee] -
Fixed SvelteKit integration hook types to correctly infer the request and response types in hooks. [#271, #394 by Chanhaeng Lee]
-
Added CommonJS support alongside ESM for better compatibility with CommonJS-based Node.js applications. [#429, #431]