4.65.1
(fix): Fixed a performance issue in fern check where valid-markdown-links
repeatedly reprocessed duplicate API descriptions and pathnames in API
sections, significantly improving runtime on large docs sites.
4.64.1
(chore): Tag Sentry errors with fern_run_id and github_run_id for cross-run
correlation. The CLI now generates a FERN_RUN_ID at startup if one is
not already set in the environment (e.g. by the fern-api/actions/setup-cli
GitHub Action), threading a single correlation ID through all CLI
invocations in a workflow run.
4.65.0
(feat): Add --output flag to fern sdk preview that accepts filesystem paths
and/or registry URLs. Omit to publish to the default preview registry and
write to a temp directory. Use --output <path> for disk-only output, or
--output <path> --output <url> to write to disk and publish to a custom registry.
4.64.0
(feat): Support default on discriminant properties in OpenAPI discriminated unions. When a variant’s
discriminant property has a default value matching its const value, the default variant is
threaded through the IR so generators can fall back to it when the discriminant field is omitted.
The x-fern-default extension takes priority over default if both are set.
4.63.5
(fix): Fix union variant display names showing “object” instead of proper
schema names in documentation.
4.63.4
(fix): Add no-conflicting-parameter-names OSS validation rule to fern check.
Detects when header parameters and query/path parameters on the same endpoint
normalize to the same camelCase name, which causes broken generated SDK code
(Python SyntaxError from duplicate keyword arguments, TypeScript duplicate
interface properties). The rule reports an error at validation time so the
collision is caught before code generation.
4.63.3
(fix): Fix coerce-enums-to-literals: false not being respected for boolean
single-value enums (type: boolean, enum: [true]). Previously, boolean
enums were always coerced to literals regardless of the setting. Now
getSingleBooleanEnumValue checks coerceEnumsToLiterals consistently
with the string enum path.
4.63.2
(fix): Add log rotation for fern docs dev debug logs in ~/.fern/logs/.
Old log files are automatically deleted when the directory exceeds
100 MB, keeping the most recent logs.
4.63.1
(fix): Fix Go dynamic snippets not being generated during docs publish.
The Go package name comparison between snippet configuration and
generator output was failing due to an https:// prefix mismatch,
causing docs to fall back to raw net/http code instead of
SDK-idiomatic snippets.
4.63.0
(feat): Speed up fern docs dev bundle refresh by renaming the old bundle
and deleting it asynchronously instead of blocking on removal.
4.62.6
(fix): Clean up Fern Docs cache on fern docs dev startup and shutdown.
4.62.5
(fix): Fix replay init to create .gitattributes with linguist-generated markers and sync .fernignore entries with fern-replay.
4.62.4
(chore): Internal CLI improvements.
4.62.3
(fix): Make GitHub token optional for replay init. Public repos no longer require a token.
4.62.1
(chore): Remove deprecated private field from DocsInstance configuration.
4.62.2
(fix): Fix OpenAPI importer dropping request body examples when the request
body has no schema defined. Previously, endpoints with a JSON content
type but no schema were treated as having no request body at all,
causing valid example JSON to be lost. The importer now preserves the
request and its examples so they render in docs and code snippets.
4.62.0
(feat): Make the fern api enrich command public. This command merges an
AI examples overrides file into an OpenAPI spec, integrating
x-fern-examples into native OpenAPI example fields.
4.60.0
(feat): Add agents.page-description-source to docs.yml to control which
frontmatter field is preferred for one-line page descriptions in llms.txt.
Supports description and subtitle, and falls back to other supported
frontmatter fields when the preferred field is not present.
4.61.0
(feat): Add --email flag to fern login for enterprise SSO support.
4.59.0
(feat): Add support for pulling generator Docker images from custom container registries
during fern generate --local via a new image: { name, registry } field in
generators.yml. Custom image generators are blocked for remote generation and
skipped during auto-upgrade.
4.58.0
(feat): Support x-fern-default on x-fern-global-headers entries. When a
global header includes x-fern-default, the value is carried through
to the IR clientDefault field so generators can emit optional
parameters with a default value (e.g. version: Optional[str] = '2024-02-08').
4.57.0
(feat): Add a missing-redirects docs validation rule to fern check that compares
the current docs navigation against the previously published markdown slug
table in FDR. The check warns when a published page is removed or moved
without a redirect in docs.yml, helping prevent broken historical docs URLs.
The rule also handles first-publish, unauthenticated, offline, and timeout
scenarios gracefully based on the configured check severity.
4.56.0
(feat): Add an agents config block to docs.yml for agent-serving endpoints.
agents.page-directive prepends custom instructions to each page served
through agent endpoints.
4.55.0
(feat): Send X-Deployer-Author and X-Deployer-Author-Email headers on docs
registration requests so CI-triggered deployments can be attributed to
the user who initiated the deploy.
4.54.1
(fix): Skip the CLI upgrade suggestion when the current version is 0.0.0,
which is the placeholder used for local development builds.
4.53.2
(chore): Improve error messages for cli docs publishing.
4.54.0
(feat): Add x-fern-default OpenAPI extension for path, header, and query parameters.
When present on a parameter, the value is carried through the OpenAPI IR
and Fern definition into the IR clientDefault field (a Literal).
Generators can read this field to emit optional parameters that
automatically send the default value when the caller omits them.
Supports string and boolean literal values.
4.53.1
(fix): Fix auto-generated path parameter examples producing object values
(e.g. { key: "value" }) for unknown-typed path parameters.
generatePathParameterExamples now coerces non-primitive values to
a string fallback derived from the parameter name, preventing
[object Object] from appearing in generated wire test URLs.
4.53.0
(feat): Log which group is being used when fern generate falls back to the
default-group configured in generators.yml, so it is clear which
group is running even when --group is not explicitly passed.
4.52.2
(chore): Fall back to reading auth and auth-schemes from the spec’s overrides
file when no auth is configured in generators.yml. This allows auth
configuration to live exclusively in the overrides file alongside other
OpenAPI overrides, without needing to duplicate it in generators.yml.
4.52.1
(fix): Fix OpenAPI importer not converting boolean enums with a single value
(type: boolean, enum: [true] or enum: [false]) into literal types.
Previously these were treated as plain boolean; now they correctly
produce literal<true> or literal<false> in the IR, resulting in
literal types in generated SDKs (e.g. true in TypeScript,
typing.Literal[True] in Python).
4.52.0
(feat): Add integrations.context7 to docs.yml so Fern can upload and publish a customer-provided
context7.json verification file for docs sites.
4.51.0
(feat): Make dashboard the default launch option for the “Edit this page” button.
Previously the default was github, which required users to configure
launch: dashboard explicitly.
4.50.5
(fix): Fix example validation rejecting valid null values in anyOf/oneOf
schemas. The ExampleConverter now correctly preserves explicit null
examples (e.g. anyOf: [{type: "string"}, {type: "null"}] with
"query": null) instead of treating them as missing or undefined. This
affected both union conversion (nullish coalescing dropped null) and
object property validation (null was treated as omitted when the schema
allowed it via anyOf/oneOf).
4.50.4
(fix): Cache loaded OpenAPI documents across OSS validation rules to avoid
redundant parsing and overlay application. Previously each of the
4 validator rules independently called loadOpenAPI(), causing the
overlay log message to appear multiple times. Documents are now
pre-loaded once and shared. Also demotes the overlay temp-file log
from info to debug.
4.50.3
(fix): Improve MDX validation error formatting in fern docs md check.
4.50.2
(fix): Don’t exclude streaming request body ref schemas during stream condition
processing, as they may be referenced by other operations and need to
remain in the generated output.
4.50.1
(fix): Fix OpenAPI importer dropping object properties with type: "null"
(valid in OpenAPI 3.1). Properties declared as type: "null" were
silently filtered out before conversion, causing fields like
conversation_id to disappear from generated SDK response models.
The importer now represents type: "null" as nullable(unknown),
producing unknown | null in TypeScript and Optional[Any] in Python.
4.50.0
(feat): Auto-infer x-fern-discriminator-context for discriminated unions that
match the SSE event spec shape. When all variants of a discriminated union
have properties exclusively drawn from {event, data, id, retry} with
correct types, the discriminator context is now inferred as protocol
instead of defaulting to data. This applies to the legacy OpenAPI importer.
4.49.0
(feat): Add body-sort option to webhook signature payload format. When set to
alphabetical, POST body parameters are sorted by key before being
concatenated into the signing payload. This is required by providers like
Twilio. Supported in both Fern Definition (body-sort: alphabetical inside
payload-format) and OpenAPI specs (body-sort: alphabetical inside the
payload-format block of x-fern-webhook-signature).