Fedify changelog
Version 2.0.0
To be released.
@fedify/fedify
Remove
contextLoaderoption (which was deprecated) fromFederationOptionsinterface in favor ofcontextLoaderFactoryoption for better flexibility. [#376, #445 by Hasang Cho]Migrated from @phensley/language-tag package and its
LanguageTagclass to the standardizedIntl.Localeclass for representing language tags. [#280, #392 by Jang Hanarae]- The
LanguageString.languageproperty is nowLanguageString.localeand is of typeIntl.Localeinstead ofLanguageTag. - The
LanguageStringconstructor now accepts either anIntl.Localeobject or a string for the language parameter. - The
Link.languageproperty is now of typeIntl.Localeinstead ofLanguageTag. - Removed the
@phensley/language-tagdependency.
- The
Remove
documentLoaderoption (which was deprecated) fromFederationOptionsinterface in favor ofdocumentLoaderFactoryoption for better flexibility. [#376, #393 by Hasang Cho]Changed NodeInfo
software.versionfield type fromSemVertostringto properly handle non-SemVer version strings in accordance with the NodeInfo specification. [#366, #433 by Hyeonseo Kim]- The
parseNodeInfo()function now returns version asstringinstead ofSemVerobject. - The
Software.versionfield is now ofstring(was ofSemVer). - Removed
parseSemVer()andformatSemVer()functions. - Updated related CLI tools and documentation.
- The
Federation dispatchers are now only triggered when the request accepts ActivityPub-compatible content types. This improves compatibility with applications that serve both HTML and ActivityPub content from the same URLs. [#434 by Emelia Smith]
- Actor, object, and collection dispatchers will no longer be called for requests with
Accept: text/htmlor other non-ActivityPub content types. - The
notAcceptablecallback is now triggered at the middleware level before dispatchers are invoked. - If your application relies on dispatchers being called regardless of
Acceptheader, you may need to adjust your routing logic.
- Actor, object, and collection dispatchers will no longer be called for requests with
Changed the default activity idempotency strategy from
"per-origin"to"per-inbox"to align with standard ActivityPub behavior. [#441]- Activities are now deduplicated per inbox by default, allowing the same activity ID to be processed once per inbox independently.
- The previous
"per-origin"strategy (deduplicate per receiving server) can still be explicitly configured using.withIdempotency("per-origin"). - This change ensures proper delivery of activities to multiple inboxes on the same server, fixing issues where activities were incorrectly deduplicated globally.
Separated modules from
@fedify/fedify/runtimeto improve modularity and reduce coupling between vocabulary generation and core federation functionality. [#444, #451 by ChanHaeng Lee]- Modules related to ActivityPub vocabulary generation have been extracted into the new
@fedify/vocab-runtimepackage. - Other utility modules from
@fedify/fedify/runtimehave been reorganized into the@fedify/fedify/utilsdirectory within the main package. - Updated import paths throughout the codebase to reflect the new module organization.
- Modules related to ActivityPub vocabulary generation have been extracted into the new
The
KvCacheParameters.rulesoption's type became[string | URL | URLPattern, Temporal.Duration | Temporal.DurationLike][](was[string | URL | URLPattern, Temporal.Duration][]).Adds the
-A/--authorized-fetchflag to thefedify inboxcommand. [#229, [#472] By Lee ByeongJun]The
@fedify/fedify/x/*modules are removed. Also, there are no Fresh integration for now. [#391 by Chanhaeng Lee]- Removed
@fedify/fedify/x/cfworkersin favor of@fedify/cfworkers. - Removed
@fedify/fedify/x/denokvin favor of@fedify/denokv. - Removed
@fedify/fedify/x/honoin favor of@fedify/hono. - Removed
@fedify/fedify/x/sveltekitin favor of@fedify/sveltekit. - Removed
@fedify/fedify/x/fresh(Fresh integration). [#466]
- Removed
@fedify/cli
The Fedify CLI now runs natively on Node.js and Bun without requiring compiled binaries, providing a more natural JavaScript package experience for Node.js and Bun users. [#374, #456, #457]
Added
fedify generate-vocabcommand to generate Activity Vocabulary classes from schema files. This command uses the new @fedify/vocab-tools package internally and allows users to extend Activity Vocabulary with custom types. [#444, #458 by ChanHaeng Lee]Updated
fedify initcommand for better DX. [#397, #435 by Chanhaeng Lee]- If the directory is not empty, prompts the user for confirmation before proceeding. If the user agrees, it moves the remaining directory to trash and continue the initialization from new created directory.
- Ask again if some options is not specified or invalid.
The
fedify lookupcommand now supports multiple URLs with the-t/--traverseoption, allowing users to traverse multiple collections in a single command. [#408, #449 by Jiwon Kwon]
@fedify/relay
Created ActivityPub relay integration as the @fedify/relay package. [#359, #459 by Jiwon Kwon]
- Added
Relayinterface defining the common contract for relay implementations. - Added
MastodonRelayclass implementing Mastodon-compatible relay protocol with: - Added
SubscriptionRequestHandlertype for custom subscription approval logic. - Added
RelayOptionsinterface for relay configuration.
- Added
@fedify/vocab-tools
Created Activity Vocabulary code generator as the @fedify/vocab-tools package. Separated vocabulary code generation tools from the main @fedify/fedify package to improve modularity and enable custom vocabulary extensions across different JavaScript runtimes. [#444, #458 by ChanHaeng Lee]
- Made the code generator runtime-agnostic, supporting Deno, Node.js, and Bun environments.
- Provides programmatic API for generating vocabulary classes from schema files.
- Integrated with
fedify generate-vocabCLI command. - Published to both npm and JSR for broad ecosystem compatibility.
@fedify/vocab-runtime
Created ActivityPub vocabulary runtime as the @fedify/vocab-runtime package. Separated core vocabulary generation and processing modules from the main @fedify/fedify package to improve modularity and reduce coupling between vocabulary processing and federation functionality. [#444, #451 by ChanHaeng Lee]
- Extracted
DocumentLoader,RemoteDocument, and related types from the main package. - Moved cryptographic key processing utilities, e.g.,
importSpki,exportSpki,importMultibaseKey,exportMultibaseKey. - Relocated multibase encoding/decoding functionality.
- Separated language string processing (
LanguageStringclass). - This package is primarily used by generated vocabulary classes and provides the runtime infrastructure for ActivityPub object processing.
- Extracted
Version 1.10.0
To be released.
Version 1.9.1
Released on October 31, 2025.
@fedify/testing
Fixed JSR publishing hanging indefinitely at the processing stage by hiding complex type exports from the public API. The JSR type analyzer struggled with complex type dependencies when analyzing the
MockFederation,TestFederation,TestContext, andSentActivitytypes, causing indefinite hangs during the processing stage. [#468]- Breaking change:
MockFederationclass is no longer exported from the public API. UsecreateFederation()factory function instead. TestFederation<TContextData>,TestContext<TContextData>, andSentActivityinterfaces are no longer exported from the public API, but their types are still inferred fromcreateFederation()return type and can be used via TypeScript's type inference.
- Breaking change:
@fedify/cli
- Fixed
fedifycommand failing on Windows withPermissionDeniederror when trying to locate or execute package managers during initialization. The CLI now properly handles *.cmd and *.bat files on Windows by invoking them throughcmd /c. [#463]
Version 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 Collectionconstructor now acceptslikesOfoption.- Added
Collection.likesOfIdproperty. - Added
Collection.getLikesOf()method. new Collectionconstructor now acceptssharesOfoption.- Added
Collection.sharedOfIdproperty. - Added
Collection.getSharedOf()method. new Collectionconstructor now acceptsrepliesOfoption.- Added
Collection.repliesOfIdproperty. - Added
Collection.getRepliesOf()method. new Collectionconstructor now acceptsinboxOfoption.- Added
Collection.inboxOfIdproperty. - Added
Collection.getInboxOf()method. new Collectionconstructor now acceptsoutboxOfoption.- Added
Collection.outboxOfIdproperty. - Added
Collection.getOutboxOf()method. new Collectionconstructor now acceptsfollowersOfoption.- Added
Collection.followersOfIdproperty. - Added
Collection.getFollowersOf()method. new Collectionconstructor now acceptsfollowingOfoption.- Added
Collection.followingOfIdproperty. - Added
Collection.getFollowingOf()method. new Collectionconstructor 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 Hyeonseo Kim]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]
@fedify/testing
- Added CommonJS support alongside ESM for better compatibility with CommonJS-based Node.js applications. [#429, #431]
Version 1.8.14
Released on October 19, 2025.
@fedify/testing
- Fixed JSR publishing hanging indefinitely at the processing stage. The issue was caused by TypeScript function overload signatures in
MockContextandMockFederationclasses that triggered a bug in JSR's type analyzer. All method overloads have been removed and simplified to useanytypes where necessary. [#468, #470]
@fedify/cli
- Fixed
fedifycommand failing on Windows withPermissionDeniederror when trying to locate or execute package managers during initialization. The CLI now properly handles *.cmd and *.bat files on Windows by invoking them throughcmd /c. [#463]
Version 1.8.13
Released on October 10, 2025.
@fedify/fedify
- Fixed inconsistent encoding/decoding of URI template identifiers with special characters. Updated uri-template-router to version 1.0.0, which properly decodes percent-encoded characters in URI template variables according to RFC 6570. This resolves issues where identifiers containing URIs (e.g.,
https%3A%2F%2Fexample.com) were being inconsistently decoded in dispatcher callbacks and double-encoded in collection URLs. [#416]
Version 1.8.12
Released on September 20, 2025.
@fedify/sqlite
- Fixed bundling issues where incorrect import paths to node_modules were included in the bundled output. The @js-temporal/polyfill dependency was moved from
devDependenciestodependenciesto ensure proper bundling.
Version 1.8.11
Released on September 17, 2025.
- Improved the AT Protocol URI workaround to handle all DID methods and edge cases. The fix now properly percent-encodes any authority component in
at://URIs, supportingdid:web,did:key, and other DID methods beyond justdid:plc. Also handles URIs without path components correctly. [#436]
Version 1.8.10
Released on September 17, 2025.
@fedify/fedify
- Added a temporary workaround for invalid AT Protocol URIs from BridgyFed. URIs like
at://did:plc:...that violate RFC 3986 URI syntax are now automatically URL-encoded toat://did%3Aplc%3A...to prevent parsing failures when processing bridged Bluesky content. [#436]
Version 1.8.9
Released on September 10, 2025.
- Integration and database adapter packages (@fedify/amqp, @fedify/elysia, @fedify/express, @fedify/h3, @fedify/nestjs, @fedify/postgres, @fedify/redis, @fedify/sqlite, @fedify/testing) now specify explicit version ranges for the @fedify/fedify peer dependency instead of accepting any version, improving compatibility guarantees.
Version 1.8.8
Released on August 25, 2025.
@fedify/fedify
- Fixed a bug where
verifyRequest()function threw aTypeErrorwhen verifying HTTP Signatures withcreatedorexpiresfields in theSignatureheader as defined in draft-cavage-http-signatures-12, causing500 Internal Server Errorresponses in inbox handlers. Now it correctly handles these fields as unquoted integers according to the specification.
Version 1.8.7
Released on August 25, 2025.
@fedify/fedify
- Fixed a bug where ActivityPub Discovery failed to recognize XHTML self-closing
<link>tags. The HTML/XHTML parser now correctly handles whitespace before the self-closing slash (/>), improving compatibility with XHTML documents that follow the self-closing tag format.
Version 1.8.6
Released on August 24, 2025.
@fedify/nestjs
- Fixed a critical error that prevented the middleware from processing ActivityPub requests in NestJS applications. The middleware now correctly handles request bodies that have been pre-processed by other NestJS middleware or interceptors. [#279, #386 by Jaeyeol Lee]
@fedify/testing
Updated exports to include context creation functions. [#382 by Colin Mitchell]
- Added
createContext()function. - Added
createInboxContext()function. - Added
createRequestContext()function.
- Added
Version 1.8.5
Released on August 8, 2025.
@fedify/fedify
- Fixed a critical authentication bypass vulnerability in the inbox handler that allowed unauthenticated attackers to impersonate any ActivityPub actor. The vulnerability occurred because activities were processed before verifying that the HTTP Signatures key belonged to the claimed actor. Now authentication verification is performed before activity processing to prevent actor impersonation attacks. [CVE-2025-54888]
@fedify/cli
Version 1.8.4
Released on August 7, 2025.
@fedify/cli
- Fixed
fedify lookupcommand's-r/--raw,-C/--compact, and-e/--expandoptions to properly output valid JSON format instead of Deno's object inspection format. [#357]
Version 1.8.3
Released on August 6, 2025.
@fedify/cli
Restored image resizing functionality in
fedify lookupcommand by using the existing Jimp library for image manipulation. This properly displaysiconandimagefields with appropriate sizing in terminals.Added support for Ghostty terminal emulator for image rendering in
fedify lookupcommand.
Version 1.8.2
Released on August 6, 2025.
@fedify/cli
Fixed
npx @fedify/clicommand not working on various platforms by correcting the binary path resolution in the Node.js wrapper script.Temporarily removed Sharp dependency to resolve installation issues across different platforms. As a result,
fedify lookupcommand will no longer resize images when displaying them in the terminal. This is a temporary workaround and image resizing functionality will be restored in a future patch version using an alternative approach.Fixed build artifact paths in GitHub Actions workflow to correctly reference CLI package location in the monorepo structure.
Version 1.8.1
Released on August 6, 2025. Note that 1.8.0 was skipped due to a mistake in the versioning.
The repository has been restructured as a monorepo, consolidating all Fedify packages into a single repository with unified versioning. This change affects the following packages:
- @fedify/fedify (main library)
- @fedify/cli (CLI toolchain)
- @fedify/amqp (AMQP/RabbitMQ driver)
- @fedify/express (Express integration)
- @fedify/h3 (h3 framework integration)
- @fedify/postgres (PostgreSQL drivers)
- @fedify/redis (Redis drivers)
All packages now follow the same version number and are released together. Previously, each package had independent versioning.
Several new packages have been added to the monorepo:
@fedify/fedify
Added custom collection dispatchers. [#310, #332 by ChanHaeng Lee]
- Added
CustomCollectionDispatcher,CustomCollectionCounter, andCustomCollectionCursortypes for custom collection dispatching. - Added
CustomCollectionCallbackSetterstype for setting custom collection callbacks. - Added
CustomCollectionHandlerclass andhandleCustomCollection()andhandleOrderedCollection()functions to process custom collections. - Added
setCollectionDispatcher()andsetOrderedCollectionDispatcher()methods to theFederatableinterface. Implemented inFederationBuilderImplclass. - Added
getCollectionUri()method to theContextinterface. - Added utility types
ConstructorWithTypeIdandParamsKeyPathfor custom collection dispatchers.
- Added
Key–value stores now optionally support CAS (compare-and-swap) operation for atomic updates. This is useful for implementing optimistic locking and preventing lost updates in concurrent environments.
- Added optional
KvStore.cas()method. - Added
MemoryKvStore.cas()method. - Added
DenoKvStore.cas()method.
- Added optional
Added useful functions for fediverse handles at
@fedify/fedify/vocab. This functions simplify working with fediverse handles and URLs. [#278 by ChanHaeng Lee]FediverseHandle: An interface representing a fediverse handle.parseFediverseHandle(): A function to parse a fediverse handle into its components.isFediverseHandle(): A function to check if a string is a valid fediverse handle.toAcctUrl(): A function to convert a fediverse handle to aURL.
Added
LookupWebFingerOptions.maxRedirectionoption. [#248, #281 by Lee ByeongJun]APIs making HTTP requests became able to optionally take
AbortSignal. [#51, #315 by Hyunchae Kim]- Added
DocumentLoaderOptionsinterface. - The
DocumentLoadertype became able to optionally take the second parameter. - Added
LookupObjectOptions.signaloption. - Added
LookupWebFingerOptions.signaloption. - Added
DoubleKnockOptions.signaloption.
- Added
@fedify/cli
The
fedifyCLI now correctly disables color output when standard output isn't a TTY (for example, when redirecting to a file) or when theNO_COLORenvironment variable is set. [#257, #341 by Cho Hasang]Added
fedify nodeinfocommand, and deprecatedfedify nodecommand in favor offedify nodeinfo. [#267, #331 by Hyeonseo Kim]Added
fedify webfingercommand. This command allows users to look up WebFinger information for a given resource. [#260, #278 by ChanHaeng Lee]- The input can be a handle (e.g.,
@user@server,user@server) or a URL (e.g.,https://server/users/path). - The
--user-agentor-aoption used asUser-Agentheader value in the WebFinger request. - The
--allow-private-addressor-poption allows looking up WebFinger information for private addresses (e.g.,localhost). - The
--max-redirectionoption allows uses to specify the maximum number of redirects to follow when performing WebFinger lookups. [#311, #328 by KeunHyeong Park]
- The input can be a handle (e.g.,
The
fedify lookupcommand now displays images depending on user's terminal emulator. [#169, #348 by Jiwon Kwon]Added
-o/--outputoption tofedify lookupcommand. This option allows users to save retrieved lookup results to specified path. [#261, #321 by Jiwon Kwon]Added options to customize the temporary actor information when running
fedify inboxcommand. [#262, #285 by Hasang Cho]- Added
--actor-nameoption to customize the actor display name. - Added
--actor-summaryoption to customize the actor description. - Both options provide sensible defaults when not specified.
- Added
The
fedify inboxcommand now displays the type of the object contained in each activity, in addition to the activity's own type. [#191, #342 by Jang Hanarae]Added
--dry-runoption tofedify initcommand. This option allows users to preview what files and configurations would be created without actually creating them. [#263, #298 by Lee ByeongJun]Fixed a bug where the
fedify nodeinfocommand (wasfedify node) had failed to correctly render the favicon in terminal emulators that do not support 24-bit colors. [#168, #282, #304 by Hyeonseo Kim]
@fedify/elysia
Supported Elysia integration with the @fedify/elysia package. [#286, #339 by Hyeonseo Kim]
- Added @fedify/elysia package.
- Added
fedifyElysia plugin for integrating Fedify into Elysia applications.
@fedify/nestjs
Supported NestJS integration with the @fedify/nestjs package. [#269, #309 by Jaeyeol Lee]
- Added @fedify/nestjs package.
- Added
FedifyModulefor integrating Fedify into NestJS applications.
@fedify/sqlite
Added
SqliteKvStore, implementingKvStoreusing SQLite with the @fedify/sqlite package. Compatible with Bun, Deno, and Node.js. [#274, #318 by An Subin]- Added @fedify/sqlite package.
- Added
SqliteKvStore, a SQLite implementation ofKvStore.
@fedify/testing
Added mock classes for
FederationandContextinterfaces to improve testability without requiring a real federation server setup. The mock classes track all sent activities with metadata and support all standard Fedify patterns including custom path registration and multiple activity type listeners. [#197, #283 by Lee ByeongJun]- Added @fedify/testing package.
- Added
MockFederationclass. - Added
MockContextclass.
Version 1.7.13
Released on September 17, 2025.
- Improved the AT Protocol URI workaround to handle all DID methods and edge cases. The fix now properly percent-encodes any authority component in
at://URIs, supportingdid:web,did:key, and other DID methods beyond justdid:plc. Also handles URIs without path components correctly. [#436]
Version 1.7.12
Released on September 17, 2025.
- Added a temporary workaround for invalid AT Protocol URIs from BridgyFed. URIs like
at://did:plc:...that violate RFC 3986 URI syntax are now automatically URL-encoded toat://did%3Aplc%3A...to prevent parsing failures when processing bridged Bluesky content. [#436]
Version 1.7.11
Released on August 25, 2025.
- Fixed a bug where
verifyRequest()function threw aTypeErrorwhen verifying HTTP Signatures withcreatedorexpiresfields in theSignatureheader as defined in draft-cavage-http-signatures-12, causing500 Internal Server Errorresponses in inbox handlers. Now it correctly handles these fields as unquoted integers according to the specification.
Version 1.7.10
Released on August 25, 2025.
- Fixed a bug where ActivityPub Discovery failed to recognize XHTML self-closing
<link>tags. The HTML/XHTML parser now correctly handles whitespace before the self-closing slash (/>), improving compatibility with XHTML documents that follow the self-closing tag format.
Version 1.7.9
Released on August 8, 2025.
- Fixed a critical authentication bypass vulnerability in the inbox handler that allowed unauthenticated attackers to impersonate any ActivityPub actor. The vulnerability occurred because activities were processed before verifying that the HTTP Signatures key belonged to the claimed actor. Now authentication verification is performed before activity processing to prevent actor impersonation attacks. [CVE-2025-54888]
Version 1.7.8
Released on August 5, 2025.
- Updated
kvCache()wrapper to read from preloaded contexts rather than from theKvStore. This saves network and disk overheads when parsing activities and objects using the JSON-LD processor. [#352 by Fabien O'Carroll]
Version 1.7.7
Released on July 28, 2025.
Optimized
doubleKnock()function to avoid multiple request body clones during redirects. The request body is now read once and reused throughout the entire operation, preventing potentialTypeError: unusableerrors and improving performance. [#300, #335 by Fabien O'Carroll]- Added
SignRequestOptions.bodyoption. - Added
DoubleKnockOptions.bodyoption. - Updated internal signing functions to accept pre-read body buffers.
- Added
Version 1.7.6
Released on July 24, 2025.
- Fixed
doubleKnock()to properly handle redirects with path-onlyLocationheaders by resolving them relative to the original request URL. [#324 by Fabien O'Carroll]
Version 1.7.5
Released on July 15, 2025.
- Fixed
TypeError: unusableerror that occurred whendoubleKnock()encountered redirects during HTTP signature retry attempts. [#294, #295]
Version 1.7.4
Released on July 13, 2025.
- Fixed a bug the
-T/--no-tunneloption in thefedify inboxcommand was being ignored, causing the server to always create a public tunnel regardless of the flag. [#243, #284 by Lee ByeongJun]
Version 1.7.3
Released on July 9, 2025.
- Added
"default"export conditions to all package exports in package.json for improved Node.js compatibility.
Version 1.7.2
Released on July 2, 2025.
- Fixed HTTP signature verification to handle malformed RFC 9421 signatures gracefully instead of returning
500 Internal Server Errorresponses. Malformed signatures now properly fail verification and return appropriate error responses.
Version 1.7.1
Released on June 30, 2025.
- Fixed JSON-LD serialization of the
Question.votersproperty to correctly serialize as a plain number (e.g.,"votersCount": 123) instead of as a typed literal object (e.g.,"votersCount":{"type":"xsd:nonNegativeInteger", "@value":123}).
Version 1.7.0
Released on June 25, 2025.
Added optional
MessageQueue.nativeRetrialproperty to indicate whether the message queue backend provides native retry mechanisms. Whentrue, Fedify will skip its own retry logic and rely on the backend to handle retries. Whenfalseor omitted, Fedify will handle retries using its own retry policies. [#250, #251]DenoKvMessageQueue.nativeRetrialistrue.WorkersMessageQueue.nativeRetrialistrue.InProcessMessageQueue.nativeRetrialisfalse.ParallelMessageQueue.nativeRetrialinherits from the wrapped queue.
Added
FederationOptions.firstKnockoption to configure the HTTP Signatures specification used for the first signature attempt when communicating with unknown servers. This implements the double-knocking mechanism for better compatibility across different ActivityPub servers. Defaults to"rfc9421"(RFC 9421: HTTP Message Signatures), with fallback to"draft-cavage-http-signatures-12"if the first attempt fails. [#252 by Fabien O'Carroll]
Version 1.6.12
Released on September 17, 2025.
- Improved the AT Protocol URI workaround to handle all DID methods and edge cases. The fix now properly percent-encodes any authority component in
at://URIs, supportingdid:web,did:key, and other DID methods beyond justdid:plc. Also handles URIs without path components correctly. [#436]
Version 1.6.11
Released on September 17, 2025.
- Added a temporary workaround for invalid AT Protocol URIs from BridgyFed. URIs like
at://did:plc:...that violate RFC 3986 URI syntax are now automatically URL-encoded toat://did%3Aplc%3A...to prevent parsing failures when processing bridged Bluesky content. [#436]
Version 1.6.10
Released on August 25, 2025.
- Fixed a bug where
verifyRequest()function threw aTypeErrorwhen verifying HTTP Signatures withcreatedorexpiresfields in theSignatureheader as defined in draft-cavage-http-signatures-12, causing500 Internal Server Errorresponses in inbox handlers. Now it correctly handles these fields as unquoted integers according to the specification.
Version 1.6.9
Released on August 25, 2025.
- Fixed a bug where ActivityPub Discovery failed to recognize XHTML self-closing
<link>tags. The HTML/XHTML parser now correctly handles whitespace before the self-closing slash (/>), improving compatibility with XHTML documents that follow the self-closing tag format.
Version 1.6.8
Released on August 8, 2025.
- Fixed a critical authentication bypass vulnerability in the inbox handler that allowed unauthenticated attackers to impersonate any ActivityPub actor. The vulnerability occurred because activities were processed before verifying that the HTTP Signatures key belonged to the claimed actor. Now authentication verification is performed before activity processing to prevent actor impersonation attacks. [CVE-2025-54888]
Version 1.6.7
Released on July 24, 2025.
- Fixed
doubleKnock()to properly handle redirects with path-onlyLocationheaders by resolving them relative to the original request URL. [#324 by Fabien O'Carroll]
Version 1.6.6
Released on July 15, 2025.
- Fixed
TypeError: unusableerror that occurred whendoubleKnock()encountered redirects during HTTP signature retry attempts. [#294, #295]
Version 1.6.5
Released on July 9, 2025.
- Added
"default"export conditions to all package exports in package.json for improved Node.js compatibility.
Version 1.6.4
Released on July 2, 2025.
- Fixed HTTP signature verification to handle malformed RFC 9421 signatures gracefully instead of returning
500 Internal Server Errorresponses. Malformed signatures now properly fail verification and return appropriate error responses.
Version 1.6.3
Released on June 30, 2025.
- Fixed JSON-LD serialization of the
Question.votersproperty to correctly serialize as a plain number (e.g.,"votersCount": 123) instead of as a typed literal object (e.g.,"votersCount":{"type":"xsd:nonNegativeInteger", "@value":123}).
Version 1.6.2
Released on June 19, 2025.
- Fixed compatibility issue with Mastodon servers running bleeding-edge versions with RFC 9421 implementation bugs. Extended double-knocking to retry with draft-cavage-http-signatures-12 on
5xxerrors as a temporary workaround for Mastodon's RFC 9421 implementation that returns500 Internal Server Error.
Version 1.6.1
Released on June 7, 2025. Note that 1.6.0 was skipped due to a mistake in the versioning.
Added
Context.lookupWebFinger()method to make WebFinger lookups accessible from the context. [#227]Added
Context.federationproperty to access theFederationobject from the context. [#235]Added
Context.clone()method. [#237]Introduced
FederationBuilderfor creating a federation instance with a builder pattern.- Added
createFederationBuilder()function. - Added
Federatableinterface. - Added
FederationBuilderinterface. - Deprecated
CreateFederationOptionsinterface. UseFederationOptionsinterface.
- Added
Added
Router.trailingSlashInsensitiveproperty.Added
Router.clone()method.Implemented HTTP Message Signatures (RFC 9421) with double-knocking. Currently, it only works with RSA-PKCS#1-v1.5. [#208]
- Added
HttpMessageSignaturesSpectype. - Added
SignRequestOptions.specoption. - Added
SignRequestOptions.currentTimeoption. - Added
VerifyRequestOptions.specoption. - Added
GetAuthenticatedDocumentLoaderOptions.specDetermineroption. - Added
GetAuthenticatedDocumentLoaderOptions.traceProvideroption. - Added
HttpMessageSignaturesSpecDeterminerinterface. - Added
--first-knockoption tofedify lookupcommand.
- Added
Fedify now supports Cloudflare Workers. [#233]
The minimum supported version of Node.js is now 22.0.0.
Version 1.5.9
Released on September 17, 2025.
- Improved the AT Protocol URI workaround to handle all DID methods and edge cases. The fix now properly percent-encodes any authority component in
at://URIs, supportingdid:web,did:key, and other DID methods beyond justdid:plc. Also handles URIs without path components correctly. [#436]
Version 1.5.8
Released on September 17, 2025.
- Added a temporary workaround for invalid AT Protocol URIs from BridgyFed. URIs like
at://did:plc:...that violate RFC 3986 URI syntax are now automatically URL-encoded toat://did%3Aplc%3A...to prevent parsing failures when processing bridged Bluesky content. [#436]
Version 1.5.7
Released on August 25, 2025.
- Fixed a bug where
verifyRequest()function threw aTypeErrorwhen verifying HTTP Signatures withcreatedorexpiresfields in theSignatureheader as defined in draft-cavage-http-signatures-12, causing500 Internal Server Errorresponses in inbox handlers. Now it correctly handles these fields as unquoted integers according to the specification.
Version 1.5.6
Released on August 25, 2025.
- Fixed a bug where ActivityPub Discovery failed to recognize XHTML self-closing
<link>tags. The HTML/XHTML parser now correctly handles whitespace before the self-closing slash (/>), improving compatibility with XHTML documents that follow the self-closing tag format.
Version 1.5.5
Released on August 8, 2025.
- Fixed a critical authentication bypass vulnerability in the inbox handler that allowed unauthenticated attackers to impersonate any ActivityPub actor. The vulnerability occurred because activities were processed before verifying that the HTTP Signatures key belonged to the claimed actor. Now authentication verification is performed before activity processing to prevent actor impersonation attacks. [CVE-2025-54888]
Version 1.5.4
Released on June 30, 2025.
- Fixed JSON-LD serialization of the
Question.votersproperty to correctly serialize as a plain number (e.g.,"votersCount": 123) instead of as a typed literal object (e.g.,"votersCount":{"type":"xsd:nonNegativeInteger", "@value":123}).
Version 1.5.3
Released on May 16, 2025.
Fixed a bug where inbox handler had thrown a
jsonld.SyntaxErrorwhich caused a500 Internal Server Errorwhen the received activity had an invalid JSON-LD syntax. Now it logs the error and responds with a400 Bad Requesterror instead. [#232]The
exportJwk()function now populates thealgproperty of a returnedJsonWebKeyobject with"Ed25519"if the input key is an Ed25519 key.
Version 1.5.2
Released on May 11, 2025.
Fixed the
fedify initcommand to install the correct version of @fedify/express package. [#230, #231 by Emelia Smith]The
exportJwk()function now populates thealgproperty of a returnedJsonWebKeyobject with"Ed25519"if the input key is an Ed25519 key.
Version 1.5.1
Released on April 8, 2025.
Activity Vocabulary API became to accept RFC 3339 date-time strings without a timezone offset. This is not a bug fix, but improves interoperability with some implementations that do not include a timezone offset in their date-time strings including WordPress. [#226]
Added the following default context to
Undoclass:json{ "litepub": "http://litepub.social/ns#", "toot": "http://joinmastodon.org/ns#", "EmojiReact": "litepub:EmojiReact", "Emoji": "toot:Emoji" }
Version 1.5.0
Released on March 28, 2025.
Improved activity delivery performance with large audiences through a two-stage queuing system. Sending activities to many recipients (e.g., accounts with many followers) is now significantly faster and uses less memory. [#220]
- Added
FederationQueueOptions.fanoutoption. - Changed the type of
FederationStartQueueOptions.queueoption to"inbox" | "outbox" | "fanout" | undefined(was"inbox" | "outbox" | undefined). - Added
SendActivityOptions.fanoutoption. - Added OpenTelemetry instrumented span
activitypub.fanout. - The
ForwardActivityOptionsinterface became a type alias ofOmit<SendActivityOptions, "fanout"> & { skipIfUnsigned: boolean }, which is still compatible with the previous version.
- Added
A
Federationobject now can have a canonical origin for web URLs and a canonical host for fediverse handles. This affects the URLs constructed byContextobjects, and the WebFinger responses.- Added
CreateFederationOptions.originoption. - Added
FederationOrigininterface. - Added
Context.canonicalOriginproperty.
- Added
Followers collection synchronization (FEP-8fcf) is now turned off by default.
- Added
SendActivityOptionsForCollectioninterface. - The type of
Context.sendActivity({ identifier: string } | { username: string } | { handle: string }, "followers", Activity)overload's fourth parameter becameSendActivityOptionsForCollection | undefined(wasSendActivityOptions | undefined).
- Added
Fedify now accepts PEM-PKCS#1 besides PEM-SPKI for RSA public keys. [#209]
CryptographicKeynow can contain apublicKeywith a PEM-PKCS#1 format (in addition to PEM-SPKI).- Added
importPkcs1()function. - Added
importPem()function.
The
fetchKey()function became to choose the public key of the actor ifkeyIdhas no fragment and the actor has only one public key. [#211]Added an optional parameter with
GetSignedKeyOptionstype to theRequestContext.getSignedKey()method.Added
GetSignedKeyOptionsinterface.Added an optional parameter with
GetKeyOwnerOptionstype to theRequestContext.getSignedKeyOwner()method.Deprecated the parameters of the
AuthorizePredicateandObjectAuthorizePredicatetypes to get the signed key and its owner in favor of theRequestContext.getSignedKey()andRequestContext.getSignedKeyOwner()methods.- Deprecated the third parameter of the
AuthorizePredicatetype in favor of theRequestContext.getSignedKey()method. - Deprecated the fourth parameter of the
AuthorizePredicatetype in favor of theRequestContext.getSignedKeyOwner()method. - Deprecated the third parameter of the
ObjectAuthorizePredicatetype in favor of theRequestContext.getSignedKey()method. - Deprecated the fourth parameter of the
ObjectAuthorizePredicatetype in favor of theRequestContext.getSignedKeyOwner()method.
- Deprecated the third parameter of the
Added an optional method
enqueueMany()toMessageQueueinterface for sending multiple activities at once.Updated @js-temporal/polyfill to 0.5.0 for Node.js and Bun. On Deno, there is no change because the polyfill is not used.
Updated uri-template-router to 0.0.17 which fixes bundler errors on Rollup. [#221]
Improved error handling and logging for document loader when KV store operations fail. [#223 by Revath S Kumar]
Fixed a bug of the
fedify inboxcommand where it had failed to render the web interface when thefedifycommand was installed usingdeno installcommand from JSR.The web interface of the
fedify inboxcommand was slightly redesigned:- The Fedify logo with the cute dinosaur is now displayed at the top of the page.
- You can easily copy the fediverse handle of the ephemeral actor.
Internalized the multibase package, which is obsolete and no longer maintained. [#127, #215 by Fróði Karlsson]
Added more log messages using the LogTape library. Currently the below logger categories are used:
["fedify", "federation", "fanout"]["fedify", "federation", "object"]
Version 1.4.17
Released on September 17, 2025.
- Improved the AT Protocol URI workaround to handle all DID methods and edge cases. The fix now properly percent-encodes any authority component in
at://URIs, supportingdid:web,did:key, and other DID methods beyond justdid:plc. Also handles URIs without path components correctly. [#436]
Version 1.4.16
Released on September 17, 2025.
- Added a temporary workaround for invalid AT Protocol URIs from BridgyFed. URIs like
at://did:plc:...that violate RFC 3986 URI syntax are now automatically URL-encoded toat://did%3Aplc%3A...to prevent parsing failures when processing bridged Bluesky content. [#436]
Version 1.4.15
Released on August 25, 2025.
- Fixed a bug where
verifyRequest()function threw aTypeErrorwhen verifying HTTP Signatures withcreatedorexpiresfields in theSignatureheader as defined in draft-cavage-http-signatures-12, causing500 Internal Server Errorresponses in inbox handlers. Now it correctly handles these fields as unquoted integers according to the specification.
Version 1.4.14
Released on August 25, 2025.
- Fixed a bug where ActivityPub Discovery failed to recognize XHTML self-closing
<link>tags. The HTML/XHTML parser now correctly handles whitespace before the self-closing slash (/>), improving compatibility with XHTML documents that follow the self-closing tag format.
Version 1.4.13
Released on August 8, 2025.
- Fixed a critical authentication bypass vulnerability in the inbox handler that allowed unauthenticated attackers to impersonate any ActivityPub actor. The vulnerability occurred because activities were processed before verifying that the HTTP Signatures key belonged to the claimed actor. Now authentication verification is performed before activity processing to prevent actor impersonation attacks. [CVE-2025-54888]
Version 1.4.12
Released on June 30, 2025.
- Fixed JSON-LD serialization of the
Question.votersproperty to correctly serialize as a plain number (e.g.,"votersCount": 123) instead of as a typed literal object (e.g.,"votersCount":{"type":"xsd:nonNegativeInteger", "@value":123}).
Version 1.4.11
Released on May 16, 2025.
Fixed a bug where inbox handler had thrown a
jsonld.SyntaxErrorwhich caused a500 Internal Server Errorwhen the received activity had an invalid JSON-LD syntax. Now it logs the error and responds with a400 Bad Requesterror instead. [#232]The
exportJwk()function now populates thealgproperty of a returnedJsonWebKeyobject with"Ed25519"if the input key is an Ed25519 key.
Version 1.4.10
Released on April 8, 2025.
Activity Vocabulary API became to accept RFC 3339 date-time strings without a timezone offset. This is not a bug fix, but improves interoperability with some implementations that do not include a timezone offset in their date-time strings including WordPress. [#226]
Added the following default context to
Undoclass:json{ "litepub": "http://litepub.social/ns#", "toot": "http://joinmastodon.org/ns#", "EmojiReact": "litepub:EmojiReact", "Emoji": "toot:Emoji" }
Version 1.4.9
Released on March 26, 2025.
Fixed a
TypeErrorthrown by the followers collection dispatcher when thebase-urlparameter was provided.Fixed a
TypeErrorthrown by thesignRequest()function on Node.js. [#222]
Version 1.4.8
Released on March 26, 2025.
Fixed a bug where the
totalItemsproperty ofOrderedCollectionobjects returned by followers collection dispatcher had been an incorrect value if abase-urlparameter was provided.Fixed a bug where the
idproperty ofOrderedCollectionandOrderedCollectionPageobjects returned by followers collection dispatcher had been an incorrect value if abase-urlparameter was provided.
Version 1.4.7
Released on March 20, 2025.
Fixed a bug of WebFinger handler where it had failed to match
acct:URIs with a host having a port number. [#218, #219 by Revath S Kumar]Fixed a server error thrown when an invalid URL was passed to the
base-urlparameter of the followers collection. [#217]
Version 1.4.6
Released on March 9, 2025.
- Fedify no more depends on
node:punycodemodule, which is deprecated in Node.js. Now it uses the built-innode:urlmodule instead. [#212, #214 by Fróði Karlsson]
Version 1.4.5
Released on February 28, 2025.
Made
fedify initto install @fedify/h3 0.1.2 which is compatible with Fedify 1.0.0 or later versions when--web-framework nitrooption is provided. [#213]Fixed a bug where
fedify inithad failed to initialize a project with the--runtime node --package-manager pnpm --web-framework nitrooption. [#213]
Version 1.4.4
Released on February 25, 2025.
Added the following default context to
Application,Group,Organization,Person, andServiceclasses:json{ "Emoji": "http://joinmastodon.org/ns#Emoji" }
Version 1.4.3
Released on February 22, 2025.
Version 1.4.2
Released on February 19, 2025.
Fixed a bug where the
fedify initcommand had failed to locate package managers on Windows. [#210]The
fedifycommand became aware ofFEDIFY_LOG_FILEenvironment variable to log messages to a file. If the variable is set, the command logs messages to the file specified by the variable.
Version 1.4.1
Released on February 10, 2025.
- Fixed a bug with nested object hydration in Activity Vocabulary API where deeply nested properties (like
Object.getAttribution()onActivity.getObject()) were't being properly hydrated duringtoJsonLd()calls. Previously, subsequent calls totoJsonLd()on nested objects could result in inconsistent JSON-LD output where nested objects remained as URLs instead of being fully expanded.
Version 1.4.0
Released on February 5, 2025.
Document loader and context loader are now configurable with a factory function for more flexibility.
- Deprecated
CreateFederationOptions.documentLoaderoption. UseCreateFederationOptions.documentLoaderFactoryoption instead. - Deprecated
CreateFederationOptions.contextLoaderoption. UseCreateFederationOptions.contextLoaderFactoryoption instead. - Added
DocumentLoaderFactorytype. - Added
DocumentLoaderFactoryOptionsinterface. - Added the second parameter with
DocumentLoaderFactoryOptionstype toAuthenticatedDocumentLoaderFactorytype. GetAuthenticatedDocumentLoaderOptionsinterface became to extendDocumentLoaderFactoryOptionsinterface.- Added a type parameter
TContextDatatoCreateFederationOptionsinterface. - Fedify now assigns a random-generated http:/https: URI to activities if these do not have explicit
idproperties. This behavior can be disabled by excludingautoIdAssigner()from theCreateFederationOptions.activityTransformersoption.
- Deprecated
Introduced
ActivityTransformers for adjusting outgoing activities before sending them so that some ActivityPub implementations with quirks are satisfied.- Added
@fedify/fedify/compatmodule. - Added
ActivityTransformertype. - Added
autoIdAssigner()function. - Added
actorDehydrator()function. - Added
defaultActivityTransformersconstant. - Added
CreateFederationOptions.activityTransformersoption.
- Added
The
suppressErroroption of Activity Vocabulary APIs,traverseCollection()function, andContext.traverseCollection()method now suppresses errors occurred JSON-LD processing.WebFinger responses are now customizable. [#3]
- Added
ActorCallbackSetters.mapAlias()method. - Added
ActorAliasMappertype.
- Added
Added
Context.getNodeInfo()method. [#203]Added
sharesproperty toObjectclass in Activity Vocabulary API.- Added
Object.sharesIdproperty. - Added
Object.getShares()method. new Objectconstructor now acceptssharesoption.Object.clone()method now acceptssharesoption.
- Added
Added
likesproperty toObjectclass in Activity Vocabulary API.- Added
Object.likesIdproperty. - Added
Object.getLikes()method. new Objectconstructor now acceptslikesoption.Object.clone()method now acceptslikesoption.
- Added
Added
emojiReactionsproperty toObjectclass in Activity Vocabulary API.- Added
Object.emojiReactionsIdproperty - Added
Object.getEmojiReactions()method. new Objectconstructor now acceptsemojiReactionsoption.Object.clone()method now acceptsemojiReactionsoption.
- Added
Added
allowPrivateAddressoption toLookupWebFingerOptionsinterface.Added more log messages using the LogTape library. Currently the below logger categories are used:
["fedify", "compat", "transformers"]
Added
-t/--traverseoption to thefedify lookupsubcommand. [#195]Added
-S/--suppress-errorsoption to thefedify lookupsubcommand. [#195]
Version 1.3.24
Released on September 17, 2025.
- Improved the AT Protocol URI workaround to handle all DID methods and edge cases. The fix now properly percent-encodes any authority component in
at://URIs, supportingdid:web,did:key, and other DID methods beyond justdid:plc. Also handles URIs without path components correctly. [#436]
Version 1.3.23
Released on September 17, 2025.
- Added a temporary workaround for invalid AT Protocol URIs from BridgyFed. URIs like
at://did:plc:...that violate RFC 3986 URI syntax are now automatically URL-encoded toat://did%3Aplc%3A...to prevent parsing failures when processing bridged Bluesky content. [#436]
Version 1.3.22
Released on August 25, 2025.
- Fixed a bug where
verifyRequest()function threw aTypeErrorwhen verifying HTTP Signatures withcreatedorexpiresfields in theSignatureheader as defined in draft-cavage-http-signatures-12, causing500 Internal Server Errorresponses in inbox handlers. Now it correctly handles these fields as unquoted integers according to the specification.
Version 1.3.21
Released on August 25, 2025.
- Fixed a bug where ActivityPub Discovery failed to recognize XHTML self-closing
<link>tags. The HTML/XHTML parser now correctly handles whitespace before the self-closing slash (/>), improving compatibility with XHTML documents that follow the self-closing tag format.
Version 1.3.20
Released on August 8, 2025.
- Fixed a critical authentication bypass vulnerability in the inbox handler that allowed unauthenticated attackers to impersonate any ActivityPub actor. The vulnerability occurred because activities were processed before verifying that the HTTP Signatures key belonged to the claimed actor. Now authentication verification is performed before activity processing to prevent actor impersonation attacks. [CVE-2025-54888]
Version 1.3.19
Released on June 30, 2025.
- Fixed JSON-LD serialization of the
Question.votersproperty to correctly serialize as a plain number (e.g.,"votersCount": 123) instead of as a typed literal object (e.g.,"votersCount":{"type":"xsd:nonNegativeInteger", "@value":123}).
Version 1.3.18
Released on May 16, 2025.
Fixed a bug where inbox handler had thrown a
jsonld.SyntaxErrorwhich caused a500 Internal Server Errorwhen the received activity had an invalid JSON-LD syntax. Now it logs the error and responds with a400 Bad Requesterror instead. [#232]The
exportJwk()function now populates thealgproperty of a returnedJsonWebKeyobject with"Ed25519"if the input key is an Ed25519 key.
Version 1.3.17
Released on April 8, 2025.
Activity Vocabulary API became to accept RFC 3339 date-time strings without a timezone offset. This is not a bug fix, but improves interoperability with some implementations that do not include a timezone offset in their date-time strings including WordPress. [#226]
Added the following default context to
Undoclass:json{ "litepub": "http://litepub.social/ns#", "toot": "http://joinmastodon.org/ns#", "EmojiReact": "litepub:EmojiReact", "Emoji": "toot:Emoji" }
Version 1.3.16
Released on March 26, 2025.
Fixed a
TypeErrorthrown by the followers collection dispatcher when thebase-urlparameter was provided.Fixed a
TypeErrorthrown by thesignRequest()function on Node.js. [#222]
Version 1.3.15
Released on March 26, 2025.
Fixed a bug where the
totalItemsproperty ofOrderedCollectionobjects returned by followers collection dispatcher had been an incorrect value if abase-urlparameter was provided.Fixed a bug where the
idproperty ofOrderedCollectionandOrderedCollectionPageobjects returned by followers collection dispatcher had been an incorrect value if abase-urlparameter was provided.
Version 1.3.14
Released on March 20, 2025.
Fixed a bug of WebFinger handler where it had failed to match
acct:URIs with a host having a port number. [#218, #219 by Revath S Kumar]Fixed a server error thrown when an invalid URL was passed to the
base-urlparameter of the followers collection. [#217]
Version 1.3.13
Released on March 9, 2025.
- Fedify no more depends on
node:punycodemodule, which is deprecated in Node.js. Now it uses the built-innode:urlmodule instead. [#212, #214 by Fróði Karlsson]
Version 1.3.12
Released on February 28, 2025.
Made
fedify initto install @fedify/h3 0.1.2 which is compatible with Fedify 1.0.0 or later versions when--web-framework nitrooption is provided. [#213]Fixed a bug where
fedify inithad failed to initialize a project with the--runtime node --package-manager pnpm --web-framework nitrooption. [#213]
Version 1.3.11
Released on February 25, 2025.
Added the following default context to
Application,Group,Organization,Person, andServiceclasses:json{ "Emoji": "http://joinmastodon.org/ns#Emoji" }
Version 1.3.10
Released on February 22, 2025.
Version 1.3.9
Released on February 19, 2025.
Fixed a bug where the
fedify initcommand had failed to locate package managers on Windows. [#210]The
fedifycommand became aware ofFEDIFY_LOG_FILEenvironment variable to log messages to a file. If the variable is set, the command logs messages to the file specified by the variable.
Version 1.3.8
Released on February 10, 2025.
- Fixed a bug with nested object hydration in Activity Vocabulary API where deeply nested properties (like
Object.getAttribution()onActivity.getObject()) were't being properly hydrated duringtoJsonLd()calls. Previously, subsequent calls totoJsonLd()on nested objects could result in inconsistent JSON-LD output where nested objects remained as URLs instead of being fully expanded.
Version 1.3.7
Released on February 1, 2025.
- Updated LogTape to version 0.8.1, which fixes a bug where
lowestLeveloption had incorrectly behaved.
Version 1.3.6
Released on January 31, 2025.
- Fixed a bug where
getUserAgent()function had returned aUser-Agentstring with a wrong JavaScript runtime name on Node.js. [#203]
Version 1.3.5
Released on January 21, 2025.
Fixed a bug where
CreateFederationOptions.allowPrivateAddressoption had been ignored by theContext.lookupObject()method when it had taken a fediverse handle.The
lookupWebFinger()function became to silently returnnullwhen it fails to fetch the WebFinger document due to accessing a private network address, instead of throwing aUrlError.
Version 1.3.4
Released on January 21, 2025.
Fixed several security vulnerabilities of the
lookupWebFinger()function. [CVE-2025-23221]Fixed a security vulnerability where the
lookupWebFinger()function had followed the infinite number of redirects, which could lead to a denial of service attack. Now it follows up to 5 redirects.Fixed a security vulnerability where the
lookupWebFinger()function had followed the redirects to other than the HTTP/HTTPS schemes, which could lead to a security breach. Now it follows only the same scheme as the original request.Fixed a security vulnerability where the
lookupWebFinger()function had followed the redirects to the private network addresses, which could lead to a SSRF attack. Now it follows only the public network addresses.
Version 1.3.3
Released on December 30, 2024.
- The
fetchDocumentLoader()function now preloads the following JSON-LD context: https://gotosocial.org/ns.
Version 1.3.2
Released on December 18, 2024.
Version 1.3.1
Released on December 11, 2024.
- Fixed idempotence check in inbox listeners to ensure activities for different origins are processed correctly.
Version 1.3.0
Released on November 30, 2024.
MessageQueues now can be differently configured for incoming and outgoing activities.- Changed the type of
CreateFederationOptions.queueoption toFederationQueueOptions | MessageQueue | undefined(wasMessageQueue | undefined). - Added
FederationQueueOptionsinterface. - Added
FederationStartQueueOptions.queueoption.
- Changed the type of
Fedify now makes HTTP requests with the proper
User-Agentheader. [#162]- Added
getUserAgent()function. - Added
GetUserAgentOptionsinterface. - Added
getDocumentLoader()function. - Added
GetDocumentLoaderOptionsinterface. - The type of
getAuthenticatedDocumentLoader()function's second parameter becameGetAuthenticatedDocumentLoaderOptions | undefined(wasboolean | undefined). - Added
GetAuthenticatedDocumentLoaderOptionsinterface. - Deprecated
fetchDocumentLoader()function. - Added
LookupObjectOptions.userAgentoption. - Added the type of
getActorHandle()function's second parameter becameGetActorHandleOptions | undefined(wasNormalizeActorHandleOptions | undefined). - Added
GetActorHandleOptionsinterface. - Added the optional second parameter to
lookupWebFinger()function. - Added
LookupWebFingerOptionsinterface. - Added
GetNodeInfoOptions.userAgentoption. - Added
-u/--user-agentoption tofedify lookupsubcommand. - Added
-u/--user-agentoption tofedify nodesubcommand.
- Added
Fedify now caches unavailable keys of remote actors as well to avoid trying fetching the same unavailable key multiple times.
- The return type of the
KeyCache.get()method becamePromise<CryptographicKey | MultiKey | null | undefined>(wasPromise<CryptographicKey | MultiKey | null>). - The type of the
KeyCache.set()method's second parameter becameCryptographicKey | MultiKey | null(wasCryptographicKey | MultiKey). - Added
fetchKey()function. - Added
FetchKeyOptionsinterface. - Added
FetchKeyResultinterface.
- The return type of the
The
Routernow provide the matched route's URI template besides the name.- The return type of
Router.route()method becameRouterRouteResult | null(was{ name: string; values: Record<string, string> } | null). - Added
RouterRouteResultinterface.
- The return type of
Added
getTypeId()function.Context.sendActivity()andInboxContext.forwardActivity()methods now reject when they fail to enqueue the task. [#192]Fedify now allows you to manually route an
Activityto the corresponding inbox listener. [#193]- Added
Context.routeActivity()method. - Added
RouteActivityOptionsinterface.
- Added
Object.toJsonLd()without anyformatoption now returns its original JSON-LD object even if it not created fromObject.fromJsonLd()but it is returned from anotherObject'sget*()method.Fedify now supports OpenTelemetry for tracing. [#170]
Added
Context.tracerProviderproperty.Added
CreateFederationOptions.tracerProvideroption.Added
LookupWebFingerOptions.tracerProvideroption.Added
LookupObjectOptions.tracerProvideroption.Added
GetActorHandleOptions.tracerProvideroption.Added
VerifyRequestOptions.tracerProvideroption.Added
SignRequestOptionsinterface.Added the optional fourth parameter to
signRequest()function.Added
VerifyProofOptions.tracerProvideroption.Added
VerifyObjectOptions.tracerProvideroption.Added
SignObjectOptions.tracerProvideroption.Added
VerifySignatureOptions.tracerProvideroption.Added
VerifyJsonLdOptions.tracerProvideroption.Added
SignJsonLdOptions.tracerProvideroption.Added
DoesActorOwnKeyOptions.tracerProvideroption.Added
GetKeyOwnerOptions.tracerProvideroption.Added
tracerProvideroption to the following Activity Vocabulary APIs:- The second parameters of constructors.
- The second parameters of
fromJsonLd()static methods. - The second parameters of
get*()methods.
Added
@fedify/fedify/x/sveltekitmodule for integrating with SvelteKit hook. [#171, #183 by Jiyu Park]- Added
fedifyHook()function.
- Added
The scaffold project generated by
fedify initcommand now enables tracing data into log messages.Let the
fedify lookupcommand take multiple arguments. [#173, #186 by PGD]
Version 1.2.27
Released on September 17, 2025.
- Improved the AT Protocol URI workaround to handle all DID methods and edge cases. The fix now properly percent-encodes any authority component in
at://URIs, supportingdid:web,did:key, and other DID methods beyond justdid:plc. Also handles URIs without path components correctly. [#436]
Version 1.2.26
Released on September 17, 2025.
- Added a temporary workaround for invalid AT Protocol URIs from BridgyFed. URIs like
at://did:plc:...that violate RFC 3986 URI syntax are now automatically URL-encoded toat://did%3Aplc%3A...to prevent parsing failures when processing bridged Bluesky content. [#436]
Version 1.2.25
Released on August 25, 2025.
- Fixed a bug where
verifyRequest()function threw aTypeErrorwhen verifying HTTP Signatures withcreatedorexpiresfields in theSignatureheader as defined in draft-cavage-http-signatures-12, causing500 Internal Server Errorresponses in inbox handlers. Now it correctly handles these fields as unquoted integers according to the specification.
Version 1.2.24
Released on August 25, 2025.
- Fixed a bug where ActivityPub Discovery failed to recognize XHTML self-closing
<link>tags. The HTML/XHTML parser now correctly handles whitespace before the self-closing slash (/>), improving compatibility with XHTML documents that follow the self-closing tag format.
Version 1.2.23
Released on June 30, 2025.
- Fixed JSON-LD serialization of the
Question.votersproperty to correctly serialize as a plain number (e.g.,"votersCount": 123) instead of as a typed literal object (e.g.,"votersCount":{"type":"xsd:nonNegativeInteger", "@value":123}).
Version 1.2.22
Released on May 16, 2025.
Fixed a bug where inbox handler had thrown a
jsonld.SyntaxErrorwhich caused a500 Internal Server Errorwhen the received activity had an invalid JSON-LD syntax. Now it logs the error and responds with a400 Bad Requesterror instead. [#232]The
exportJwk()function now populates thealgproperty of a returnedJsonWebKeyobject with"Ed25519"if the input key is an Ed25519 key.
Version 1.2.21
Released on April 8, 2025.
Activity Vocabulary API became to accept RFC 3339 date-time strings without a timezone offset. This is not a bug fix, but improves interoperability with some implementations that do not include a timezone offset in their date-time strings including WordPress. [#226]
Added the following default context to
Undoclass:json{ "litepub": "http://litepub.social/ns#", "toot": "http://joinmastodon.org/ns#", "EmojiReact": "litepub:EmojiReact", "Emoji": "toot:Emoji" }
Version 1.2.20
Released on March 26, 2025.
- Fixed a
TypeErrorthrown by the followers collection dispatcher when thebase-urlparameter was provided. - Fixed a
TypeErrorthrown by thesignRequest()function on Node.js. [#222]
Version 1.2.19
Released on March 26, 2025.
Fixed a bug where the
totalItemsproperty ofOrderedCollectionobjects returned by followers collection dispatcher had been an incorrect value if abase-urlparameter was provided.Fixed a bug where the
idproperty ofOrderedCollectionandOrderedCollectionPageobjects returned by followers collection dispatcher had been an incorrect value if abase-urlparameter was provided.
Version 1.2.18
Released on March 20, 2025.
Fixed a bug of WebFinger handler where it had failed to match
acct:URIs with a host having a port number. [#218, #219 by Revath S Kumar]Fixed a server error thrown when an invalid URL was passed to the
base-urlparameter of the followers collection. [#217]
Version 1.2.17
Released on March 9, 2025.
- Fedify no more depends on
node:punycodemodule, which is deprecated in Node.js. Now it uses the built-innode:urlmodule instead. [#212, #214 by Fróði Karlsson]
Version 1.2.16
Released on February 28, 2025.
Made
fedify initto install @fedify/h3 0.1.2 which is compatible with Fedify 1.0.0 or later versions when--web-framework nitrooption is provided. [#213]Fixed a bug where
fedify inithad failed to initialize a project with the--runtime node --package-manager pnpm --web-framework nitrooption. [#213]Made
fedify initto install @logtape/logtape 0.7.2 which is the version used in Fedify 1.2.x.
Version 1.2.15
Released on February 25, 2025.
Added the following default context to
Application,Group,Organization,Person, andServiceclasses:json{ "Emoji": "http://joinmastodon.org/ns#Emoji" }
Version 1.2.14
Released on February 22, 2025.
Version 1.2.13
Released on February 19, 2025.
Fixed a bug where the
fedify initcommand had failed to locate package managers on Windows. [#210]The
fedifycommand became aware ofFEDIFY_LOG_FILEenvironment variable to log messages to a file. If the variable is set, the command logs messages to the file specified by the variable.
Version 1.2.12
Released on February 10, 2025.
- Fixed a bug with nested object hydration in Activity Vocabulary API where deeply nested properties (like
Object.getAttribution()onActivity.getObject()) were't being properly hydrated duringtoJsonLd()calls. Previously, subsequent calls totoJsonLd()on nested objects could result in inconsistent JSON-LD output where nested objects remained as URLs instead of being fully expanded.
Version 1.2.11
Released on January 21, 2025.
Fixed several security vulnerabilities of the
lookupWebFinger()function. [CVE-2025-23221]Fixed a security vulnerability where the
lookupWebFinger()function had followed the infinite number of redirects, which could lead to a denial of service attack. Now it follows up to 5 redirects.Fixed a security vulnerability where the
lookupWebFinger()function had followed the redirects to other than the HTTP/HTTPS schemes, which could lead to a security breach. Now it follows only the same scheme as the original request.Fixed a security vulnerability where the
lookupWebFinger()function had followed the redirects to the private network addresses, which could lead to a SSRF attack. Now it follows only the public network addresses.
Version 1.2.10
Released on December 18, 2024.
Version 1.2.9
Released on December 11, 2024.
- Fixed idempotence check in inbox listeners to ensure activities for different origins are processed correctly.
Version 1.2.8
Released on November 23, 2024.
- Fixed warnings from the
fedify inboxcommand. [#177, #181 by WinterHana] - Fixed
ShikiErroron thefedify inboxcommand rendering web interface. [#178, #185 by Heesun Jung] - Fixed text overflow of the
fedify inboxcommand's web log view. [#180, #188 by Lim Kyunghee]
Version 1.2.7
Released on November 22, 2024.
- Fixed a bug where
lookupWebFinger()function had thrown aTypeErrorwhen the .well-known/webfinger redirects to a relative URI. [#166]
Version 1.2.6
Released on November 19, 2024.
Fix a bug where
Actor'sinboxandoutboxproperties had not been able to be set to anOrderedCollectionPageobject, even though it is a subtype ofOrderedCollectionaccording to Activity Vocabulary specification. [#165]- The type of
Application()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Application.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Application.getInbox()andApplication.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Group()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Group.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Group.getInbox()andGroup.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Organization()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Organization.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Organization.getInbox()andOrganization.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Person()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Person.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Person.getInbox()andPerson.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Service()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Service.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Service.getInbox()andService.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null).
- The type of
Version 1.2.5
Released on November 14, 2024.
Suppressed a
TypeErrorwith a messageunusable
due to Node.js's mysterious behavior. [#159]- The
verifyRequest()function no longer throws aTypeErrorwhen a givenRequestobject's body is already consumed or locked. Instead, it logs an error message to the["fedify", "sig", "http"]logger category and returnsnull. - The
Federation.fetch()method no longer throws aTypeErrorwhen a givenRequestobject's body is already consumed or locked. Instead, it logs an error message to the["fedify", "federation", "inbox"]logger category and responds with a500 Internal Server Error.
- The
Version 1.2.4
Released on November 12, 2024.
Fixed a bug where default document loaders had thrown a
TypeErrorwith a messageBody is unusable: Body has already been read
orBody already consumed
when the content type of the response was an HTML document and there's no link to a JSON-LD document.Fixed a bug where
verifySignature()andverifyJsonLd()functions sometimes had thrown ajsonld.ValidationErrorerror. Now such errors are caught and logged as warnings, and the signature to verify is considered as invalid.
Version 1.2.3
Released on November 6, 2024.
- The
fedify nodesubcommand now can recognize multiple values of therelattribute in the<link>HTML elements.
Version 1.2.2
Released on November 1, 2024.
Handle connection errors (rather than HTTP errors) in the
Context.sendActivity()method.Support the
fedifycommand on Windows on ARM64 via x64 emulation. [#160]
Version 1.2.1
Released on October 31, 2024.
- Now
fedify nodecommand can render the node's favicon withimage/vnd.microsoft.iconorimage/x-iconformat.
Version 1.2.0
Released on October 31, 2024.
Added
InboxContext.recipientproperty.Added NodeInfo client functions.
- Added
getNodeInfo()function. - Added
GetNodeInfoOptionsinterface. - Added
parseNodeInfo()function. - Added
ParseNodeInfoOptionsinterface.
- Added
Re-exported Semantic Versioning-related types and functions:
- Added
SemVertype. - Added
formatSemVer()function. - Added
parseSemVer()function.
- Added
Added
followedMessageproperty toActortype in Activity Vocabulary API.- Added
Application.followedMessageproperty. new Applicationconstructor now acceptsfollowedMessageoption.Application.clone()method now acceptsfollowedMessageoption.- Added
Group.followedMessageproperty. new Groupconstructor now acceptsfollowedMessageoption.Group.clone()method now acceptsfollowedMessageoption.- Added
Organization.followedMessageproperty. new Organizationconstructor now acceptsfollowedMessageoption.Organization.clone()method now acceptsfollowedMessageoption.- Added
Person.followedMessageproperty. new Personconstructor now acceptsfollowedMessageoption.Person.clone()method now acceptsfollowedMessageoption.- Added
Service.followedMessageproperty. new Serviceconstructor now acceptsfollowedMessageoption.Service.clone()method now acceptsfollowedMessageoption.
- Added
Log messages now can be traced using LogTape's implicit contexts. [#118]
Added options for an AMQP driver to
fedify initcommand.- Added
amqpvalue to the-q/--message-queueoption of thefedify initcommand.
- Added
Added
fedify nodesubcommand.Added more log messages using the LogTape library. Currently the below logger categories are used:
["fedify", "nodeinfo", "client"]
Version 1.1.27
Released on September 17, 2025.
- Improved the AT Protocol URI workaround to handle all DID methods and edge cases. The fix now properly percent-encodes any authority component in
at://URIs, supportingdid:web,did:key, and other DID methods beyond justdid:plc. Also handles URIs without path components correctly. [#436]
Version 1.1.26
Released on September 17, 2025.
- Added a temporary workaround for invalid AT Protocol URIs from BridgyFed. URIs like
at://did:plc:...that violate RFC 3986 URI syntax are now automatically URL-encoded toat://did%3Aplc%3A...to prevent parsing failures when processing bridged Bluesky content. [#436]
Version 1.1.25
Released on August 25, 2025.
- Fixed a bug where
verifyRequest()function threw aTypeErrorwhen verifying HTTP Signatures withcreatedorexpiresfields in theSignatureheader as defined in draft-cavage-http-signatures-12, causing500 Internal Server Errorresponses in inbox handlers. Now it correctly handles these fields as unquoted integers according to the specification.
Version 1.1.24
Released on August 25, 2025.
- Fixed a bug where ActivityPub Discovery failed to recognize XHTML self-closing
<link>tags. The HTML/XHTML parser now correctly handles whitespace before the self-closing slash (/>), improving compatibility with XHTML documents that follow the self-closing tag format.
Version 1.1.23
Released on June 30, 2025.
- Fixed JSON-LD serialization of the
Question.votersproperty to correctly serialize as a plain number (e.g.,"votersCount": 123) instead of as a typed literal object (e.g.,"votersCount":{"type":"xsd:nonNegativeInteger", "@value":123}).
Version 1.1.22
Released on May 16, 2025.
Fixed a bug where inbox handler had thrown a
jsonld.SyntaxErrorwhich caused a500 Internal Server Errorwhen the received activity had an invalid JSON-LD syntax. Now it logs the error and responds with a400 Bad Requesterror instead. [#232]The
exportJwk()function now populates thealgproperty of a returnedJsonWebKeyobject with"Ed25519"if the input key is an Ed25519 key.
Version 1.1.21
Released on April 8, 2025.
Activity Vocabulary API became to accept RFC 3339 date-time strings without a timezone offset. This is not a bug fix, but improves interoperability with some implementations that do not include a timezone offset in their date-time strings including WordPress. [#226]
Added the following default context to
Undoclass:json{ "litepub": "http://litepub.social/ns#", "toot": "http://joinmastodon.org/ns#", "EmojiReact": "litepub:EmojiReact", "Emoji": "toot:Emoji" }
Version 1.1.20
Released on March 26, 2025.
- Fixed a
TypeErrorthrown by the followers collection dispatcher when thebase-urlparameter was provided. - Fixed a
TypeErrorthrown by thesignRequest()function on Node.js. [#222]
Version 1.1.19
Released on March 26, 2025.
Fixed a bug where the
totalItemsproperty ofOrderedCollectionobjects returned by followers collection dispatcher had been an incorrect value if abase-urlparameter was provided.Fixed a bug where the
idproperty ofOrderedCollectionandOrderedCollectionPageobjects returned by followers collection dispatcher had been an incorrect value if abase-urlparameter was provided.
Version 1.1.18
Released on March 20, 2025.
Fixed a bug of WebFinger handler where it had failed to match
acct:URIs with a host having a port number. [#218, #219 by Revath S Kumar]Fixed a server error thrown when an invalid URL was passed to the
base-urlparameter of the followers collection. [#217]
Version 1.1.17
Released on March 9, 2025.
- Fedify no more depends on
node:punycodemodule, which is deprecated in Node.js. Now it uses the built-innode:urlmodule instead. [#212, #214 by Fróði Karlsson]
Version 1.1.16
Released on February 28, 2025.
Made
fedify initto install @fedify/h3 0.1.2 which is compatible with Fedify 1.0.0 or later versions when--web-framework nitrooption is provided. [#213]Fixed a bug where
fedify inithad failed to initialize a project with the--runtime node --package-manager pnpm --web-framework nitrooption. [#213]Made
fedify initto install @logtape/logtape 0.6.5 which is the version used in Fedify 1.1.x.
Version 1.1.15
Released on February 25, 2025.
Added the following default context to
Application,Group,Organization,Person, andServiceclasses:json{ "Emoji": "http://joinmastodon.org/ns#Emoji" }
Version 1.1.14
Released on February 22, 2025.
Version 1.1.13
Released on February 19, 2025.
Fixed a bug where the
fedify initcommand had failed to locate package managers on Windows. [#210]The
fedifycommand became aware ofFEDIFY_LOG_FILEenvironment variable to log messages to a file. If the variable is set, the command logs messages to the file specified by the variable.
Version 1.1.12
Released on February 10, 2025.
- Fixed a bug with nested object hydration in Activity Vocabulary API where deeply nested properties (like
Object.getAttribution()onActivity.getObject()) were't being properly hydrated duringtoJsonLd()calls. Previously, subsequent calls totoJsonLd()on nested objects could result in inconsistent JSON-LD output where nested objects remained as URLs instead of being fully expanded.
Version 1.1.11
Released on January 21, 2025.
Fixed several security vulnerabilities of the
lookupWebFinger()function. [CVE-2025-23221]Fixed a security vulnerability where the
lookupWebFinger()function had followed the infinite number of redirects, which could lead to a denial of service attack. Now it follows up to 5 redirects.Fixed a security vulnerability where the
lookupWebFinger()function had followed the redirects to other than the HTTP/HTTPS schemes, which could lead to a security breach. Now it follows only the same scheme as the original request.Fixed a security vulnerability where the
lookupWebFinger()function had followed the redirects to the private network addresses, which could lead to a SSRF attack. Now it follows only the public network addresses.
Version 1.1.10
Released on December 18, 2024.
Version 1.1.9
Released on December 11, 2024.
- Fixed idempotence check in inbox listeners to ensure activities for different origins are processed correctly.
Version 1.1.8
Released on November 23, 2024.
- Fixed
ShikiErroron thefedify inboxcommand rendering web interface. [#178, #185 by Heesun Jung] - Fixed text overflow of the
fedify inboxcommand's web log view. [#180, #188 by Lim Kyunghee]
Version 1.1.7
Released on November 22, 2024.
- Fixed a bug where
lookupWebFinger()function had thrown aTypeErrorwhen the .well-known/webfinger redirects to a relative URI. [#166]
Version 1.1.6
Released on November 19, 2024.
Fix a bug where
Actor'sinboxandoutboxproperties had not been able to be set to anOrderedCollectionPageobject, even though it is a subtype ofOrderedCollectionaccording to Activity Vocabulary specification. [#165]- The type of
Application()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Application.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Application.getInbox()andApplication.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Group()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Group.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Group.getInbox()andGroup.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Organization()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Organization.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Organization.getInbox()andOrganization.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Person()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Person.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Person.getInbox()andPerson.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Service()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Service.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Service.getInbox()andService.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null).
- The type of
Version 1.1.5
Released on November 14, 2024.
Suppressed a
TypeErrorwith a messageunusable
due to Node.js's mysterious behavior. [#159]- The
verifyRequest()function no longer throws aTypeErrorwhen a givenRequestobject's body is already consumed or locked. Instead, it logs an error message to the["fedify", "sig", "http"]logger category and returnsnull. - The
Federation.fetch()method no longer throws aTypeErrorwhen a givenRequestobject's body is already consumed or locked. Instead, it logs an error message to the["fedify", "federation", "inbox"]logger category and responds with a500 Internal Server Error.
- The
Version 1.1.4
Released on November 12, 2024.
Fixed a bug where default document loaders had thrown a
TypeErrorwith a messageBody is unusable: Body has already been read
orBody already consumed
when the content type of the response was an HTML document and there's no link to a JSON-LD document.Fixed a bug where
verifySignature()andverifyJsonLd()functions sometimes had thrown ajsonld.ValidationErrorerror. Now such errors are caught and logged as warnings, and the signature to verify is considered as invalid.
Version 1.1.3
Released on October 31, 2024.
- Fixed a bug where
fetchDocumentLoader()function had disallowed redirecting to a private network address when the second parameter, abooleanvalue to allow private network addresses, wastrue.
Version 1.1.2
Released on October 27, 2024.
- Fixed default document loaders' incorrect handling of relative URIs in
Linkheaders withrel=alternate. [#155 by Emelia Smith] - The
fetchDocumentLoader()function now preloads the following JSON-LD context: http://schema.org/.
Version 1.1.1
Released on October 23, 2024.
- The
fetchDocumentLoader()function now preloads the following JSON-LD context: https://purl.archive.org/socialweb/webfinger.
Version 1.1.0
Released on October 20, 2024.
Added utility functions for traversing remote collections. [#150]
- Added
Context.traverseCollection()method. - Added
traverseCollection()function. - Added
TraverseCollectionOptionsinterface.
- Added
Added
EmojiReactclass to Activity Vocabulary API. [FEP-c0e0]Added
successorproperty to theActortypes in the Activity Vocabulary API.- Added
Application.getSuccessor()method. new Applicationconstructor now acceptssuccessoroption.Application.clone()method now acceptssuccessoroption.- Added
Group.getSuccessor()method. new Groupconstructor now acceptssuccessoroption.Group.clone()method now acceptssuccessoroption.- Added
Organization.getSuccessor()method. new Organizationconstructor now acceptssuccessoroption.Organization.clone()method now acceptssuccessoroption.- Added
Person.getSuccessor()method. new Personconstructor now acceptssuccessoroption.Person.clone()method now acceptssuccessoroption.- Added
Service.getSuccessor()method. new Serviceconstructor now acceptssuccessoroption.Service.clone()method now acceptssuccessoroption.
- Added
Added
DidServiceclass to Activity Vocabulary API. [FEP-9091, #146]Added
Exportclass to Activity Vocabulary API. [FEP-9091, #146]Added
serviceproperty to theActortypes in the Activity Vocabulary API. [FEP-9091, #146]- Added
Application.getService()method. - Added
Application.getServices()method. new Applicationconstructor now acceptsserviceoption.new Applicationconstructor now acceptsservicesoption.Application.clone()method now acceptsserviceoption.Application.clone()method now acceptsservicesoption.- Added
Group.getService()method. - Added
Group.getServices()method. new Groupconstructor now acceptsserviceoption.new Groupconstructor now acceptsservicesoption.Group.clone()method now acceptsserviceoption.Group.clone()method now acceptsservicesoption.- Added
Organization.getService()method. - Added
Organization.getServices()method. new Organizationconstructor now acceptsserviceoption.new Organizationconstructor now acceptsservicesoption.Organization.clone()method now acceptsserviceoption.Organization.clone()method now acceptsservicesoption.- Added
Person.getService()method. - Added
Person.getServices()method. new Personconstructor now acceptsserviceoption.new Personconstructor now acceptsservicesoption.Person.clone()method now acceptsserviceoption.Person.clone()method now acceptsservicesoption.- Added
Service.getService()method. - Added
Service.getServices()method. new Serviceconstructor now acceptsserviceoption.new Serviceconstructor now acceptsservicesoption.Service.clone()method now acceptsserviceoption.Service.clone()method now acceptsservicesoption.
- Added
The default time window for verifying HTTP Signatures of incoming requests is now an hour (was a minute). This new default window is according to the ActivityPub and HTTP Signatures document.
The default value of
VerifyRequestOptions.timeWindowoption became{ hours: 1 }(was{ minutes: 1 }).The default value of
CreateFederationOptions.signatureTimeWindowoption became{ hours: 1 }(was{ minutes: 1 }).The type of
VerifyRequestOptions.timeWindowproperty becameTemporal.Duration | Temporal.DurationLike | false(wasTemporal.DurationLike | false).The type of
CreateFederationOptions.signatureTimeWindowproperty becameTemporal.Duration | Temporal.DurationLike | false(wasTemporal.DurationLike | false).
In the
fedify inboxcommand's web interface, the Raw Activity tab is added to show the raw JSON object of the received activity.
Version 1.0.30
Released on September 17, 2025.
- Improved the AT Protocol URI workaround to handle all DID methods and edge cases. The fix now properly percent-encodes any authority component in
at://URIs, supportingdid:web,did:key, and other DID methods beyond justdid:plc. Also handles URIs without path components correctly. [#436]
Version 1.0.29
Released on September 17, 2025.
- Added a temporary workaround for invalid AT Protocol URIs from BridgyFed. URIs like
at://did:plc:...that violate RFC 3986 URI syntax are now automatically URL-encoded toat://did%3Aplc%3A...to prevent parsing failures when processing bridged Bluesky content. [#436]
Version 1.0.28
Released on August 25, 2025.
- Fixed a bug where
verifyRequest()function threw aTypeErrorwhen verifying HTTP Signatures withcreatedorexpiresfields in theSignatureheader as defined in draft-cavage-http-signatures-12, causing500 Internal Server Errorresponses in inbox handlers. Now it correctly handles these fields as unquoted integers according to the specification.
Version 1.0.27
Released on August 25, 2025.
- Fixed a bug where ActivityPub Discovery failed to recognize XHTML self-closing
<link>tags. The HTML/XHTML parser now correctly handles whitespace before the self-closing slash (/>), improving compatibility with XHTML documents that follow the self-closing tag format.
Version 1.0.26
Released on June 30, 2025.
- Fixed JSON-LD serialization of the
Question.votersproperty to correctly serialize as a plain number (e.g.,"votersCount": 123) instead of as a typed literal object (e.g.,"votersCount":{"type":"xsd:nonNegativeInteger", "@value":123}).
Version 1.0.25
Released on May 16, 2025.
Fixed a bug where inbox handler had thrown a
jsonld.SyntaxErrorwhich caused a500 Internal Server Errorwhen the received activity had an invalid JSON-LD syntax. Now it logs the error and responds with a400 Bad Requesterror instead. [#232]The
exportJwk()function now populates thealgproperty of a returnedJsonWebKeyobject with"Ed25519"if the input key is an Ed25519 key.
Version 1.0.24
Released on April 8, 2025.
- Activity Vocabulary API became to accept RFC 3339 date-time strings without a timezone offset. This is not a bug fix, but improves interoperability with some implementations that do not include a timezone offset in their date-time strings including WordPress. [#226]
Version 1.0.23
Released on March 26, 2025.
- Fixed a
TypeErrorthrown by the followers collection dispatcher when thebase-urlparameter was provided. - Fixed a
TypeErrorthrown by thesignRequest()function on Node.js. [#222]
Version 1.0.22
Released on March 26, 2025.
Fixed a bug where the
totalItemsproperty ofOrderedCollectionobjects returned by followers collection dispatcher had been an incorrect value if abase-urlparameter was provided.Fixed a bug where the
idproperty ofOrderedCollectionandOrderedCollectionPageobjects returned by followers collection dispatcher had been an incorrect value if abase-urlparameter was provided.
Version 1.0.21
Released on March 20, 2025.
Fixed a bug of WebFinger handler where it had failed to match
acct:URIs with a host having a port number. [#218, #219 by Revath S Kumar]Fixed a server error thrown when an invalid URL was passed to the
base-urlparameter of the followers collection. [#217]
Version 1.0.20
Released on March 9, 2025.
- Fedify no more depends on
node:punycodemodule, which is deprecated in Node.js. Now it uses the built-innode:urlmodule instead. [#212, #214 by Fróði Karlsson]
Version 1.0.19
Released on February 28, 2025.
Made
fedify initto install @fedify/h3 0.1.2 which is compatible with Fedify 1.0.0 or later versions when--web-framework nitrooption is provided. [#213]Fixed a bug where
fedify inithad failed to initialize a project with the--runtime node --package-manager pnpm --web-framework nitrooption. [#213]Made
fedify initto install @logtape/logtape 0.6.5 which is the version used in Fedify 1.0.x.
Version 1.0.18
Released on February 25, 2025.
Added the following default context to
Application,Group,Organization,Person, andServiceclasses:json{ "Emoji": "http://joinmastodon.org/ns#Emoji" }
Version 1.0.17
Released on February 22, 2025.
Version 1.0.16
Released on February 19, 2025.
Fixed a bug where the
fedify initcommand had failed to locate package managers on Windows. [#210]The
fedifycommand became aware ofFEDIFY_LOG_FILEenvironment variable to log messages to a file. If the variable is set, the command logs messages to the file specified by the variable.
Version 1.0.15
Released on February 10, 2025.
- Fixed a bug with nested object hydration in Activity Vocabulary API where deeply nested properties (like
Object.getAttribution()onActivity.getObject()) were't being properly hydrated duringtoJsonLd()calls. Previously, subsequent calls totoJsonLd()on nested objects could result in inconsistent JSON-LD output where nested objects remained as URLs instead of being fully expanded.
Version 1.0.14
Released on January 21, 2025.
Fixed several security vulnerabilities of the
lookupWebFinger()function. [CVE-2025-23221]Fixed a security vulnerability where the
lookupWebFinger()function had followed the infinite number of redirects, which could lead to a denial of service attack. Now it follows up to 5 redirects.Fixed a security vulnerability where the
lookupWebFinger()function had followed the redirects to other than the HTTP/HTTPS schemes, which could lead to a security breach. Now it follows only the same scheme as the original request.Fixed a security vulnerability where the
lookupWebFinger()function had followed the redirects to the private network addresses, which could lead to a SSRF attack. Now it follows only the public network addresses.
Version 1.0.13
Released on December 18, 2024.
Version 1.0.12
Released on December 11, 2024.
- Fixed idempotence check in inbox listeners to ensure activities for different origins are processed correctly.
Version 1.0.11
Released on November 22, 2024.
- Fixed a bug where
lookupWebFinger()function had thrown aTypeErrorwhen the .well-known/webfinger redirects to a relative URI. [#166]
Version 1.0.10
Released on November 19, 2024.
Fix a bug where
Actor'sinboxandoutboxproperties had not been able to be set to anOrderedCollectionPageobject, even though it is a subtype ofOrderedCollectionaccording to Activity Vocabulary specification. [#165]- The type of
Application()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Application.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Application.getInbox()andApplication.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Group()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Group.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Group.getInbox()andGroup.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Organization()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Organization.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Organization.getInbox()andOrganization.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Person()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Person.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Person.getInbox()andPerson.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Service()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Service.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Service.getInbox()andService.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null).
- The type of
Version 1.0.9
Released on November 14, 2024.
Suppressed a
TypeErrorwith a messageunusable
due to Node.js's mysterious behavior. [#159]- The
verifyRequest()function no longer throws aTypeErrorwhen a givenRequestobject's body is already consumed or locked. Instead, it logs an error message to the["fedify", "sig", "http"]logger category and returnsnull. - The
Federation.fetch()method no longer throws aTypeErrorwhen a givenRequestobject's body is already consumed or locked. Instead, it logs an error message to the["fedify", "federation", "inbox"]logger category and responds with a500 Internal Server Error.
- The
Version 1.0.8
Released on November 12, 2024.
Fixed a bug where default document loaders had thrown a
TypeErrorwith a messageBody is unusable: Body has already been read
orBody already consumed
when the content type of the response was an HTML document and there's no link to a JSON-LD document.Fixed a bug where
verifySignature()andverifyJsonLd()functions sometimes had thrown ajsonld.ValidationErrorerror. Now such errors are caught and logged as warnings, and the signature to verify is considered as invalid.
Version 1.0.7
Released on October 31, 2024.
- Fixed a bug where
fetchDocumentLoader()function had disallowed redirecting to a private network address when the second parameter, abooleanvalue to allow private network addresses, wastrue.
Version 1.0.6
Released on October 27, 2024.
- Fixed default document loaders' incorrect handling of relative URIs in
Linkheaders withrel=alternate. [#155 by Emelia Smith] - The
fetchDocumentLoader()function now preloads the following JSON-LD context: http://schema.org/.
Version 1.0.5
Released on October 23, 2024.
- The
fetchDocumentLoader()function now preloads the following JSON-LD context: https://purl.archive.org/socialweb/webfinger.
Version 1.0.4
Released on October 17, 2024.
Fixed a bug where
Actor.aliasIdandActor.aliasIdsproperties had been represented asas:alsoKnownAsproperty instead ofalsoKnownAsproperty in compacted JSON-LD objects.Improved compatibility with Bridgy Fed for Bluesky where it puts an invalid URI with the format
at://...in thealsoKnownAsproperty.
Version 1.0.3
Released on October 17, 2024.
- Improved compatibility with some implementations (e.g., Nexkey) where some
CryptographicKeyobjects are incorrectly typed in JSON-LD objects.
Version 1.0.2
Released on September 27, 2024.
Fixed a bug of
Object.toJsonLd()method where it had incorrectly compacted thenameproperty when it was not a language map.The
Delete(Application)activities sent by thefedify inboxcommand now embed the entire actor object instead of just the actor's URI so that the peers can verify the actor's signature without fetching the actor object.
Version 1.0.1
Released on September 26, 2024.
Fixed deprecation messages related to the
{handle}variable in URL templates; they had had wrong placeholders in the message templates.Fixed a bug of
Object.toJsonLd()method where it had not fall back to the proper compact form when the heuristic compact form was not available.
Version 1.0.0
Released on September 26, 2024.
The term
handlefor dispatching actors is deprecated in favor ofidentifier.The URI template for the following methods now accepts variable
{identifier}instead of{handle}:Federation.setActorDispatcher()Federation.setInboxDispatcher()Federation.setOutboxDispatcher()Federation.setFollowingDispatcher()Federation.setFollowersDispatcher()Federation.setLikedDispatcher()Federation.setFeaturedDispatcher()Federation.setFeaturedTagsDispatcher()Federation.setInboxListeners()
The
{handle}variable is deprecated, and it will be removed in the future.The type of
Federation.setActorDispatcher()method's first parameter became${string}{identifier}${string}` | `${string}{handle}${string}(was${string}{handle}${string}).The type of
Federation.setInboxDispatcher()method's first parameter became${string}{identifier}${string}` | `${string}{handle}${string}(was${string}{handle}${string}).The type of
Federation.setOutboxDispatcher()method's first parameter became${string}{identifier}${string}` | `${string}{handle}${string}(was${string}{handle}${string}).The type of
Federation.setFollowingDispatcher()method's first parameter became${string}{identifier}${string}` | `${string}{handle}${string}(was${string}{handle}${string}).The type of
Federation.setFollowersDispatcher()method's first parameter became${string}{identifier}${string}` | `${string}{handle}${string}(was${string}{handle}${string}).The type of
Federation.setLikedDispatcher()method's first parameter became${string}{identifier}${string}` | `${string}{handle}${string}(was${string}{handle}${string}).The type of
Federation.setFeaturedDispatcher()method's first parameter became${string}{identifier}${string}` | `${string}{handle}${string}(was${string}{handle}${string}).The type of
Federation.setFeaturedTagsDispatcher()method's first parameter became${string}{identifier}${string}` | `${string}{handle}${string}(was${string}{handle}${string}).The type of
Federation.setInboxListeners()method's first parameter became${string}{identifier}${string}` | `${string}{handle}${string}(was${string}{handle}${string}).The type of
Context.getDocumentLoader()method's first parameter became{ identifier: string } | { username: string } | { handle: string } | { keyId: URL; privateKey: CryptoKey }(was{ handle: string } | { keyId: URL; privateKey: CryptoKey }).Passing
{ handle: string }toContext.getDocumentLoader()method is deprecated in favor of{ username: string }.The type of
Context.sendActivity()method's first parameter becameSenderKeyPair | SenderKeyPair[] | { identifier: string } | { username: string } | { handle: string }(wasSenderKeyPair | SenderKeyPair[] | { handle: string }).All properties of
ParseUriResulttype became readonly.Added
identifierproperties next tohandleproperties inParseUriResulttype.The
handleproperties ofParseUriResulttype are deprecated in favor ofidentifierproperties.The return type of
SharedInboxKeyDispatchercallback type becameSenderKeyPair | { identifier: string } | { username: string } | { handle: string } | null | Promise<SenderKeyPair | { identifier: string } | { username: string } | { handle: string } | null>(wasSenderKeyPair | { handle: string } | null | Promise<SenderKeyPair | { handle: string } | null>).
Fedify now supports Linked Data Signatures, which is outdated but still widely used in the fediverse.
- A
Federationobject became to verify an activity's Linked Data Signatures if it has one. If Linked Data Signatures are verified, Object Integrity Proofs and HTTP Signatures are not verified. Context.sendActivity()method became to sign an activity with Linked Data Signatures if there is at least one RSA-PKCS#1-v1.5 key pair.- Added
Signatureinterface. - Added
signJsonLd()function. - Added
SignJsonLdOptionsinterface. - Added
createSignature()function. - Added
CreateSignatureOptionsinterface. - Added
verifyJsonLd()function. - Added
VerifyJsonLdOptionsinterface. - Added
verifySignature()function. - Added
VerifySignatureOptionsinterface. - Added
attachSignature()function. - Added
detachSignature()function.
- A
In inbox listeners, a received activity now can be forwarded to another server. [#137]
- Added
InboxContextinterface. - Added
ForwardActivityOptionsinterface. - The first parameter of the
InboxListenercallback type becameInboxContext(wasContext).
- Added
Added
catproperty toActortype in Activity Vocabulary API.- Added
Application.catproperty. new Applicationconstructor now acceptscatoption.Application.clone()method now acceptscatoption.- Added
Group.catproperty. new Groupconstructor now acceptscatoption.Group.clone()method now acceptscatoption.- Added
Organization.catproperty. new Organizationconstructor now acceptscatoption.Organization.clone()method now acceptscatoption.- Added
Person.catproperty. new Personconstructor now acceptscatoption.Person.clone()method now acceptscatoption.- Added
Service.catproperty. new Serviceconstructor now acceptscatoption.Service.clone()method now acceptscatoption.
- Added
The
Context.parseUri()method's parameter type becameURL | null(wasURL).Context.sendActivity()method now adds Object Integrity Proofs to the activity to be sent only once. It had added Object Integrity Proofs to the activity for every recipient before.The message queue is now able to be stopped manually by providing an
AbortSignalobject to theFederation.startQueue()method.- Added the optional second parameter to
Federation.startQueue()method, which is aFederationStartQueueOptionsobject. - Added
FederationStartQueueOptionsinterface. - Added the optional second parameter to
MessageQueue.listen()method, which is aMessageQueueListenOptionsobject. - Added
MessageQueueListenOptionsinterface. - The return type of
MessageQueue.listen()method becamePromise<void>(wasvoid).
- Added the optional second parameter to
Added
ParallelMessageQueueclass. [#106]WebFinger responses now include http://webfinger.net/rel/avatar links if the
Actorobject returned by the actor dispatcher hasicon/iconsproperty.DenoKvMessageQueuenow implementsDisposableinterface.The
fedify inboxcommand now sendsDelete(Application)activities when it's terminated so that the peers can clean up data related to the temporary actor. [#135]Added options for PostgreSQL drivers to
fedify initcommand.- Added
postgresvalue to the-k/--kv-storeoption of thefedify initcommand. - Added
postgresvalue to the-q/--message-queueoption of thefedify initcommand.
- Added
The generated project by the
fedify initcommand now enables dotenv by default.The
fedify initcommand now generates .env file with default values.Added more log messages using the LogTape library. Currently the below logger categories are used:
["fedify", "sig", "ld"]
Version 0.15.9
Released on November 22, 2024.
- Fixed a bug where
lookupWebFinger()function had thrown aTypeErrorwhen the .well-known/webfinger redirects to a relative URI. [#166]
Version 0.15.8
Released on November 19, 2024.
Fix a bug where
Actor'sinboxandoutboxproperties had not been able to be set to anOrderedCollectionPageobject, even though it is a subtype ofOrderedCollectionaccording to Activity Vocabulary specification. [#165]- The type of
Application()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Application.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Application.getInbox()andApplication.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Group()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Group.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Group.getInbox()andGroup.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Organization()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Organization.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Organization.getInbox()andOrganization.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Person()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Person.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Person.getInbox()andPerson.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null). - The type of
Service()constructor'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The type of
Service.clone()method'sinboxandoutboxoptions is nowOrderedCollection | OrderedCollectionPage | null | undefined(wasOrderedCollection | null | undefined). - The return type of
Service.getInbox()andService.getOutbox()methods is nowOrderedCollection | OrderedCollectionPage | null(wasOrderedCollection | null).
- The type of
Version 0.15.7
Released on November 14, 2024.
Suppressed a
TypeErrorwith a messageunusable
due to Node.js's mysterious behavior. [#159]- The
verifyRequest()function no longer throws aTypeErrorwhen a givenRequestobject's body is already consumed or locked. Instead, it logs an error message to the["fedify", "sig", "http"]logger category and returnsnull. - The
Federation.fetch()method no longer throws aTypeErrorwhen a givenRequestobject's body is already consumed or locked. Instead, it logs an error message to the["fedify", "federation", "inbox"]logger category and responds with a500 Internal Server Error.
- The
Version 0.15.6
Released on November 12, 2024.
- Fixed a bug where default document loaders had thrown a
TypeErrorwith a messageBody is unusable: Body has already been read
orBody already consumed
when the content type of the response was an HTML document and there's no link to a JSON-LD document.
Version 0.15.5
Released on October 30, 2024.
- Fixed a bug where
fetchDocumentLoader()function had disallowed redirecting to a private network address when the second parameter, abooleanvalue to allow private network addresses, wastrue.
Version 0.15.4
Released on October 27, 2024.
- Fixed default document loaders' incorrect handling of relative URIs in
Linkheaders withrel=alternate. [#155 by Emelia Smith] - The
fetchDocumentLoader()function now preloads the following JSON-LD context: http://schema.org/.
Version 0.15.3
Released on October 23, 2024.
- The
fetchDocumentLoader()function now preloads the following JSON-LD context: https://purl.archive.org/socialweb/webfinger.
Version 0.15.2
Released on September 26, 2024.
- Fixed a bug of
Object.toJsonLd()method where it had not fall back to the proper compact form when the heuristic compact form was not available.
Version 0.15.1
Released on September 15, 2024.
- Fixed a bug where even if the
ActorCallbackSetters.mapHandle()method was called, a WebFinger username was used as an actor's handle. [#136]
Version 0.15.0
Released on September 11, 2024.
Actors, collections, and objects now can have their URIs that do not consist of a WebFinger username, which means actors can change their fediverse handles.
- Added
ActorCallbackSetters.mapHandle()method. - Added
ActorHandleMappertype.
- Added
Added
quoteUrlproperty toArticle,ChatMessage,Note, andQuestionclasses in Activity Vocabulary API.- Added
Article.quoteUrlproperty. new Articleconstructor now acceptsquoteUrloption.Article.clone()method now acceptsquoteUrloption.- Added
ChatMessage.quoteUrlproperty. new ChatMessageconstructor now acceptsquoteUrloption.ChatMessage.clone()method now acceptsquoteUrloption.- Added
Note.quoteUrlproperty. new Noteconstructor now acceptsquoteUrloption.Note.clone()method now acceptsquoteUrloption.- Added
Question.quoteUrlproperty. new Questionconstructor now acceptsquoteUrloption.Question.clone()method now acceptsquoteUrloption.
- Added
The element type of the liked collection is now
ObjectorURLinstead ofLike.- Changed the type of
Federation.setLikedDispatcher()method's second parameter toCollectionDispatcher<Object | URL, RequestContext<TContextData>, TContextData, void>(wasCollectionDispatcher<Like, RequestContext<TContextData>, TContextData, void>).
- Changed the type of
Removed
expandoption ofObject.toJsonLd()method, which was deprecated in version 0.14.0. Useformat: "expand"option instead.Added
Context.lookupObject()method.Default document loaders now recognize ActivityStream objects in more ways:
- Loaders now recognize
alternateActivityStreams objects in theLinkheader. - Loaders now recognize
alternateActivityStreams objects in the<link>/<a>HTML elements.
- Loaders now recognize
Added
allowPrivateAddressoption toCreateFederationOptionsinterface.Fixed a bug where the WebFinger response had had a
subjectproperty with an unmatched URI to the requested resource when a non-acct:URI was given.Renamed the short option
-cfor--compactoffedify lookupcommand to-Cto avoid conflict with the short option-cfor--cache-dir.Added
-r/--rawoption tofedify lookupcommand to output the raw JSON object.
Version 0.14.5
Released on September 26, 2024.
- Fixed a bug of
Object.toJsonLd()method where it had not fall back to the proper compact form when the heuristic compact form was not available.
Version 0.14.4
Released on September 6, 2024.
- Fixed a bug of
Object.fromJsonLd()method where it had thrown aTypeErrorwhen the given JSON-LD object had an@idproperty with an empty string.
Version 0.14.3
Released on September 1, 2024.
- Fixed
fedify inboxcommand where it had ignored-a/--accept-followoptions when no-f/--followoption was provided. [#132]
Version 0.14.2
Released on August 30, 2024.
- Fixed an incompatibility with Meta's Threads where sent activities had not been verified by their inbox. [#125]
Version 0.14.1
Released on August 29, 2024.
Fixed
fedify inboxcommand that had not been able to parse activities even if they are valid JSON-LD. [#126]Fixed a bug where the Compact Activity tab of
fedify inboxcommand's web interface had shown an expanded JSON-LD object instead of a compacted one.
Version 0.14.0
Released on August 27, 2024.
Removed the limitation that the
sendActivity({ handle: string }, "followers", Activity)overload is only available forRequestContextbut not forContext. Now it is available for both. [#115]- Added
Context.sendActivity({ handle: string }, "followers", Activity)overload. - Added type parameter
TContexttoCollectionsDispatchertype's first parameter to distinguish betweenRequestContextandContext. - The first parameter of
CollectionDispatchertype becameTContext(wasRequestContext). - Added type parameter
TContexttoCollectionsCursortype's first parameter to distinguish betweenRequestContextandContext. - The first parameter of
CollectionCursortype becameTContext(wasRequestContext). - Added type parameter
TContexttoCollectionsCallbackSetterstype's first parameter to distinguish betweenRequestContextandContext.
- Added
Added
sourceproperty toObjectclass in Activity Vocabulary API. [#114]- Added
Object.sourceproperty. new Objectconstructor now acceptssourceoption.Object.clone()method now acceptssourceoption.
- Added
Added
aliasesproperty toActortype in Activity Vocabulary API.- Added
Application.getAliases()method. - Added
Application.getAlias()method. new Applicationconstructor now acceptsaliasoption.new Applicationconstructor now acceptsaliasesoption.Application.clone()method now acceptsaliasoption.Application.clone()method now acceptsaliasesoption.- Added
Group.getAliases()method. - Added
Group.getAlias()method. new Groupconstructor now acceptsaliasoption.new Groupconstructor now acceptsaliasesoption.Group.clone()method now acceptsaliasoption.Group.clone()method now acceptsaliasesoption.- Added
Organization.getAliases()method. - Added
Organization.getAlias()method. new Organizationconstructor now acceptsaliasoption.new Organizationconstructor now acceptsaliasesoption.Organization.clone()method now acceptsaliasoption.Organization.clone()method now acceptsaliasesoption.- Added
Person.getAliases()method. - Added
Person.getAlias()method. new Personconstructor now acceptsaliasoption.new Personconstructor now acceptsaliasesoption.Person.clone()method now acceptsaliasoption.Person.clone()method now acceptsaliasesoption.- Added
Service.getAliases()method. - Added
Service.getAlias()method. new Serviceconstructor now acceptsaliasoption.new Serviceconstructor now acceptsaliasesoption.Service.clone()method now acceptsaliasoption.Service.clone()method now acceptsaliasesoption.
- Added
Improved the performance of
Object.toJsonLd()method.Object.toJsonLd()method no longer guarantees that the returned JSON-LD object is compacted unless theformat: "compact"option is provided.- Added
formatoption toObject.toJsonLd()method. - Deprecated
expandoption ofObject.toJsonLd()method. Useformat: "expand"option instead. - The
contextoption ofObject.toJsonLd()method is now only applicable toformat: "compact". Otherwise, it throws aTypeError.
The
getActorHandle()function now supports cross-origin WebFinger resources.The
lookupWebFinger()andgetActorHandle()functions no more throw an error when they fail to reach the WebFinger resource.Collection dispatchers now set the
idproperty of theOrderedCollection/OrderedCollectionPageobjects that they return to the their canonical URI.Now
fedify initgenerates a default tsconfig.json file on Node.js and Bun, and fills the deno.json file with the defaultcompilerOptionson Deno.
Version 0.13.5
Released on September 6, 2024.
- Fixed a bug of
Object.fromJsonLd()method where it had thrown aTypeErrorwhen the given JSON-LD object had an@idproperty with an empty string.
Version 0.13.4
Released on September 1, 2024.
- Fixed
fedify inboxcommand where it had ignored-a/--accept-followoptions when no-f/--followoption was provided. [#132]
Version 0.13.3
Released on August 30, 2024.
- Fixed an incompatibility with Meta's Threads where sent activities had not been verified by their inbox. [#125]
Version 0.13.2
Released on August 29, 2024.
- Fixed
fedify inboxcommand that had not been able to parse activities even if they are valid JSON-LD. [#126]
Version 0.13.1
Released on August 18, 2024.
- Fixed a vulnerability where the
getActorHandle()function had trusted the hostname of WebFinger aliases that had not matched the hostname of the actor ID (URI).
Version 0.13.0
Released on August 7, 2024.
Added
closedproperty toQuestionclass in Activity Vocabulary API.- Added
Question.closedproperty. new Questionconstructor now acceptsclosedoption.Question.clone()method now acceptsclosedoption.
- Added
Added
votersproperty toQuestionclass in Activity Vocabulary API.- Added
Question.votersproperty. new Questionconstructor now acceptsvotersoption.Question.clone()method now acceptsvotersoption.
- Added
HTTP Signatures verification now can be optionally skipped for the sake of testing. [#110]
- The type of
CreateFederationOptions.signatureTimeWindowproperty becameTemporal.DurationLike | false(wasTemporal.DurationLike). - The type of
VerifyRequestOptions.timeWindowproperty becameTemporal.DurationLike | false(wasTemporal.DurationLike). - Added
CreateFederationOptions.skipSignatureVerificationproperty.
- The type of
Removed the singular actor key pair dispatcher APIs which were deprecated in version 0.10.0.
- Removed the last parameter of the
ActorDispatchercallback type. UseContext.getActorKeyPairs()method instead. - Removed
ActorKeyPairDispatchertype. UseActorKeyPairsDispatchertype instead. - Removed
ActorCallbackSetters.setKeyPairDispatcher()method. UseActorCallbackSetters.setKeyPairsDispatcher()method instead. - Removed
Context.getActorKey()method. UseContext.getActorKeyPairs()method instead.
- Removed the last parameter of the
The
Federationis no more a class, but an interface, which has been planned since version 0.10.0. [#69]new Federation()constructor is removed. UsecreateFederation()function instead.- Removed
Federation.sendActivity()method. UseContext.sendActivity()method instead. - Removed
Federationclass. - Added
Federationinterface. - Removed
FederationParametersinterface.
Added
fedify tunnelcommand to expose a local HTTP server to the public internet.A scaffold project generated by the
fedify initcommand has several changes:- Added support for Express framework.
- Added support for Nitro framework.
- Now a scaffold project uses a x-forwarded-fetch middleware to support
X-Forwarded-ProtoandX-Forwarded-Hostheaders. - Now a scaffold project has hot reloading by default.
- Now a scaffold project has logging configuration using the LogTape library.
Added more log messages using the LogTape library. Currently the below logger categories are used:
["fedify", "webfinger", "server"]
Version 0.12.3
Released on August 18, 2024.
- Fixed a vulnerability where the
getActorHandle()function had trusted the hostname of WebFinger aliases that had not matched the hostname of the actor ID (URI).
Version 0.12.2
Released on July 31, 2024.
- Fixed a bug where incoming activities had not been enqueued even if the
queueoption was provided to thecreateFederation()function.
Version 0.12.1
Released on July 27, 2024.
- Fixed a bug where
fedify init -w honohad generated scaffold files without Fedify integration. - Fixed a bug where
fedify init -r bun -w honohad generated scaffold files with a wrong port number (was 3000).
Version 0.12.0
Released on July 24, 2024.
The
fedifycommand is now available on npm. [#104]Incoming activities are now queued before being dispatched to the inbox listener if the
queueoption is provided to thecreateFederation()function. [#70]- The type of
InboxListenercallback type's first parameter becameContext(wasRequestContext). - The type of
InboxErrorHandlercallback type's first parameter becameContext(wasRequestContext). - The type of
SharedInboxKeyDispatchercallback type's first parameter becameContext(wasRequestContext).
- The type of
Implemented fully customizable retry policy for failed tasks in the task queue. By default, the task queue retries the failed tasks with an exponential backoff policy with decorrelated jitter.
- Added
outboxRetryPolicyoption toCreateFederationOptionsinterface. - Added
inboxRetryPolicyoption toCreateFederationOptionsinterface. [#70] - Added
RetryPolicycallback type. - Added
RetryContextinterface. - Added
createExponentialBackoffPolicy()function. - Added
CreateExponentialBackoffPolicyOptionsinterface.
- Added
Federationobject now allows its task queue to be started manually. [#53]- Added
manuallyStartQueueoption toCreateFederationOptionsinterface. - Added
Federation.startQueue()method.
- Added
Made the router able to be insensitive to trailing slashes in the URL paths. [#81]
- Added
trailingSlashInsensitiveoption toCreateFederationOptionsinterface. - Added
RouterOptionsinterface. - Added an optional parameter to
new Routerconstructor.
- Added
Added
ChatMessageclass to Activity Vocabulary API. [#85]Added
Moveclass to Activity Vocabulary API. [#65, #92 by Lee Dogeon]Added
Readclass to Activity Vocabulary API. [#65, #92 by Lee Dogeon]Added
Travelclass to Activity Vocabulary API. [#65, #92 by Lee Dogeon]Added
Viewclass to Activity Vocabulary API. [#65, #92 by Lee Dogeon]Added
TentativeAcceptclass to Activity Vocabulary API. [#65, #92 by Lee Dogeon]Added
TentativeRejectclass to Activity Vocabulary API. [#65, #92 by Lee Dogeon]Improved multitenancy (virtual hosting) support. [#66]
- Added
Context.hostnameproperty. - Added
Context.hostproperty. - Added
Context.originproperty. - The type of
ActorKeyPairsDispatcher<TContextData>'s first parameter becameContext(wasTContextData).
- Added
During verifying HTTP Signatures and Object Integrity Proofs, once fetched public keys are now cached. [#107]
- The
verifyRequest()function now caches the fetched public keys when thekeyCacheoption is provided. - The
verifyProof()function now caches the fetched public keys when thekeyCacheoption is provided. - The
verifyObject()function now caches the fetched public keys when thekeyCacheoption is provided. - Added
KeyCacheinterface. - Added
VerifyRequestOptions.keyCacheproperty. - Added
VerifyProofOptions.keyCacheproperty. - Added
VerifyObjectOptions.keyCacheproperty. - Added
FederationKvPrefixes.publicKeyproperty.
- The
The built-in document loaders now recognize JSON-LD context provided in an HTTP
Linkheader. [#6]- The
fetchDocumentLoader()function now recognizes theLinkheader with thehttp://www.w3.org/ns/json-ld#contextlink relation. - The
getAuthenticatedDocumentLoader()function now returns a document loader that recognizes theLinkheader with thehttp://www.w3.org/ns/json-ld#contextlink relation.
- The
Deprecated
Federation.sendActivity()method. UseContext.sendActivity()method instead.The last parameter of
Federation.sendActivity()method is no longer optional. Also, it now takes the requiredcontextDataoption.Removed
Context.getHandleFromActorUri()method which was deprecated in version 0.9.0. UseContext.parseUri()method instead.Removed
@fedify/fedify/httpsigmodule which was deprecated in version 0.9.0. Use@fedify/fedify/sigmodule instead.- Removed
sign()function. - Removed
verify()function. - Removed
VerifyOptionsinterface.
- Removed
Fixed a bug where the
lookupWebFinger()function had incorrectly queried if the givenresourcewas a URL starts withhttp:or had a non-default port number.Fixed a SSRF vulnerability in the built-in document loader. [CVE-2024-39687]
- The
fetchDocumentLoader()function now throws an error when the given URL is not an HTTP or HTTPS URL or refers to a private network address. - Added an optional second parameter to the
fetchDocumentLoader()function, which can be used to allow fetching private network addresses. - The
getAuthenticatedDocumentLoader()function now returns a document loader that throws an error when the given URL is not an HTTP or HTTPS URL or refers to a private network address. - Added an optional second parameter to the
getAuthenticatedDocumentLoader()function, which can be used to allow fetching private network addresses.
- The
Added
fedify initsubcommand. [#105]Added more log messages using the LogTape library. Currently the below logger categories are used:
["fedify", "federation", "queue"]
Version 0.11.3
Released on July 15, 2024.
- Fixed a bug where use of
Federation.setInboxDispatcher()afterFederation.setInboxListeners()had caused aRouterErrorto be thrown even if the paths match. [#101 by Fabien O'Carroll]
Version 0.11.2
Released on July 9, 2024.
Fixed a vulnerability of SSRF via DNS rebinding in the built-in document loader. [CVE-2024-39687]
- The
fetchDocumentLoader()function now throws an error when the given domain name has any records referring to a private network address. - The
getAuthenticatedDocumentLoader()function now returns a document loader that throws an error when the given domain name has any records referring to a private network address.
- The
Version 0.11.1
Released on July 5, 2024.
Fixed a SSRF vulnerability in the built-in document loader. [CVE-2024-39687]
- The
fetchDocumentLoader()function now throws an error when the given URL is not an HTTP or HTTPS URL or refers to a private network address. - The
getAuthenticatedDocumentLoader()function now returns a document loader that throws an error when the given URL is not an HTTP or HTTPS URL or refers to a private network address.
- The
Version 0.11.0
Released on June 29, 2024.
Improved runtime type error messages for Activity Vocabulary API. [#79]
Added
suppressErroroption to dereferencing accessors of Activity Vocabulary classes.Added more collection dispatchers. [#78]
- Added
Federation.setInboxDispatcher()method. [#71] - Added
Federation.setLikedDispatcher()method. - Added
Context.getLikedUri()method. - Added
{ type: "liked"; handle: string }case toParseUriResulttype. - Renamed
linkedproperty (which was a typo) tolikedinApplication,Group,Organization,Person, andServiceclasses. - Added
Federation.setFeaturedDispatcher()method. - Added
Context.getFeaturedUri()method. - Added
{ type: "featured"; handle: string }case toParseUriResulttype. - Added
Federation.setFeaturedTagsDispatcher()method. - Added
Context.getFeaturedTagsUri()method. - Added
{ type: "featuredTags"; handle: string }case toParseUriResulttype.
- Added
Frequently used JSON-LD contexts are now preloaded. [#74]
The
fetchDocumentLoader()function now preloads the following JSON-LD contexts:The default
rulesforkvCache()function are now 5 minutes for all URLs.
Added
Inviteclass to Activity Vocabulary API. [#65, #80 by Randy Wressell]Added
Joinclass to Activity Vocabulary API. [#65, #80 by Randy Wressell]Added
Leaveclass to Activity Vocabulary API. [#65, #80 by Randy Wressell]Added
Listenclass to Activity Vocabulary API. [#65, #80 by Randy Wressell]Added
Offerclass to Activity Vocabulary API. [#65, #76 by Lee Dogeon]The below properties of
CollectionandCollectionPagein Activity Vocabulary API now do not acceptLinkobjects:Collection.currentCollection.firstCollection.lastCollectionPage.partOfCollectionPage.nextCollectionPage.prev
Added
featuredproperty toActortypes in Activity Vocabulary API. [#78]- Added
Application.getFeatured()method. - Added
Application.featuredIdproperty. new Applicationconstructor now acceptsfeaturedoption.Application.clone()method now acceptsfeaturedoption.- Added
Group.getFeatured()method. - Added
Group.featuredIdproperty. new Groupconstructor now acceptsfeaturedoption.Group.clone()method now acceptsfeaturedoption.- Added
Organization.getFeatured()method. - Added
Organization.featuredIdproperty. new Organizationconstructor now acceptsfeaturedoption.Organization.clone()method now acceptsfeaturedoption.- Added
Person.getFeatured()method. - Added
Person.featuredIdproperty. new Personconstructor now acceptsfeaturedoption.Person.clone()method now acceptsfeaturedoption.- Added
Service.getFeatured()method. - Added
Service.featuredIdproperty. new Serviceconstructor now acceptsfeaturedoption.Service.clone()method now acceptsfeaturedoption.
- Added
Added
featuredTagsproperty toActortypes in Activity Vocabulary API. [#78]- Added
Application.getFeaturedTags()method. - Added
Application.featuredTagsIdproperty. new Applicationconstructor now acceptsfeaturedTagsoption.Application.clone()method now acceptsfeaturedTagsoption.- Added
Group.getFeaturedTags()method. - Added
Group.featuredTagsIdproperty. new Groupconstructor now acceptsfeaturedTagsoption.Group.clone()method now acceptsfeaturedTagsoption.- Added
Organization.getFeaturedTags()method. - Added
Organization.featuredTagsIdproperty. new Organizationconstructor now acceptsfeaturedTagsoption.Organization.clone()method now acceptsfeaturedTagsoption.- Added
Person.getFeaturedTags()method. - Added
Person.featuredTagsIdproperty. new Personconstructor now acceptsfeaturedTagsoption.Person.clone()method now acceptsfeaturedTagsoption.- Added
Service.getFeaturedTags()method. - Added
Service.featuredTagsIdproperty. new Serviceconstructor now acceptsfeaturedTagsoption.Service.clone()method now acceptsfeaturedTagsoption.
- Added
Added
targetproperty toActivityclass in Activity Vocabulary API.- Added
Activity.getTarget()method. - Added
Activity.getTargets()method. - Added
Activity.targetIdproperty. - Added
Activity.targetIdsproperty. new Activityconstructor now acceptstargetoption.new Activityconstructor now acceptstargetsoption.Activity.clone()method now acceptstargetoption.Activity.clone()method now acceptstargetsoption.
- Added
Added
resultproperty toActivityclass in Activity Vocabulary API.- Added
Activity.getResult()method. - Added
Activity.getResults()method. - Added
Activity.resultIdproperty. - Added
Activity.resultIdsproperty. new Activityconstructor now acceptsresultoption.new Activityconstructor now acceptsresultsoption.Activity.clone()method now acceptsresultoption.Activity.clone()method now acceptsresultsoption.
- Added
Added
originproperty toActivityclass in Activity Vocabulary API.- Added
Activity.getOrigin()method. - Added
Activity.getOrigins()method. - Added
Activity.originIdproperty. - Added
Activity.originIdsproperty. new Activityconstructor now acceptsoriginoption.new Activityconstructor now acceptsoriginsoption.Activity.clone()method now acceptsoriginoption.Activity.clone()method now acceptsoriginsoption.
- Added
Added
instrumentproperty toActivityclass in Activity Vocabulary API.- Added
Activity.getInstrument()method. - Added
Activity.getInstruments()method. - Added
Activity.instrumentIdproperty. - Added
Activity.instrumentIdsproperty. new Activityconstructor now acceptsinstrumentoption.new Activityconstructor now acceptsinstrumentsoption.Activity.clone()method now acceptsinstrumentoption.Activity.clone()method now acceptsinstrumentsoption.
- Added
The
itemsproperty ofOrderedCollectionandOrderedCollectionPagein Activity Vocabulary API is now represented asorderedItems(wasitems) in JSON-LD.The key pair or the key pair for signing outgoing HTTP requests made from the shared inbox now can be configured. This improves the compatibility with other ActivityPub implementations that require authorized fetches (i.e., secure mode).
- Added
SharedInboxKeyDispatchertype. - Renamed
InboxListenerSetterinterface toInboxListenerSetters. - Added
InboxListenerSetters.setSharedKeyDispatcher()method.
- Added
Followed up the change in
eddsa-jcs-2022specification for Object Integrity Proofs. [FEP-8b32, #54]
Version 0.10.2
Released on July 9, 2024.
Fixed a vulnerability of SSRF via DNS rebinding in the built-in document loader. [CVE-2024-39687]
- The
fetchDocumentLoader()function now throws an error when the given domain name has any records referring to a private network address. - The
getAuthenticatedDocumentLoader()function now returns a document loader that throws an error when the given domain name has any records referring to a private network address.
- The
Version 0.10.1
Released on July 5, 2024.
Fixed a SSRF vulnerability in the built-in document loader. [CVE-2024-39687]
- The
fetchDocumentLoader()function now throws an error when the given URL is not an HTTP or HTTPS URL or refers to a private network address. - The
getAuthenticatedDocumentLoader()function now returns a document loader that throws an error when the given URL is not an HTTP or HTTPS URL or refers to a private network address.
- The
Version 0.10.0
Released on June 18, 2024.
Starting with this release, Fedify, previously distributed under AGPL 3.0, is now distributed under the MIT License to encourage wider adoption.
Besides RSA-PKCS#1-v1.5, Fedify now supports Ed25519 for signing and verifying the activities. [#55]
- Added an optional parameter to
generateCryptoKeyPair()function,algorithm, which can be either"RSASSA-PKCS1-v1_5"or"Ed25519". - The
importJwk()function now accepts Ed25519 keys. - The
exportJwk()function now exports Ed25519 keys. - The
importSpki()function now accepts Ed25519 keys. - The
exportJwk()function now exports Ed25519 keys.
- Added an optional parameter to
Now multiple key pairs can be registered for an actor. [FEP-521a, #55]
- Added
Context.getActorKeyPairs()method. - Deprecated
Context.getActorKey()method. UseContext.getActorKeyPairs()method instead. - Added
ActorKeyPairinterface. - Added
ActorCallbackSetters.setKeyPairsDispatcher()method. - Added
ActorKeyPairsDispatchertype. - Deprecated
ActorCallbackSetters.setKeyPairDispatcher()method. - Deprecated
ActorKeyPairDispatchertype. - Deprecated the third parameter of the
ActorDispatchercallback type. UseContext.getActorKeyPairs()method instead.
- Added
Added
Multikeyclass to Activity Vocabulary API. [FEP-521a, #55]- Added
importMultibaseKey()function. - Added
exportMultibaseKey()function.
- Added
Added
assertionMethodproperty to theActortypes in the Activity Vocabulary API. [FEP-521a, #55]- Added
Application.getAssertionMethod()method. - Added
Application.getAssertionMethods()method. new Applicationconstructor now acceptsassertionMethodoption.new Applicationconstructor now acceptsassertionMethodsoption.Application.clone()method now acceptsassertionMethodoption.Application.clone()method now acceptsassertionMethodsoption.- Added
Group.getAssertionMethod()method. - Added
Group.getAssertionMethods()method. new Groupconstructor now acceptsassertionMethodoption.new Groupconstructor now acceptsassertionMethodsoption.Group.clone()method now acceptsassertionMethodoption.Group.clone()method now acceptsassertionMethodsoption.- Added
Organization.getAssertionMethod()method. - Added
Organization.getAssertionMethods()method. new Organizationconstructor now acceptsassertionMethodoption.new Organizationconstructor now acceptsassertionMethodsoption.Organization.clone()method now acceptsassertionMethodoption.Organization.clone()method now acceptsassertionMethodsoption.- Added
Person.getAssertionMethod()method. - Added
Person.getAssertionMethods()method. new Personconstructor now acceptsassertionMethodoption.new Personconstructor now acceptsassertionMethodsoption.Person.clone()method now acceptsassertionMethodoption.Person.clone()method now acceptsassertionMethodsoption.- Added
Service.getAssertionMethod()method. - Added
Service.getAssertionMethods()method. new Serviceconstructor now acceptsassertionMethodoption.new Serviceconstructor now acceptsassertionMethodsoption.Service.clone()method now acceptsassertionMethodoption.Service.clone()method now acceptsassertionMethodsoption.
- Added
Added
DataIntegrityProofclass to Activity Vocabulary API. [FEP-8b32, #54]Added
proofproperty to theObjectclass in the Activity Vocabulary API. [FEP-8b32, #54]- Added
Object.getProof()method. - Added
Object.getProofs()method. new Objectconstructor now acceptsproofoption.new Objectconstructor now acceptsproofsoption.Object.clone()method now acceptsproofoption.Object.clone()method now acceptsproofsoption.
- Added
Implemented Object Integrity Proofs. [FEP-8b32, #54]
- If there are any Ed25519 key pairs, the
Context.sendActivity()andFederation.sendActivity()methods now make Object Integrity Proofs for the activity to be sent. - If the incoming activity has Object Integrity Proofs, the inbox listener now verifies them and ignores HTTP Signatures (if any).
- Added
signObject()function. - Added
SignObjectOptionsinterface. - Added
createProof()function. - Added
CreateProofOptionsinterface. - Added
verifyObject()function. - Added
VerifyObjectOptionsinterface. - Added
verifyProof()function. - Added
VerifyProofOptionsinterface. - Added
SenderKeyPairinterface. - The type of
Federation.sendActivity()method's first parameter becameSenderKeyPair[](was{ keyId: URL; privateKey: CryptoKey }). - The
Context.sendActivity()method's first parameter now acceptsSenderKeyPair[]as well.
- If there are any Ed25519 key pairs, the
In the future,
Federationclass will become an interface. For the forward compatibility, the following changes are made:- Added
createFederation()function. - Added
CreateFederationOptionsinterface. - Deprecated
new Federation()constructor. UsecreateFederation()function instead. - Deprecated
FederationParametersinterface.
- Added
Added
Arriveclass to Activity Vocabulary API. [#65, #68 by Randy Wressell]Added
Questionclass to Activity Vocabulary API.Added
contextoption toObject.toJsonLd()method. This applies to any subclasses of theObjectclass too.Deprecated
treatHttpsoption inFederationParametersinterface. Instead, use the x-forwarded-fetch library to recognize theX-Forwarded-HostandX-Forwarded-Protoheaders.Removed the
Federation.handle()method which was deprecated in version 0.6.0.Removed the
integrateHandlerOptions()function from@fedify/fedify/x/freshwhich was deprecated in version 0.6.0.Ephemeral actors and inboxes that the
fedify inboxcommand spawns are now more interoperable with other ActivityPub implementations.- Ephemeral actors now have the following properties:
summary,following,followers,outbox,manuallyApprovesFollowers, andurl. - Improved the compatibility of the
fedify inboxcommand with Misskey and Mitra.
- Ephemeral actors now have the following properties:
Added more log messages using the LogTape library. Currently the below logger categories are used:
["fedify", "sig", "proof"]["fedify", "sig", "key"]["fedify", "vocab", "lookup"]["fedify", "webfinger", "lookup"]
Version 0.9.3
Released on July 9, 2024.
Fixed a vulnerability of SSRF via DNS rebinding in the built-in document loader. [CVE-2024-39687]
- The
fetchDocumentLoader()function now throws an error when the given domain name has any records referring to a private network address. - The
getAuthenticatedDocumentLoader()function now returns a document loader that throws an error when the given domain name has any records referring to a private network address.
- The
Version 0.9.2
Released on July 5, 2024.
Fixed a SSRF vulnerability in the built-in document loader. [CVE-2024-39687]
- The
fetchDocumentLoader()function now throws an error when the given URL is not an HTTP or HTTPS URL or refers to a private network address. - The
getAuthenticatedDocumentLoader()function now returns a document loader that throws an error when the given URL is not an HTTP or HTTPS URL or refers to a private network address.
- The
Version 0.9.1
Released on June 13, 2024.
- Fixed a bug of Activity Vocabulary API that
clone()method of Vocabulary classes had not cloned theidproperty from the source object.
Version 0.9.0
Released on June 2, 2024.
Added
Tombstoneclass to Activity Vocabulary API.Added an actor handle normalization function.
- Added
normalizeActorHandle()function. - Added
NormalizeActorHandleOptionsinterface. - The
getActorHandle()function now guarantees that the returned actor handle is normalized. - Added the second optional parameter to
getActorHandle()function. - The return type of
getActorHandle()function becamePromise<`@${string}@${string}` | `${string}@${string}`>(wasPromise<`@${string}@${string}`>).
- Added
Added
excludeBaseUrisoption toContext.sendActivity()andFederation.sendActivity()methods.- Added
SendActivityOptions.excludeBaseUrisproperty. - Added
ExtractInboxesParameters.excludeBaseUrisproperty.
- Added
The
Contextnow can parse URIs of objects, inboxes, and collections as well as actors.- Added
Context.parseUri()method. - Added
ParseUriResulttype. - Deprecated
Context.getHandleFromActorUri()method.
- Added
The time window for signature verification is now configurable. [#52]
- The default time window for signature verification is now a minute (was 30 seconds).
- Added
signatureTimeWindowoption toFederationParametersinterface. - Added
VerifyOptionsinterface. - The signature of the
verify()function is revamped; it now optionally takes aVerifyOptionsobject as the second parameter.
Renamed the
@fedify/fedify/httpsigmodule to@fedify/fedify/sig, and also:- Deprecated
sign()function. UsesignRequest()instead. - Deprecated
verify()function. UseverifyRequest()instead. - Deprecated
VerifyOptionsinterface. UseVerifyRequestOptionsinstead.
- Deprecated
When signing an HTTP request, the
algorithmparameter is now added to theSignatureheader. This change improves the compatibility with Misskey and other implementations that require thealgorithmparameter.Added more log messages using the LogTape library. Currently the below logger categories are used:
["fedify", "federation", "actor"]["fedify", "federation", "http"]["fedify", "sig", "http"]["fedify", "sig", "key"]["fedify", "sig", "owner"]
Version 0.8.0
Released on May 6, 2024.
The CLI toolchain for testing and debugging is now available on JSR: @fedify/cli. You can install it with
deno install -A --unstable-fs --unstable-kv --unstable-temporal -n fedify jsr:@fedify/cli, or download a standalone executable from the releases page.- Added
fedifycommand. - Added
fedify lookupsubcommand. - Added
fedify inboxsubcommand.
- Added
Implemented followers collection synchronization mechanism.
- Added
RequestContext.sendActivity()overload that takes"followers"as the second parameter. - Added the second type parameter to
CollectionCallbackSettersinterface. - Added the second type parameter to
CollectionDispatchertype. - Added the fourth parameter to
CollectionDispatchertype. - Added the second type parameter to
CollectionCountertype. - Added the third parameter to
CollectionCountertype. - Added the second type parameter to
CollectionCursortype. - Added the third parameter to
CollectionCursortype.
- Added
Relaxed the required type for activity recipients.
- Added
Recipientinterface. - The type of the second parameter of
Context.sendActivity()method becameRecipient | Recipient[](wasActor | Actor[]). However, sinceRecipientis a supertype ofActor, the existing code should work without any change.
- Added
Followers collection now has to consist of
Recipientobjects only. (It could consist ofURLs as well asActors before.)- The type of
Federation.setFollowersDispatcher()method's second parameter becameCollectionDispatcher<Recipient, TContextData, URL>(wasCollectionDispatcher<Actor | URL, TContextData>).
- The type of
Some of the responsibility of a document loader was separated to a context loader and a document loader.
- Added
contextLoaderoption to constructors,fromJsonLd()static methods,clone()methods, and all non-scalar accessors (get*()) of Activity Vocabulary classes. - Renamed
documentLoaderoption tocontextLoaderintoJsonLd()methods of Activity Vocabulary objects. - Added
contextLoaderoption toLookupObjectOptionsinterface. - Added
contextLoaderproperty toContextinterface. - Added
contextLoaderoption toFederationParametersinterface. - Renamed
documentLoaderoption tocontextLoaderinRespondWithObjectOptionsinterface. - Added
GetKeyOwnerOptionsinterface. - The type of the second parameter of
getKeyOwner()function becameGetKeyOwnerOptions(wasDocumentLoader). - Added
DoesActorOwnKeyOptionsinterface. - The type of the third parameter of
doesActorOwnKey()function becameDoesActorOwnKeyOptions(wasDocumentLoader).
- Added
Added
widthandheightproperties toDocumentclass for better compatibility with Mastodon. [#47]- Added
Document.widthproperty. - Added
Document.heightproperty. new Documentconstructor now acceptswidthoption.new Documentconstructor now acceptsheightoption.Document.clone()method now acceptswidthoption.Document.clone()method now acceptsheightoption.
- Added
Removed the dependency on @js-temporal/polyfill on Deno, and Fedify now requires
--unstable-temporalflag. On other runtime, it still depends on @js-temporal/polyfill.Added more log messages using the LogTape library. Currently the below logger categories are used:
["fedify", "federation", "collection"]["fedify", "httpsig", "verify"]["fedify", "runtime", "docloader"]
Fixed a bug where the authenticated document loader had thrown
InvalidUrlerror when the URL redirection was involved in Bun.Fixed a bug of
lookupObject()that it had failed to look up the actor object when WebFinger response had no links with"type": "application/activity+json"but had"type": "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"".
Version 0.7.0
Released on April 23, 2024.
Added
PUBLIC_COLLECTIONconstant for public addressing.Federationnow supports authorized fetch for actor dispatcher and collection dispatchers.- Added
ActorCallbackSetters.authorize()method. - Added
CollectionCallbackSetters.authorize()method. - Added
AuthorizedPredicatetype. - Added
RequestContext.getSignedKey()method. - Added
RequestContext.getSignedKeyOwner()method. - Added
FederationFetchOptions.onUnauthorizedoption for handling unauthorized fetches. - Added
getKeyOwner()function.
- Added
The default implementation of
FederationFetchOptions.onNotAcceptableoption now responds withVary: Accept, Signatureheader.Added log messages using the LogTape library. Currently the below logger categories are used:
["fedify"]["fedify", "federation"]["fedify", "federation", "inbox"]["fedify", "federation", "outbox"]
Added
RequestContext.getActor()method.Activity Vocabulary classes now have
typeIdstatic property.Dispatcher setters and inbox listener setters in
Federationnow take a path as`${string}{handle}${string}`instead ofstringso that it is more type-safe.Added generalized object dispatchers. [#33]
- Added
Federation.setObjectDispatcher()method. - Added
ObjectDispatchertype. - Added
ObjectAuthorizePredicatetype. - Added
Context.getObjectUri()method. - Added
RequestContext.getObject()method.
- Added
Version 0.6.1
Released on April 17, 2024.
- Fixed a bug of
new Federation()constructor that if it is once called the process will never exit. [#39]
Version 0.6.0
Released on April 9, 2024.
DocumentLoaderis now propagated to the loaded remote objects from Activity Vocabulary objects. [#27]- Added
optionsparameter to Activity Vocabulary constructors. - Added
optionsparameter toclone()method of Activity Vocabulary objects. - The Activity Vocabulary object passed to
InboxListenernow implicitly loads remote object with an authenticatedDocumentLoader.
- Added
Added
Federation.fetch()method.- Deprecated
Federation.handle()method. UseFederation.fetch()method instead. - Renamed
FederationHandlerParameterstype toFederationFetchOptions. - Added
integrateFetchOptions()function. - Deprecated
integrateHandlerOptions()function.
- Deprecated
Added
@fedify/fedify/x/honomodule for integrating with Hono middleware. [#25]- Added
federation()function. - Added
ContextDataFactorytype.
- Added
Context.sendActivity()method now throwsTypeErrorinstead of silently failing when the givenActivityobject lacks the actor property.Context.sendActivity()method now uses an authenticated document loader under the hood.Added outbox error handler to
Federation.- Added
onOutboxErroroption tonew Federation()constructor. - Added
OutboxErrorHandlertype.
- Added
Version 0.5.2
Released on April 17, 2024.
- Fixed a bug of
new Federation()constructor that if it is once called the process will never exit. [#39]
Version 0.5.1
Released on April 5, 2024.
- Fixed a bug of
Federationthat its actor/collection dispatchers had done content negotiation before determining if the resource exists or not. It also fixed a bug thatintegrateHandler()from@fedify/fedify/x/freshhad responded with406 Not Acceptableinstead of404 Not Foundwhen the resource does not exist in the web browser. [#34]
Version 0.5.0
Released on April 2, 2024.
Fedify is now available on npm: @fedify/fedify. [#24]
Abstract key–value store for caching.
- Added
KvStoreinterface. - Added
KvStoreSetOptionsinterface. - Added
KvKeytype. - Added
DenoKvStoreclass. KvCacheParameters.kvoption now accepts aKvStoreinstead ofDeno.Kv.KvCacheParameters.prefixoption now accepts aKvKeyinstead ofDeno.KvKey.FederationParameters.kvoption now accepts aKvStoreinstead ofDeno.Kv.FederationKvPrefixes.activityIdempotenceoption now accepts aKvKeyinstead ofDeno.KvKey.FederationKvPrefixes.remoteDocumentoption now accepts aKvKeyinstead ofDeno.KvKey.
- Added
Abstract message queue for outgoing activities.
- Added
MessageQueueinterface. - Added
MessageQueueEnqueueOptionsinterface. - Added
InProcessMessageQueueclass. - Added
FederationParameters.queueoption.
- Added
Added
@fedify/fedify/x/denokvmodule for adaptingDeno.KvtoKvStoreandMessageQueue. It is only available in Deno runtime.- Added
DenoKvStoreclass. - Added
DenoKvMessageQueueclass.
- Added
Added
PropertyValueto Activity Vocabulary API. [#29]- Added
PropertyValueclass. new Objectconstructor'sattachmentsoption now acceptsPropertyValueobjects.new Objectconstructor'sattachmentoption now accepts aPropertyValueobject.Object.getAttachments()method now yieldsPropertyValueobjects besidesObjectandLinkobjects.Object.getAttachment()method now returns aPropertyValueobject besides anObjectand aLinkobject.Object.clone()method'sattachmentsoption now acceptsPropertyValueobjects.Object.clone()method'sattachmentoption now accepts aPropertyValueobject.
- Added
Removed dependency on jose.
- Added
exportSpki()function. - Added
importSpki()function.
- Added
Fixed a bug that
Application.manuallyApprovesFollowers,Group.manuallyApprovesFollowers,Organization.manuallyApprovesFollowers,Person.manuallyApprovesFollowers, andService.manuallyApprovesFollowersproperties were not properly displayed in Mastodon.
Version 0.4.0
Released on March 26, 2024.
Added
@fedify/fedify/x/freshmodule for integrating with Fresh middleware.- Added
integrateHandler()function. - Added
integrateHandlerOptions()function.
- Added
Added
getActorHandle()function.Fedify now has authenticated document loader. [#12]
- Added
Context.getDocumentLoader()method. - Added
getAuthenticatedDocumentLoader()function. - Added
AuthenticatedDocumentLoaderFactorytype. - Added
authenticatedDocumentLoaderFactoryoption tonew Federation()constructor. Context.documentLoaderproperty now returns an authenticated document loader in personal inbox listeners. (Note that it's not affected in shared inbox listeners.)
- Added
Added singular accessors to
Object'siconandimageproperties.new Objectconstructor now acceptsiconoption.new Objectconstructor now acceptsimageoption.- Added
Object.getIcon()method. - Added
Object.getImage()method. Object.clone()method now acceptsiconoption.Object.clone()method now acceptsimageoption.
Object'siconandimageproperties no more acceptLinkobjects.new Objectconstructor'siconsoption no more acceptsLinkobjects.new Objectconstructor'simagesoption no more acceptsLinkobjects.Object.getIcons()method no more yieldsLinkobjects.Object.getImages()method no more yieldsLinkobjects.Object.clone()method'siconsoption no more acceptsLinkobjects.Object.clone()method'simagesoption no more acceptsLinkobjects.
Object'sattributedToproperty was renamed toattribution.new Objectconstructor'sattributedTooption was renamed toattribution.new Objectconstructor'sattributedTosoption was renamed toattributions.Object.getAttributedTo()method is renamed toObject.getAttribution().Object.getAttributedTos()method is renamed toObject.getAttributions().Object.clone()method'sattributedTooption is renamed toattribution.Object.clone()method'sattributedTosoption is renamed toattributions.
Object'sattributionproperty (wasattributedTo) now accepts onlyActorobjects.new Objectconstructor'sattributionoption (wasattributedTo) now accepts only anActorobject.new Objectconstructor'sattributionsoption (wasattributedTos) now accepts onlyActorobjects.Object.getAttribution()method (wasgetAttributedTo()) now returns only anActorobject.Object.getAttributions()method (wasgetAttributedTos()) now returns onlyActorobjects.Object.clone()method'sattributionoption (attributedTo) now accepts only anActorobject.Object.clone()method'sattributionsoption (attributedTos) now accepts onlyActorobjects.
Activity'sobjectproperty no more acceptsLinkobjects.new Activityconstructor'sobjectoption no more accepts aLinkobject.new Activityconstructor'sobjectsoption no more acceptsLinkobjects.Activity.getObject()method no more returns aLinkobject.Activity.getObjects()method no more returnsLinkobjects.Activity.clone()method'sobjectoption no more accepts aLinkobject.Activity.clone()method'sobjectsoption no more acceptsLinkobjects.
Activity'sactorproperty now accepts onlyActorobjects.new Activityconstructor'sactoroption now accepts only anActorobject.new Activityconstructor'sactorsoption now accepts onlyActorobjects.Activity.getActor()method now returns only anActorobject.Activity.getActors()method now returns onlyActorobjects.Activity.clone()method'sactoroption now accepts only anActorobject.Activity.clone()method'sactorsoption now accepts onlyActorobjects.
Added
sensitiveproperty toObjectclass.new Objectconstructor now acceptssensitiveoption.- Added
Object.sensitiveattribute. Object.clone()method now acceptssensitiveoption.
Now
lookupWebFinger()follows redirections.The
http://webfinger.net/rel/profile-pagelinks in WebFinger responses now omittypeproperty.
Version 0.3.0
Released on March 15, 2024.
Added utility functions for responding with an ActivityPub object:
- Added
respondWithObject()function. - Added
respondWithObjectIfAcceptable()function. - Added
RespondWithObjectOptionsinterface.
- Added
Added utility functions for generating and exporting cryptographic keys which are compatible with popular ActivityPub software:
- Added
generateCryptoKeyPair()function. - Added
exportJwk()function. - Added
importJwk()function.
- Added
The following functions and methods now throw
TypeErrorif the specifiedCryptoKeyis notextractable:Context.getActorKey()methodContext.sendActivity()methodFederation.sendActivity()method
Added
immediateoption toContext.sendActivity()andFederation.sendActivity()methods.Added
SendActivityOptionsinterface.Now
onNotFound/onNotAcceptableoptions are optional forFederation.handle()method. [#9]
Version 0.2.0
Released on March 10, 2024.
Implemented NodeInfo 2.1 protocol. [#1]
- Now
Federation.handle()accepts requests for /.well-known/nodeinfo. - Added
Federation.setNodeInfoDispatcher()method. - Added
Context.getNodeInfoUri()method. - Added
NodeInfointerface. - Added
Softwareinterface. - Added
Protocoltype. - Added
Servicesinterface. - Added
InboundServicetype. - Added
OutboundServicetype. - Added
Usageinterface. - Added
NodeInfoDispatchertype. - Added
nodeInfoToJson()function.
- Now
Implemented WebFinger client.
- Added
lookupObject()function. - Added
lookupWebFinger()function.
- Added
Federation.handle()now responds withAccess-Control-Allow-Origin: *header for WebFinger requests.fetchDocumentLoader(), the default document loader, now sendsAccept: application/activity+json, application/ld+jsonheader (wasAccept: application/ld+jsononly).
Version 0.1.0
Initial release. Released on March 8, 2024.