5.27.0
(internal): Enrich CLI telemetry with automation-mode context (config repo, branch,
commit sha, PR number, trigger, and GitHub run details) on every PostHog
event and Sentry error report.
Add the three-leg failure flow (Sentry + PostHog + automation event API)
so automation-run failures surface end-to-end.
5.26.5
(fix): Suppress additional Sentry false positives for interrupted syscalls, invalid versions, YAML parse failures, IR schema parse failures, invalid GitHub repository config, replay resolve failures, missing translation directories, and global theme fetch failures.
5.26.4
(fix): Fix missing-redirects causing fern check to exit with code 1 even when
the rule is configured at warn. Rule initialization failures now honor
the configured severity (warn emits a warning, error emits an error)
instead of always being reported as fatal. The missing-redirects rule
also degrades to a warning when the local docs navigation fails to
resolve, captures the underlying failAndThrow message so the warning
explains why (e.g. Folder not found: ...) instead of [object Object],
and non-Error throws are formatted readably across the validator.
5.26.3
(fix): Fix fern docs dev grabbing the local fern token for authentication when loading a global theme
5.26.2
(fix): Fix commit author attribution for GitHub Enterprise: API-created commits now
use the Fern bot identity instead of the PAT-owning user, matching the git CLI
behavior of Fern 3.x generators.
(fix): Authenticate Venus calls during local Docker generation (fern generate --local)
by silently picking up an existing FERN_TOKEN env var or saved login token,
matching the remote generation path. Previously, useLocalDocker skipped the
auth flow entirely, leaving Venus calls (e.g. GET /organizations/{org_id})
unauthenticated.
5.26.1
(fix): Forward --verify through the remote (Fiddle) generation path. Previously the
CLI-level --verify flag only worked for local generation; on remote runs the
value was silently dropped before reaching CreateJobRequestV2.verify. The
flag now plumbs through runRemoteGenerationForAPIWorkspace →
runRemoteGenerationForGenerator → createAndStartJob and is set on the
Fiddle job request, enabling the generator-cli pipeline’s VerificationStep
against the language-specific validator on opted-in runs.
5.26.0
(feat): Add fern docs link check command to validate links on live documentation sites.
Supports text, JSON, and CSV output formats via --output flag.
Use --url <url> to specify which docs site to check, or auto-detect from docs.yml.
(feat): Add progress bars matching fern docs dev style for fern docs link check.
Broken links show status codes, blocked links show diagnostic details,
and error messages include actionable context.
(feat): The fern docs link check command now resolves broken link sources to local file paths when the server provides sourcePageIds and a Fern workspace is available.
5.25.0
(feat): Register the new fernapi/fern-cli generator in the CLI configuration.
5.24.2
(fix): Fix fern config migrate producing wrong file path references in the generated fern.yml. Paths from generators.yml (relative to the fern/ directory) are now correctly re-rooted to be relative to the project root where fern.yml is created. This also fixes the docs $ref pointer to use ./fern/docs.yml instead of ./docs.yml.
5.24.1
(chore): Propagate Fern docs: strings into generated JSON Schemas so editor hovers
work for schemas served from schema.buildwithfern.dev.
5.24.0
(internal): Plumb verify, verifyRunner, and verifyValidatorVersion flags through
GenerationRunner.RunArgs so the seed runner can invoke
PostGenerationPipeline with VerificationStep and exercise the same
validator-container code path that fern generate --local --verify uses.
No customer-facing CLI behavior change — the flags are opt-in and used only
by the seed test runner today.
5.23.6
(fix): Fix fern docs dev hot reload not working for .mdx file changes. The backend
now updates the docs definition before notifying the browser to refresh, and
the reload handler properly recovers from errors instead of silently blocking
all future reloads.
5.23.5
(fix): Fix SDK generation crashing with fatal: <sha> is not a valid object
when the prior fern-bot PR was squash-merged and its branch deleted.
The stale fern-generation-base tag update is now skipped with a
warning; the SDK PR still opens.
5.23.4
(fix): Fix allOf composition so inline elements with real constraints (e.g. pattern, minLength) produce a properly merged type instead of being silently dropped. Also refactored the allOf shortcircuit logic to use a metadata allowlist, which is safer against new OpenAPI fields.
(fix): Fix example generation for allOf compositions to merge base schema fields into property overrides. When an allOf override specifies only items without type: array, the base schema’s type is now correctly inherited, producing properly typed examples instead of null.
5.23.3
(fix): Property-level x-fern-audiences filtering now also applies on the V3 OpenAPI / AsyncAPI /
OpenRPC import path used by fern docs dev and fern generate --from-openapi. Inline
request-body properties, query parameters, inline webhook payload properties, named-type
properties, v2RequestBodies, and the docs v2Examples blocks (type-level, request body,
response body, endpoint-level, v2Responses, and webhook payload examples) are now scrubbed
using the same exclusion semantics as the Fern Definition path. Untagged elements remain
universal and are never silently removed.
5.23.2
(fix): Suppress Fern’s platform User-Agent header in generated SDKs when the API definition
declares a global User-Agent header (case-insensitive) under api.headers. This
allows customers to fully override the SDK User-Agent via their Fern Definition without
the auto-generated <package>/<version> value also being emitted.
5.23.1
(fix): Fix fern docs dev hanging indefinitely on Node.js v26+ on Linux by disabling
io_uring in the child server process. Node 26 enables io_uring by default in
libuv, which has a busy-loop bug where worker threads spin on an internal
eventfd, starving the main event loop.
5.23.0
(internal): Add an opt-in VerificationStep to the post-generation pipeline that runs
.fern/verify.sh (when emitted by the generator) inside a language-specific
{generatorImage}-validator container after replay and before any GitHub
push. A failing script aborts the pipeline before opening a PR and surfaces
raw stderr through the pipeline logger; a missing script is a silent no-op.
The step is gated on a hidden --verify flag for fern generate; when
passed (with --local or --runner), the local workspace runner sets
config.verify.enabled = true on the pipeline and the configured container
runtime (docker or podman) is forwarded to the validator container.
Remote/Fiddle generation does not honor this flag yet.
5.22.1
(fix): Fix fern docs dev failing with pnpm 11 due to esbuild build scripts being blocked by default.
Writes onlyBuiltDependencies config to the bundle folder before installing esbuild.
5.22.0
(feat): Add fern sdk list command to list configured and available SDK generators.
Displays configured SDKs from local fern.yml and available generators from the
Fern registry. Supports --language, --type, and --json flags.
5.21.1
(chore): Bump IR to 67.2.0 to publish the optional resumable field added to
SseStreamChunk in PR #15795. Without the IR version bump, no new
@fern-fern/ir-sdk minor was published and the field stayed invisible
to downstream consumers.
5.21.0
(feat): Add a new resumable sub-property to the x-fern-streaming OpenAPI extension
(and a corresponding resumable field on Fern Definition response-stream
blocks). When set on an SSE endpoint, the IR carries resumable: true on
the SSE chunk so generators can emit a client-side reconnect loop using
standard SSE primitives (Last-Event-ID, retry:).
The flag is inheritable: setting x-fern-streaming.resumable: true at the
OpenAPI document level applies to every SSE endpoint unless an operation
overrides it (silent fallback). Defaults to false. The IR field is
optional, so generators that don’t read it are unaffected.
5.20.1
(fix): Pass GitHub Enterprise host to Fiddle for remote generation so that
self-hosted GHE instances are correctly targeted by the remote pipeline.
5.20.0
(feat): Add --fix flag to fern check, fern sdk check, and fern docs check.
When specified, the CLI automatically applies known fixes for detected issues
(e.g. replacing invalid SDK target versions with the latest stable release,
applying deterministic MDX parse error fixes).
5.19.1
(fix): Property-level x-fern-audiences (and Fern definition audiences:) filtering now
correctly excludes properties whose audiences do not overlap the active filter and
preserves untagged properties as universal — matching endpoint-level audience semantics.
Examples are also scrubbed of excluded items: auto-generated jsonExample snapshots,
inlined request-body example properties, endpoint example query parameters, and
user-specified webhook payload examples.
5.19.0
(feat): Add PR title, body, and commit message to fern automations upgrade --json output.
The new pr field in the JSON output allows GitHub Actions consumers to use
CLI-generated PR formatting directly, eliminating duplicated presentation logic.
5.18.1
(fix): Fix GitHub Enterprise support for self-hosted SDK generation. Octokit API calls
(signed commits, PR creation, ref updates) now use the correct GHE API base URL
derived from the repository URI instead of always hitting api.github.com.
5.18.0
(feat): Add fern schema [name] command (CLI v2) that emits a JSON Schema for
fern.yml. Running fern schema with no argument prints the full schema;
passing a dot-delimited subsection (e.g. fern schema sdks,
fern schema sdks.targets, fern schema api) prints just that block.
Intended primarily for AI agents that need to generate or validate Fern
config at runtime without consulting external docs.
5.17.1
(fix): Fix publish to respect FERN_FDR_ORIGIN environment variable override.
5.17.0
(internal): Attach fern_run_id and github_run_id as PostHog properties on every CLI
event so PostHog dashboards can correlate analytics with the FERN_RUN_ID set
by the GitHub Actions wrappers and the matching Sentry tags.
5.16.1
(fix): fern check now accepts changelog navigation entries whose URL has any
allowlisted segment (e.g. whats-new, release-notes, changelog),
not just the trailing one. This means a changelog page like
/whats-new/product-updates no longer raises a false-positive error
about RSS / Atom / JSON feeds 404ing — the docs server matches the
same loosened rule when serving feeds.
5.16.0
(feat): cli-v2: fern check now prints rich, Rust-style errors for MDX/Markdown
parse failures. Each error includes a stable error code (e.g. E0301),
a --> path:line:col location, two surrounding source lines with a
caret pointer, and an inline fix: suggestion when one is available.
(feat): cli-v2: add interactive AI-assisted fixes for MDX/Markdown parse errors.
fern check now offers to apply a fix when run interactively — using a
deterministic string-replace when the parser’s fix: hint matches the
file, and falling back to a configured AI provider otherwise. Provider
is selected via fern config ai set-provider <anthropic|openai|bedrock>
and credentials via fern config ai set-key <key> (Bedrock uses the
standard AWS environment). Prompts are skipped automatically when
running inside a Claude Code session (CLAUDECODE=1).
(feat): cli-v2: when fern check finds multiple MDX errors, prompt once for a
batch action (“apply all”, “review each”, “skip all”) instead of
prompting once per error.
5.15.3
(fix): Fix fern check to respect x-fern-ignore when validating duplicate SDK method names. Operations marked with x-fern-ignore: true are now excluded from the duplicate override check.
5.15.2
(fix): Fix dynamic IR upload and check endpoints to pass correct field names (version, snippetConfiguration) matching the FDR server contract, resolving 500 errors during SDK generation.