4.78.0
(feat): Add more traceability to .fern/metadata.json so generator output makes it
clearer how and by whom the SDK was generated. The IR generationMetadata
object now carries four additional optional fields:
invokedBy: source of the CLI invocation (autopilot,autorelease,ci, ormanual). Set explicitly via theFERN_INVOKERenvironment variable, otherwise inferred from standard CI env vars.requestedVersion: the raw value passed to--version(e.g.AUTOor1.2.3) so consumers can tell whether auto-versioning was requested.ciProvider: the name of the CI provider (e.g.github,gitlab) when running in CI. Only the provider name is recorded — no repo, run, branch, commit, or actor metadata is captured.originGitCommitIsDirty: whether the Fern configuration repository had uncommitted changes at the time of generation.
The existing originGitCommit field continues to record the git commit of
the Fern configuration repository at the time of generation.
4.77.0
(feat): Add fern replay commands to CLI v2: init, resolve, status, and forget.
4.76.2
(fix): Fix the missing-redirects check to ignore stale historical slug-table rows
and only compare against the most recent published slug per page.
4.76.1
(fix): Support array examples for query parameters in OpenAPI specs. Parameters with
explode: false and array examples now flow through to generated wire tests.
4.76.0
(feat): Replace fake time-based extraction progress bar with real file-count
tracking, and add a new progress bar for Windows symlink patching.
4.75.0
(feat): When using fern sdk preview --push-diff, the diff branch now uses the
original package name instead of the preview-scoped name. This makes the
diff show only real API changes without preview artifacts like package
name rewrites.
4.74.0
(feat): Resolve Windows symlinks via NTFS junctions during bundle extraction instead
of running pnpm install in standalone. This enables docs preview on Windows
without elevated privileges.
4.73.0
(feat): Present an interactive TUI dropdown when the user omits --api,
--instance, or --group flags and multiple options exist.
In TTY environments the CLI now prompts for selection instead of
failing hard. Non-TTY environments retain the previous error behavior.
4.72.0
(feat): Polish fern config migrate command: point the docs key at the
existing docs.yml file via $ref syntax instead of inlining, drop
legacy defaultGroup and group fields from SDK target output, and
automatically update GitHub Actions workflow files to use the v2 CLI
syntax (fern sdk generate, --target instead of --group).
4.71.6
(fix): Fix MDX rendering of C++ library docs by properly escaping angle brackets
in template parameters and HTML-like tags within description text. Unescaped
angle brackets (e.g. vector<int>, <para>) caused MDX parse failures.
4.71.5
(fix): fern automations list generate now skips generators with local-file-system output
or autorelease disabled, matching the behavior of autopilot.
4.71.4
(fix): Fix per-endpoint server overrides being ignored when top-level servers
define multiple base URLs with x-fern-server-name. Endpoints now correctly
resolve to their specified server URL instead of always using the default.
4.71.3
(fix): Fix OpenAPI-to-IR conversion to resolve custom properties (e.g., grant_type)
in OAuth token endpoint requests. Previously, customProperties was always set
to undefined for OpenAPI specs, causing generated SDKs to omit required
literal properties from the token request.
4.71.2
(fix): Fix allOf composition bugs in V3 OpenAPI importer: resolve ref-resolved
schemas, preserve inline status through allOf merge path, handle nullable
enum patterns in allOf shortcuts, detect cycles across recursive
single-element allOf chains, filter unresolved $ref objects from nested allOf
flattening, recursively flatten deeply-nested allOf arrays, strip oneOf/anyOf
from child schemas during allOf merging, and propagate outer schema metadata
through single-element allOf paths.
4.71.1
(fix): Fix false positive warnings in the missing-redirects check. Pages are no
longer flagged as removed or moved when their old URL is still actively
served by another page in the local docs config.
4.71.0
(feat): Add --id flag to fern docs preview delete, allowing deletion of preview deployments by their stable preview ID instead of the full URL. The org is resolved automatically from fern.config.json. Existing usage of fern docs preview delete <url> continues to work unchanged via the new auto-detecting [target] positional.
4.70.2
(fix): Fix “Edit this page” button appearing on docs sites that never configured it.
The default editThisPageLaunch is now undefined instead of "dashboard",
so the button only renders when explicitly configured.
4.70.1
(fix): Fix “Edit this page” button appearing on docs sites that never configured it.
The default editThisPageLaunch is now undefined instead of "dashboard",
so the button only renders when explicitly configured.
4.70.0
(feat): Enable --push-diff flag for fern sdk preview to push a preview diff
branch to the SDK repo in addition to publishing to the preview registry.
Adds diff_url to the JSON and text output for use by CI integrations.
4.69.0
(feat): Improve auto-versioning prompts for better SDK version bump determination and changelog quality.
Commit type now matches version bump severity, per-chunk changelog entries use category tags,
consolidation prompt deduplicates aggressively, and version context is passed to consolidation.
4.68.5
(chore): Migrate CLI to a unified error system using a shared CliError class with typed error codes.
Error codes drive Sentry reporting eligibility; unclassified errors are temporarily suppressed
from Sentry until all call sites are migrated.
4.68.4
(fix): Deduplicate global headers when merging IRs from multiple OpenAPI specs. Previously, if multiple specs shared the same globalHeaderOverrides from generators.yml, the same header would appear once per spec in the merged IR.
4.68.3
(fix): Fix global headers from generators.yml not appearing in documentation endpoints. The new OpenAPI v3 parser (openapi-to-ir) had a TODO placeholder but never converted globalHeaderOverrides into IR headers.
4.68.2
(fix): Fix an issue where api:<apiName>:METHOD/path links worked on published docs sites but did not resolve in fern docs dev.
4.68.1
(fix): Fix CLI blocking when PostHog is unreachable by adding a 3-second timeout
and error handling to analytics flush calls.
4.68.0
(feat): Add support for x-fern-display-name on AsyncAPI operations. This allows setting friendly display names on AsyncAPI v2 publish/subscribe operations and v3 operations, which is useful when operation keys need to be normalized (e.g. for versioned endpoints) but you still want readable names in docs.
4.67.1
(fix): Fall back to git tags for auto-versioning when the magic version is not
embedded in any generated source file. This fixes auto-versioning for
SDKs like Swift that use git tags for versioning (via SPM) rather than
a version field in source code.
4.67.0
(feat): Add agents.llms-txt and agents.llms-full-txt to docs.yml so customers can upload
custom llms.txt and llms-full.txt files that override the auto-generated versions
on their docs sites.
4.66.1
(fix): Fix GraphQL converter to properly handle interface types. Interfaces
with implementing types (e.g., CatalogProductOption with
CheckboxOption, MultipleChoiceOption, etc.) are now converted to
undiscriminatedUnion shapes so that all possible concrete types are
discoverable in generated docs. Interfaces with no implementations
fall back to plain object types.
4.66.0
(chore): Internal infrastructure for GitHub Actions-based SDK generation automation.
4.65.3
(fix): Fix broken-link checker incorrectly flagging absolute links in versioned
docs pages as broken.
4.65.2
(fix): Improve error messages for fern docs preview list command. The default
error now suggests checking authentication instead of network connectivity,
and the full error response is logged at debug level for easier diagnosis.
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.