5.32.1
(chore): Bump @fern-api/generator-cli to 0.9.33 (picks up @fern-api/replay 0.16.1).
5.32.0
(feat): Support structured x-fern-base-path with per-parameter declarations and defaults.
The OpenAPI extension now accepts an object form with path and parameters, where
each parameter can specify a type, docs, and default.
5.31.0
(feat): Populate hasWebSocketInTree on IR Package/Subpackage types. When a
subpackage (or any of its nested children) contains a WebSocket channel,
this field is set to true, enabling generators to wire WebSocket-only
namespaces into the root client.
5.30.4
(fix): Fix the OpenAPI importer silently dropping the request body of an operation
that combines x-fern-streaming (with stream-condition) with a oneOf or
anyOf request body schema. Endpoints whose body is a plain object
(properties/allOf) are unaffected.
5.30.3
(fix): Fix a TypeError: Cannot read properties of undefined (reading 'startsWith')
crash in the OpenAPI parser when an operation’s x-fern-streaming extension
sets only resumable: true (or otherwise omits both format and
stream-condition). The parser now returns undefined for that operation
instead of crashing.
5.30.2
(fix): Fix fern docs link check disconnecting on large sites by using batched
requests instead of a single long-lived SSE connection. Pages are now scraped
in batches of ~200 and links checked in batches of ~500, with automatic
retries on connection failures.
5.30.1
(fix): Fix broken link checker to validate links in pages referenced via folder entries in docs.yml navigation.
5.30.0
(feat): Add commit-and-release mode support for self-hosted GitHub configuration.
Users can now set mode: commit-and-release in their self-hosted github:
block to commit directly to a branch and create a GitHub release.
5.29.0
(feat): Port the hidden fern docs md command group from CLI v1 to CLI v2.
Adds fern docs md generate (beta library documentation generation
from source code) and fern docs md check (MDX-only syntax validation)
with CLI v2’s consistent UI.
5.28.3
(chore): Add bin/ property to CLI v2 Cache class for shared tool binaries
(buf, protoc-gen-openapi) at ~/.fern/bin/, enabling both CLI v1 and
CLI v2 to share the same binary download location.
5.28.2
(chore): Generator-cli now delegates divergent-merge recovery (squash-merge of a regen
PR, force-push past a generation, lost-then-found generations) entirely to
@fern-api/replay’s derived scan boundary. Customers no longer hit the
pre-replay precondition gauntlet that occasionally got stuck on stale
fern-generation-base tag pointers. Replay still writes the tag for
backward compatibility with older bundled generator-cli versions.
5.28.1
(fix): Fix global theme merge to deep-merge object fields instead of overwriting them.
Local-only sub-fields (e.g. logo.right-text, logo.height) are now preserved
when the global theme defines sibling fields on the same object.
5.28.0
(feat): Consolidate all CLI v2 cache directories into ~/.fern/. Docs preview bundles are now
managed under ~/.fern/v1/docs-preview/ and discoverable via fern cache show and
fern cache clear --docs-preview. The fern cache clear command never touches the
user’s auth token or telemetry ID.
5.27.8
(fix): Fix property-level x-fern-audiences filtering breaking error type resolution when
enableUniqueErrorsPerEndpoint is true. Types referenced via object properties (e.g.
ErrorResponse → ErrorResponseError) are now correctly included during audience filtering,
resolving “Failed to find ErrorResponseError” errors in fern check and fern docs dev.
5.27.7
(chore): Bump @fern-api/generator-cli to 0.9.30, which includes @fern-api/replay
0.15.2 with a fix for customer commits on merged regen branches surviving
replay detection.
5.27.6
(chore): Bump @fern-api/generator-cli to 0.9.29, which includes @fern-api/replay
0.15.1 with fixes for fallback patch anchoring, composite-patch survival,
and FileOwnership divergence.
5.27.5
(fix): Wrap replaceImagePathsAndUrls calls in DocsDefinitionResolver and previewDocs with
try/catch boundaries that convert MDX parse failures to CliError(ParseError), preventing
user-authored MDX syntax errors from reaching Sentry as false-positive InternalErrors.
5.27.4
(fix): Classify service and environment errors at their boundary call sites: mark exhausted
429 retries as NetworkError, pass error objects through failWithoutThrowing in remote
generation so CliError codes propagate, and reclassify docs preview server startup
failures as EnvironmentError instead of InternalError.
5.27.3
(fix): Wrap yaml.load calls in getVersionedNavigationConfiguration and getNavigationConfiguration
with try/catch boundaries that convert YAML parse failures to CliError(ParseError), preventing
user-authored YAML syntax errors in version and product config files from reaching Sentry as
false-positive InternalErrors.
5.27.2
(fix): Suppress Sentry false positives for ENOTEMPTY/ENOMEM syscalls, undici
fetch-failed TypeErrors, and errno codes on error.cause.
5.27.1
(fix): Report escaped fatal CLI errors through telemetry in packaged production runs.
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.