🌿 [Scheduled] Upgrade Fern#445
Open
fern-api[bot] wants to merge 1 commit into
Open
Conversation
Contributor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Upgrading from
5.44.4to5.64.0- Changelog5.64.0fix:Fix prototargetpath resolution when using remote git sources. Previously the targetwas resolved relative to the workspace instead of the cloned repository, causing
"file missing" errors.
feat:Support commit SHA references in git sourcereffield. Previously only branch namesand tags were supported; commit SHAs now work via fetch+checkout.
5.63.1fix:Prevent --version AUTO from embedding literal 'AUTO' in generated SDK code during remote generation. The magic placeholder is now substituted before IR generation in the remote path, matching the local generation fix.5.63.0feat:Extend dynamic IR OAuth types with custom properties and populate them inDynamicSnippetsConverter, enabling dynamic snippet generators to include
custom OAuth token endpoint request parameters in generated code examples.
5.62.2fix:Strip CLI-only config keys (e.g.user-agent) from the custom configbefore forwarding to generator containers, preventing strict validation
errors in generators that reject unknown keys.
5.62.1fix:Fix float primitive types rendering as 'double' in documentation. Float types now correctly render as 'float'.54 additional updates, see more
5.62.0feat:Add--generate-testsflag tofern generateto enable test file generationeven when outputting to a local file system. Previously, tests were only generated
for GitHub output modes.
5.61.0feat:Adduser-agentgenerator config option that accepts a template string forthe User-Agent header. Supported placeholders:
{packageName},{version},{language},{generatorVersion},{organization},{apiName}. When absent,defaults to
{packageName}/{version}(current behavior, non-breaking).5.60.0feat:Addmcpoption topage-actionsindocs.yml. When set tofalse, the MCP serverendpoint is disabled, its URL is omitted from
llms.txtand agent prompts, and the"Connect to Claude Code" / "Connect to Cursor" buttons are hidden.
fix:Addpayload-formatsupport for asymmetric webhook signature verification,allowing the timestamp and other components to be included in the signed
payload. Previously, only the raw body was signed for asymmetric webhooks,
making the timestamp tolerance check ineffective against replay attacks.
5.59.0feat:Extract per-content-type OpenAPI examples into endpoint-level v2Examplestagged with their content type. When an operation declares multiple content
types (e.g. application/json and application/ld+json) with distinct examples,
the importer now elevates those examples so docs can display the correct
example body when the user switches content types.
5.58.0fix:Fix product-level landing pages being dropped for unversioned products within a product group, and propagate top-level landing page to versioned navigation nodes as a fallback.5.57.0feat:When running inside GitHub Actions, notable SDK generation events are now surfaced as::notice::annotations in the workflow run page and appended to the step summary.Annotated events include PR creation, package publication (npm, PyPI, Maven, etc.),
no-changes-detected, and version tagging. Previously, these details were only visible
in debug-level log output.
5.56.4fix:Fix remote generation CLI hanging indefinitely when S3 download stalls.Added connection timeout (60s) and overall download timeout (5 min) to
both downloadZipForTask and downloadAndExtractZipToDirectory, so the CLI
fails with a clear error instead of blocking forever.
5.56.3fix:Fix ledger publish path not forwarding thebasepathAwareflag formulti-source docs sites, causing the manifest to be written to the
wrong storage key. Affected sites served stale content from the last
legacy publish instead of the updated ledger manifest.
5.56.1fix:Fixfern docs devfailing with pnpm 10+ due to missingpackagesfieldin generated
pnpm-workspace.yamland missing-wflag onpnpm i esbuild.5.56.0feat:Adddisambiguate-request-namessetting to control whether generated requestwrapper names that collide with component schema names are renamed from
"*Request" to "*Body". Defaults to true (current behavior). A CLI migration
for version 4.106.1 is included to explicitly set the flag to false for
projects that existed before disambiguation was introduced, preserving their
original "*Request" names.
5.55.2fix:Fixfern docs devhot-reload for pages referenced outside the fern/ directory.Previously, only changes to files inside the fern/ folder triggered preview refreshes.
Now, external directories containing referenced docs pages are also watched.
5.55.1fix:Fix--instanceflag silently publishing to the wrong docs instance when the provided URL does not match any configured instance. Previously the CLI would fall back to the first configured instance; now it fails with an error listing available instances.fix:Replace sed-based magic version replacement with pure Node.js implementationin local generation mode. Fixes "illegal byte sequence" errors on binary files
and eliminates platform-specific behavior.
fix:Fix a 500 (PruneEmptyError) in localized docs when a translated OpenAPI spec changed astructural identifier (e.g. an OpenAPI tag name, which derives subpackage and endpoint ids)
relative to the default-locale spec. API-reference navigation nodes are now matched to the
translated definition by a stable locator (HTTP method + path) in addition to id, so localized
sidebar titles still apply and the renderer can resolve the served API. When a node cannot be
matched at all, the affected API falls back to the default-locale definition with a warning
instead of crashing.
5.55.0feat:Default docs deploy mode is now "ledger", enabling faster incremental deploymentsand faster first-time page renders for uncached pages. To take advantage of this,
bump the
versionfield in yourfern/fern.config.jsonto this release orlater — the CLI auto-redirects to the pinned version, so older pins will not pick
up the new default. You can also bump the version in one click from the Fern
dashboard. To revert back to the legacy flow, add
FERN_DOCS_DEPLOY_MODE: legacyto the
envsection of your GitHub Actions workflow. Legacy deploys will beremoved in a future version of the CLI.
5.54.0feat:Detectapi-key: OIDCin NuGet output config and pass OIDC marker tothe C# generator for Trusted Publishing workflow generation.
5.53.1fix:Fix the next SDK version regressing to a stale baseline (e.g.0.0.200) when--version AUTOis omitted. When computing the next version, Fern now consultsevery available source (package registry, GitHub release, and the
sdkVersionrecorded in
.fern/metadata.json) and bumps the highest one, so a stale registryversion can no longer override the version Fern last generated. For example,
5.0.0now correctly bumps to5.0.1.5.53.0feat:Add support for remote git sources in generators.yml. API specs can now referencefiles in git repositories using a
gitblock withrepo,ref, andpathfields.The CLI shallow-clones the repository at generation time using native git credentials.
5.52.0feat:Add alayout.changelog-layoutoption to docs.yml. Set it toclassicto render thelegacy stacked changelog layout, or
timeline(the default) for the searchabletimeline-of-cards layout.
5.51.2fix:Fix inline enum type names ignoring parent schema'sx-fern-type-nameoverride.When a parent schema was renamed via
x-fern-type-name, inline enum propertiesstill derived their type name from the original parent name instead of the override.
5.51.1fix:Fix--version AUTOcorrupting generated SDK code by replacing all occurrencesof the literal string "AUTO" (e.g.
SENSOR_MODE_AUTO,CORRELATION_TYPE_AUTOMATED)with the version number. The generator now receives the safe magic placeholder
version (
0.0.0-fern-placeholder) instead of "AUTO", and the post-generationsed replacement targets only that placeholder.
5.51.0feat:Preserve OpenAPIinfo.versionthrough the IR asspecVersion. This allowsnon-semver version formats (e.g. CalVer
2026-06-23) to be carried throughthe pipeline instead of being replaced with the default
1.0.0.5.50.6fix:Forward edit-this-page GitHub config (owner/repo/branch/host) from docs.ymlinto the ledger manifest so the docs reader can synthesize the correct
"Edit this page" URL without depending on runtime git provenance.
5.50.5fix:fern checkno longer reports valid examples as invalid when a schema usespatternProperties(OpenAPI 3.1 / JSON Schema). When a schema declarespatternProperties, example keys are no longer flagged as unexpected additionalproperties — including under
additionalProperties: false.5.50.4fix:Fixed the local C# dynamic-snippet test runner so it strips the docs-onlyexported-client-class-nameoverride before generating snippet tests. The compiled snippets nowreference the generated client class instead of the customer-provided wrapper, which is not part
of generator output.
5.50.3fix:Fixes translated locales in ledger publishing mode (currently opt-in).5.50.2fix:Add retry with exponential backoff to registerApiDefinition during docspublish. Large docs sites (e.g. 30+ API versions) could hit transient
connection aborts from FDR; the CLI now retries up to 3 times with
1 s / 2 s / 4 s delays before failing.
5.50.0feat:Add docs deployment ledger. SetFERN_DOCS_DEPLOY_MODE=ledgertopublish via the new ledger backend;
legacy(default) uses theexisting register flow. The ledger path uses content-addressed
storage for incremental deploys and supports multi-locale
translations (including localized API reference content with
per-locale apiManifest blobs and sidebar titles), custom JS
components, favicon resolution, git provenance metadata,
multi-domain forwarding, stable file-path references in page
markdown, MIME-type inference for uploads, and a dedicated preview
endpoint.
5.49.3fix:When a generator breaks an import cycle by relocating types into a sharedpackage, the local generation runner now applies those relocations to the IR
that powers host-side dynamic snippet test generation. This keeps the
generated dynamic snippets referencing each relocated type from the same
package the generator declares it in, fixing undefined-symbol compile errors
in the Go SDK's dynamic snippet tests.
5.49.2fix:infer-discriminated-union-base-propertiesnow lifts properties that every variant inherits via a sharedallOf $refparent. Previously these were dropped to protect TypeScript's_Basefrom colliding with the real parent interface, which left Go and C# unions missing common fields likeid,name, anddisplay_name.5.49.1fix:Library docs generator now writes module overview pages asindex.mdxinside theirdirectory (e.g.
adapters/index.mdx) instead of as sibling files (adapters.mdx),eliminating duplicate entries in the sidebar for library autodocs output.
5.49.0feat:Add support forx-fern-subtitleOpenAPI extension on endpoints. When set,the subtitle is rendered below the endpoint title in the docs UI.
5.48.0feat:Add a--localflag tofern docs md generatethat runs the librarydocumentation parsers locally in Docker instead of using Fern's servers.
Local generation requires no authentication and operates on
pathinputs(local source);
gitinputs continue to be generated remotely.5.47.6fix:Fix frontmatter values with leading zeros being corrupted during docs publish.grayMatter.stringify()inparseImagePathswould strip quotes from valueslike
'001999'(non-octal digits), causing downstream YAML 1.2 parsers tointerpret them as integers and lose leading zeros.
5.47.5fix:Fix v3 OpenAPI importer dropping types that are only referenced through alist/mapof a$refwhen audience filtering is enabled. Array and mapaliases now record the referenced named type in
referencedTypes(matchinghow object properties already do), so audience reachability no longer prunes
the referenced type and leaves a dangling reference. This restores the
"Show N variants" UI in docs for discriminated unions referenced via a list
(e.g. Cohere's v2 chat
messagesfield under an audience filter).5.47.4fix:Group GraphQL queries by parent field in the sidebar; mutations and subscriptions remain flat. Field path is now included on all GraphQL operations for correct snippet nesting.fix:Include field-level arguments when converting GraphQL object types and interfacesto FDR format. Previously, arguments were only captured for top-level query/mutation
fields but not for nested object type fields (e.g., Image.url(width, height, lossy)).
Namespace grouping types (object types whose fields are all promoted to top-level
operations) are no longer double-registered as plain type definitions.
5.47.3fix:Use string literal forthis.namein error classes instead ofthis.constructor.name, which gets mangled by minifiers.fix:Fix text/* content types (e.g. text/csv, text/xml) being silently convertedto text/plain during OpenAPI export. The original media type is now preserved
through the IR via a new optional
contentTypefield onTextResponse.5.47.2fix:Stop dropping custom scalars in the GraphQL converter. Custom scalars (e.g.DateTime,URL,EmailAddress) are now emitted as named alias types in thetypesmap with a stableid, and references to them point to that id so the type can be linked to in documentation.
5.47.1fix:Fix v3 OpenAPI importer producing empty discriminated unions whendiscriminator.propertyNameis present butdiscriminator.mappingis absent.The importer now infers the mapping from
oneOf/anyOf$refschemas,using
const/single-elementenumvalues on the discriminant property(falling back to the schema name from the
$refpath). This restores the"Show N variants" UI in docs for specs like Cohere's chat
messagesfield.5.47.0feat:Addpage-actions.options.skillsto docs.yml to enable and configure the "Install skills"page action on docs sites. Presence of the key enables the action (an empty object enables it
with all defaults);
title,description,learn-more-url,repository, andinstall-command(string or list, rendered one command per line) customize the modal, andskillslists the available skills. If the site also serves a/.well-knownskills manifest,the served manifest replaces the hand-listed skills.
feat:Upload Agent Skills bundles placed under.well-known/skills/or.well-known/agent-skills/in the docs folder when publishing docs, so Fern-hosted docs sites serve them and
npx skills add https://<docs-domain>installs them.fern checknow validates skillbundles: the
index.jsondiscovery manifest must exist and parse, and each skill'sSKILL.mdfrontmatter needs a kebab-casename(max 64 characters) matching its parentdirectory and a non-empty
description(max 1024 characters).5.46.1fix:Bump bundled@fern-api/replay(via generator-cli 0.9.38) to 0.18.0: replaydetection filters
.fernignore-protected files before materializing patches,handles trailing-slash patterns like
docs/, and no longer crashes with anunhandled
write EPIPEduring patch application.5.46.0feat:Add OIDC support for PyPI publishing in local generation. Whentoken: OIDCis configured for a PyPI output, the CLI now detectsthe OIDC credential and propagates it through both the GitHub publish
info and the publish config so the Python generator can activate its
OIDC trusted-publisher workflow.
feat:Track which validation rules fired duringfern checkas part of the PostHog CLI telemetry event.The event now includes
validationRules(array of rule names that produced violations),numErrors,numWarnings, andpassedproperties.5.45.5fix:Bump @fern-api/generator-cli to 0.9.36: AutoVersionStep now calls the hosted FAIservice with
fernTokenwhen no BAMLaiconfig is supplied, restoring realversion bumps and changelog entries for replay-enabled remote generations.
5.45.4fix:Fixfs.cpresolving relative symlinks to absolute temp-directory pathsduring local generation. Adds
verbatimSymlinks: trueso symlinks like.claude -> .agentsare preserved as-is when copying generator output.5.45.2fix:Fix native generator execution to correctly pass raw API specs directoryvia FERN_SPECS_DIR environment variable, enabling local seed tests for
generators that consume OpenAPI specs (e.g. CLI generator).
5.45.1fix:Fix v3 OpenAPI importer to checkx-fern-server-nameextension ingetEndpointBaseUrls(),preventing path-level server descriptions from being misinterpreted as base URL IDs when the
extension is present.
5.45.0feat:Theai.providerfield ingenerators.ymlnow uses BAML provideridentifiers directly.
bedrockhas been renamed toaws-bedrock.Update your config:
provider: bedrock→provider: aws-bedrock.5.44.14fix:Fixfern exportto emit top-levelserversarray for multi-URL environments(
multipleBaseUrls). Previously only single-URL environments produced servers.Each environment × base-URL combination is now listed with a description like
"Production (api)". Endpoint-level servers also now include the environmentname in their description.
5.44.13fix:Fixfern checkparameter-name collision validator to honorx-fern-parameter-name.Previously, parameters with distinct
x-fern-parameter-nameoverrides were stillflagged as collisions based on their raw OpenAPI
namefield.5.44.12fix:Fix SPM auto-compiling dynamic snippet files as 650+ separate executables bymoving snippets into Tests/Snippets/ and wrapping them as library code (compiled
as part of the test target instead of standalone executables).
5.44.11fix:Fix AI example enhancement to backfill missing required fields from the auto-generatedexample. When the AI Lambda produces a partial example (e.g., missing fields from nested
allOf chains), the missing fields are now merged from the correct auto-generated example,
ensuring all required fields are present in published documentation.
5.44.10fix:Fix false positive warnings in themissing-redirectscheck for changelogentries and embedded content pages. FDR stores an empty slug for pages that
don't resolve to a standalone navigation node; these are no longer reported as
removed pages whose previously published URL was "/", even when the site's home
page lives under a non-root slug or basepath.
5.44.9fix:Fixfern checkvalidators (valid-local-references,no-non-component-refs) incorrectly reporting$refvalues found inside YAML comments.5.44.8fix:Fix example generation for nested allOf $ref chains. When a schema usesmulti-level allOf (e.g. UserPost → UserBase → UserStrict), properties from
grandparent schemas were missing from generated code snippets because
mergeAllOfProperties only resolved one level of allOf. Now recursively
resolves the full chain so all required fields appear in examples.
5.44.7fix:Fix AsyncAPI v2 enum collision where multiple channels with identicallynamed query parameters (or headers/path params) that have different enum
values would overwrite each other. The v2 channel converter now passes
parameterNamePrefix(the channel path) to the ParameterConverter,matching the v3 converter behavior.
5.44.6fix:Update CLI irVersion metadata from 66 to 67 so that FDR correctlyreports IR 67-compatible generator versions (e.g. CLI generator ≥ 0.2.0)
when resolving
fern generator upgrade.Requested by: Fern Dashboard (signalwire)
Upgrading from
5.44.4to5.64.0- Changelog5.64.0fix:Fix prototargetpath resolution when using remote git sources. Previously the targetwas resolved relative to the workspace instead of the cloned repository, causing
"file missing" errors.
feat:Support commit SHA references in git sourcereffield. Previously only branch namesand tags were supported; commit SHAs now work via fetch+checkout.
5.63.1fix:Prevent --version AUTO from embedding literal 'AUTO' in generated SDK code during remote generation. The magic placeholder is now substituted before IR generation in the remote path, matching the local generation fix.5.63.0feat:Extend dynamic IR OAuth types with custom properties and populate them inDynamicSnippetsConverter, enabling dynamic snippet generators to include
custom OAuth token endpoint request parameters in generated code examples.
5.62.2fix:Strip CLI-only config keys (e.g.user-agent) from the custom configbefore forwarding to generator containers, preventing strict validation
errors in generators that reject unknown keys.
5.62.1fix:Fix float primitive types rendering as 'double' in documentation. Float types now correctly render as 'float'.54 additional updates, see more
5.62.0feat:Add--generate-testsflag tofern generateto enable test file generationeven when outputting to a local file system. Previously, tests were only generated
for GitHub output modes.
5.61.0feat:Adduser-agentgenerator config option that accepts a template string forthe User-Agent header. Supported placeholders:
{packageName},{version},{language},{generatorVersion},{organization},{apiName}. When absent,defaults to
{packageName}/{version}(current behavior, non-breaking).5.60.0feat:Addmcpoption topage-actionsindocs.yml. When set tofalse, the MCP serverendpoint is disabled, its URL is omitted from
llms.txtand agent prompts, and the"Connect to Claude Code" / "Connect to Cursor" buttons are hidden.
fix:Addpayload-formatsupport for asymmetric webhook signature verification,allowing the timestamp and other components to be included in the signed
payload. Previously, only the raw body was signed for asymmetric webhooks,
making the timestamp tolerance check ineffective against replay attacks.
5.59.0feat:Extract per-content-type OpenAPI examples into endpoint-level v2Examplestagged with their content type. When an operation declares multiple content
types (e.g. application/json and application/ld+json) with distinct examples,
the importer now elevates those examples so docs can display the correct
example body when the user switches content types.
5.58.0fix:Fix product-level landing pages being dropped for unversioned products within a product group, and propagate top-level landing page to versioned navigation nodes as a fallback.5.57.0feat:When running inside GitHub Actions, notable SDK generation events are now surfaced as::notice::annotations in the workflow run page and appended to the step summary.Annotated events include PR creation, package publication (npm, PyPI, Maven, etc.),
no-changes-detected, and version tagging. Previously, these details were only visible
in debug-level log output.
5.56.4fix:Fix remote generation CLI hanging indefinitely when S3 download stalls.Added connection timeout (60s) and overall download timeout (5 min) to
both downloadZipForTask and downloadAndExtractZipToDirectory, so the CLI
fails with a clear error instead of blocking forever.
5.56.3fix:Fix ledger publish path not forwarding thebasepathAwareflag formulti-source docs sites, causing the manifest to be written to the
wrong storage key. Affected sites served stale content from the last
legacy publish instead of the updated ledger manifest.
5.56.1fix:Fixfern docs devfailing with pnpm 10+ due to missingpackagesfieldin generated
pnpm-workspace.yamland missing-wflag onpnpm i esbuild.5.56.0feat:Adddisambiguate-request-namessetting to control whether generated requestwrapper names that collide with component schema names are renamed from
"*Request" to "*Body". Defaults to true (current behavior). A CLI migration
for version 4.106.1 is included to explicitly set the flag to false for
projects that existed before disambiguation was introduced, preserving their
original "*Request" names.
5.55.2fix:Fixfern docs devhot-reload for pages referenced outside the fern/ directory.Previously, only changes to files inside the fern/ folder triggered preview refreshes.
Now, external directories containing referenced docs pages are also watched.
5.55.1fix:Fix--instanceflag silently publishing to the wrong docs instance when the provided URL does not match any configured instance. Previously the CLI would fall back to the first configured instance; now it fails with an error listing available instances.fix:Replace sed-based magic version replacement with pure Node.js implementationin local generation mode. Fixes "illegal byte sequence" errors on binary files
and eliminates platform-specific behavior.
fix:Fix a 500 (PruneEmptyError) in localized docs when a translated OpenAPI spec changed astructural identifier (e.g. an OpenAPI tag name, which derives subpackage and endpoint ids)
relative to the default-locale spec. API-reference navigation nodes are now matched to the
translated definition by a stable locator (HTTP method + path) in addition to id, so localized
sidebar titles still apply and the renderer can resolve the served API. When a node cannot be
matched at all, the affected API falls back to the default-locale definition with a warning
instead of crashing.
5.55.0feat:Default docs deploy mode is now "ledger", enabling faster incremental deploymentsand faster first-time page renders for uncached pages. To take advantage of this,
bump the
versionfield in yourfern/fern.config.jsonto this release orlater — the CLI auto-redirects to the pinned version, so older pins will not pick
up the new default. You can also bump the version in one click from the Fern
dashboard. To revert back to the legacy flow, add
FERN_DOCS_DEPLOY_MODE: legacyto the
envsection of your GitHub Actions workflow. Legacy deploys will beremoved in a future version of the CLI.
5.54.0feat:Detectapi-key: OIDCin NuGet output config and pass OIDC marker tothe C# generator for Trusted Publishing workflow generation.
5.53.1fix:Fix the next SDK version regressing to a stale baseline (e.g.0.0.200) when--version AUTOis omitted. When computing the next version, Fern now consultsevery available source (package registry, GitHub release, and the
sdkVersionrecorded in
.fern/metadata.json) and bumps the highest one, so a stale registryversion can no longer override the version Fern last generated. For example,
5.0.0now correctly bumps to5.0.1.5.53.0feat:Add support for remote git sources in generators.yml. API specs can now referencefiles in git repositories using a
gitblock withrepo,ref, andpathfields.The CLI shallow-clones the repository at generation time using native git credentials.
5.52.0feat:Add alayout.changelog-layoutoption to docs.yml. Set it toclassicto render thelegacy stacked changelog layout, or
timeline(the default) for the searchabletimeline-of-cards layout.
5.51.2fix:Fix inline enum type names ignoring parent schema'sx-fern-type-nameoverride.When a parent schema was renamed via
x-fern-type-name, inline enum propertiesstill derived their type name from the original parent name instead of the override.
5.51.1fix:Fix--version AUTOcorrupting generated SDK code by replacing all occurrencesof the literal string "AUTO" (e.g.
SENSOR_MODE_AUTO,CORRELATION_TYPE_AUTOMATED)with the version number. The generator now receives the safe magic placeholder
version (
0.0.0-fern-placeholder) instead of "AUTO", and the post-generationsed replacement targets only that placeholder.
5.51.0feat:Preserve OpenAPIinfo.versionthrough the IR asspecVersion. This allowsnon-semver version formats (e.g. CalVer
2026-06-23) to be carried throughthe pipeline instead of being replaced with the default
1.0.0.5.50.6fix:Forward edit-this-page GitHub config (owner/repo/branch/host) from docs.ymlinto the ledger manifest so the docs reader can synthesize the correct
"Edit this page" URL without depending on runtime git provenance.
5.50.5fix:fern checkno longer reports valid examples as invalid when a schema usespatternProperties(OpenAPI 3.1 / JSON Schema). When a schema declarespatternProperties, example keys are no longer flagged as unexpected additionalproperties — including under
additionalProperties: false.5.50.4fix:Fixed the local C# dynamic-snippet test runner so it strips the docs-onlyexported-client-class-nameoverride before generating snippet tests. The compiled snippets nowreference the generated client class instead of the customer-provided wrapper, which is not part
of generator output.
5.50.3fix:Fixes translated locales in ledger publishing mode (currently opt-in).5.50.2fix:Add retry with exponential backoff to registerApiDefinition during docspublish. Large docs sites (e.g. 30+ API versions) could hit transient
connection aborts from FDR; the CLI now retries up to 3 times with
1 s / 2 s / 4 s delays before failing.
5.50.0feat:Add docs deployment ledger. SetFERN_DOCS_DEPLOY_MODE=ledgertopublish via the new ledger backend;
legacy(default) uses theexisting register flow. The ledger path uses content-addressed
storage for incremental deploys and supports multi-locale
translations (including localized API reference content with
per-locale apiManifest blobs and sidebar titles), custom JS
components, favicon resolution, git provenance metadata,
multi-domain forwarding, stable file-path references in page
markdown, MIME-type inference for uploads, and a dedicated preview
endpoint.
5.49.3fix:When a generator breaks an import cycle by relocating types into a sharedpackage, the local generation runner now applies those relocations to the IR
that powers host-side dynamic snippet test generation. This keeps the
generated dynamic snippets referencing each relocated type from the same
package the generator declares it in, fixing undefined-symbol compile errors
in the Go SDK's dynamic snippet tests.
5.49.2fix:infer-discriminated-union-base-propertiesnow lifts properties that every variant inherits via a sharedallOf $refparent. Previously these were dropped to protect TypeScript's_Basefrom colliding with the real parent interface, which left Go and C# unions missing common fields likeid,name, anddisplay_name.5.49.1fix:Library docs generator now writes module overview pages asindex.mdxinside theirdirectory (e.g.
adapters/index.mdx) instead of as sibling files (adapters.mdx),eliminating duplicate entries in the sidebar for library autodocs output.
5.49.0feat:Add support forx-fern-subtitleOpenAPI extension on endpoints. When set,the subtitle is rendered below the endpoint title in the docs UI.
5.48.0feat:Add a--localflag tofern docs md generatethat runs the librarydocumentation parsers locally in Docker instead of using Fern's servers.
Local generation requires no authentication and operates on
pathinputs(local source);
gitinputs continue to be generated remotely.5.47.6fix:Fix frontmatter values with leading zeros being corrupted during docs publish.grayMatter.stringify()inparseImagePathswould strip quotes from valueslike
'001999'(non-octal digits), causing downstream YAML 1.2 parsers tointerpret them as integers and lose leading zeros.
5.47.5fix:Fix v3 OpenAPI importer dropping types that are only referenced through alist/mapof a$refwhen audience filtering is enabled. Array and mapaliases now record the referenced named type in
referencedTypes(matchinghow object properties already do), so audience reachability no longer prunes
the referenced type and leaves a dangling reference. This restores the
"Show N variants" UI in docs for discriminated unions referenced via a list
(e.g. Cohere's v2 chat
messagesfield under an audience filter).5.47.4fix:Group GraphQL queries by parent field in the sidebar; mutations and subscriptions remain flat. Field path is now included on all GraphQL operations for correct snippet nesting.fix:Include field-level arguments when converting GraphQL object types and interfacesto FDR format. Previously, arguments were only captured for top-level query/mutation
fields but not for nested object type fields (e.g., Image.url(width, height, lossy)).
Namespace grouping types (object types whose fields are all promoted to top-level
operations) are no longer double-registered as plain type definitions.
5.47.3fix:Use string literal forthis.namein error classes instead ofthis.constructor.name, which gets mangled by minifiers.fix:Fix text/* content types (e.g. text/csv, text/xml) being silently convertedto text/plain during OpenAPI export. The original media type is now preserved
through the IR via a new optional
contentTypefield onTextResponse.5.47.2fix:Stop dropping custom scalars in the GraphQL converter. Custom scalars (e.g.DateTime,URL,EmailAddress) are now emitted as named alias types in thetypesmap with a stableid, and references to them point to that id so the type can be linked to in documentation.
5.47.1fix:Fix v3 OpenAPI importer producing empty discriminated unions whendiscriminator.propertyNameis present butdiscriminator.mappingis absent.The importer now infers the mapping from
oneOf/anyOf$refschemas,using
const/single-elementenumvalues on the discriminant property(falling back to the schema name from the
$refpath). This restores the"Show N variants" UI in docs for specs like Cohere's chat
messagesfield.5.47.0feat:Addpage-actions.options.skillsto docs.yml to enable and configure the "Install skills"page action on docs sites. Presence of the key enables the action (an empty object enables it
with all defaults);
title,description,learn-more-url,repository, andinstall-command(string or list, rendered one command per line) customize the modal, andskillslists the available skills. If the site also serves a/.well-knownskills manifest,the served manifest replaces the hand-listed skills.
feat:Upload Agent Skills bundles placed under.well-known/skills/or.well-known/agent-skills/in the docs folder when publishing docs, so Fern-hosted docs sites serve them and
npx skills add https://<docs-domain>installs them.fern checknow validates skillbundles: the
index.jsondiscovery manifest must exist and parse, and each skill'sSKILL.mdfrontmatter needs a kebab-casename(max 64 characters) matching its parentdirectory and a non-empty
description(max 1024 characters).5.46.1fix:Bump bundled@fern-api/replay(via generator-cli 0.9.38) to 0.18.0: replaydetection filters
.fernignore-protected files before materializing patches,handles trailing-slash patterns like
docs/, and no longer crashes with anunhandled
write EPIPEduring patch application.5.46.0feat:Add OIDC support for PyPI publishing in local generation. Whentoken: OIDCis configured for a PyPI output, the CLI now detectsthe OIDC credential and propagates it through both the GitHub publish
info and the publish config so the Python generator can activate its
OIDC trusted-publisher workflow.
feat:Track which validation rules fired duringfern checkas part of the PostHog CLI telemetry event.The event now includes
validationRules(array of rule names that produced violations),numErrors,numWarnings, andpassedproperties.5.45.5fix:Bump @fern-api/generator-cli to 0.9.36: AutoVersionStep now calls the hosted FAIservice with
fernTokenwhen no BAMLaiconfig is supplied, restoring realversion bumps and changelog entries for replay-enabled remote generations.
5.45.4fix:Fixfs.cpresolving relative symlinks to absolute temp-directory pathsduring local generation. Adds
verbatimSymlinks: trueso symlinks like.claude -> .agentsare preserved as-is when copying generator output.5.45.2fix:Fix native generator execution to correctly pass raw API specs directoryvia FERN_SPECS_DIR environment variable, enabling local seed tests for
generators that consume OpenAPI specs (e.g. CLI generator).
5.45.1fix:Fix v3 OpenAPI importer to checkx-fern-server-nameextension ingetEndpointBaseUrls(),preventing path-level server descriptions from being misinterpreted as base URL IDs when the
extension is present.
5.45.0feat:Theai.providerfield ingenerators.ymlnow uses BAML provideridentifiers directly.
bedrockhas been renamed toaws-bedrock.Update your config:
provider: bedrock→provider: aws-bedrock.5.44.14fix:Fixfern exportto emit top-levelserversarray for multi-URL environments(
multipleBaseUrls). Previously only single-URL environments produced servers.Each environment × base-URL combination is now listed with a description like
"Production (api)". Endpoint-level servers also now include the environmentname in their description.
5.44.13fix:Fixfern checkparameter-name collision validator to honorx-fern-parameter-name.Previously, parameters with distinct
x-fern-parameter-nameoverrides were stillflagged as collisions based on their raw OpenAPI
namefield.5.44.12fix:Fix SPM auto-compiling dynamic snippet files as 650+ separate executables bymoving snippets into Tests/Snippets/ and wrapping them as library code (compiled
as part of the test target instead of standalone executables).
5.44.11fix:Fix AI example enhancement to backfill missing required fields from the auto-generatedexample. When the AI Lambda produces a partial example (e.g., missing fields from nested
allOf chains), the missing fields are now merged from the correct auto-generated example,
ensuring all required fields are present in published documentation.
5.44.10fix:Fix false positive warnings in themissing-redirectscheck for changelogentries and embedded content pages. FDR stores an empty slug for pages that
don't resolve to a standalone navigation node; these are no longer reported as
removed pages whose previously published URL was "/", even when the site's home
page lives under a non-root slug or basepath.
5.44.9fix:Fixfern checkvalidators (valid-local-references,no-non-component-refs) incorrectly reporting$refvalues found inside YAML comments.5.44.8fix:Fix example generation for nested allOf $ref chains. When a schema usesmulti-level allOf (e.g. UserPost → UserBase → UserStrict), properties from
grandparent schemas were missing from generated code snippets because
mergeAllOfProperties only resolved one level of allOf. Now recursively
resolves the full chain so all required fields appear in examples.
5.44.7fix:Fix AsyncAPI v2 enum collision where multiple channels with identicallynamed query parameters (or headers/path params) that have different enum
values would overwrite each other. The v2 channel converter now passes
parameterNamePrefix(the channel path) to the ParameterConverter,matching the v3 converter behavior.
5.44.6fix:Update CLI irVersion metadata from 66 to 67 so that FDR correctlyreports IR 67-compatible generator versions (e.g. CLI generator ≥ 0.2.0)
when resolving
fern generator upgrade.Requested by: Fern Dashboard (signalwire)