4.84.0

(feat): Add --skip-if-no-diff flag to fern generate that skips opening a PR / pushing when the generated output has no diff from the base branch. The existing no-diff skip behavior is decoupled from automationMode and now gated behind its own skipIfNoDiff config. fern automations generate continues to skip no-diff PRs by default.


4.83.0

(internal): Harden Sentry reporting for the legacy CLI:

  • Opt in to the onUncaughtException, onUnhandledRejection, linkedErrors, and nodeContext integrations so errors that escape the top-level handler (fire-and-forget callbacks, unhandled rejections, wrapped .cause chains) still reach Sentry with full context.
  • Attach stack traces even for non-Error throws, and disable client reports and performance sampling since the CLI doesn’t emit transactions.
  • Drop the UNCLASSIFIED error code now that every CLI package has been migrated to the typed CliError system. Unknown errors now fall back to INTERNAL_ERROR and are reported to Sentry, closing the last gap where uncategorized failures went unobserved.

4.82.0

(feat): Forward the CLI’s telemetry setting to local generator containers. When the CLI has telemetry disabled (via FERN_DISABLE_TELEMETRY, FERN_TELEMETRY_DISABLED, or fern telemetry disable), fern generate --local now sets FERN_DISABLE_TELEMETRY=true inside the generator container so the generator runtime’s Sentry client is disabled too. Remote generation is unaffected.

4.81.1

(fix): Thread the --version flag through to the Go SDK when using output.location: local-file-system. The CLI now populates a Go publish target on the IR’s filesystem publishing config when the user explicitly passes --version, so the Go generator can stamp the generated SDK with the requested version. No version is populated when --version is not provided.

4.81.0

(feat): fern automations generate now fans out across every eligible generator when targeting flags are omitted. It continues past per-generator failures, auto-writes a markdown summary to $GITHUB_STEP_SUMMARY when running in GitHub Actions, and optionally emits a CI-neutral JSON summary via --json-file-output <path>. Generators with automations.generate: false are silently skipped during fan-out; explicit targeting of an opted-out generator is now rejected with a clear error. Exit code is non-zero if any generator fails.

(chore): fern generate and fern automations generate now render generation progress as a nested hierarchy of API → group → generator tasks in the terminal, so fan-out runs are easier to follow when multiple APIs, groups, and generators are running at once. Behavior is unchanged; only the live task display is different.

4.80.4

(fix): Fix “Expected list. Received null.” error when importing OpenAPI specs with null security scopes. Some real-world specs use {oauth2: null} instead of {oauth2: []} in security requirement objects. The OpenAPI importers now sanitize null scope values to empty arrays.

4.80.3

(fix): Thread the explicit --version flag through to the TypeScript SDK when generating locally with output.location: local-file-system. Previously, running fern generate --group <ts-group> --version <x.y.z> --local would silently drop the version and emit a package.json without a version field. The CLI now populates PublishingConfig.filesystem.publishTarget with an npm target (carrying the user-provided version and the config.packageJson.name) so the generator can produce the correct package.json and X-Fern-SDK-Version header. Only --version that was explicitly passed is threaded through; auto-computed versions are not, to avoid behavior changes for users who manage package.json themselves.

4.80.2

(chore): Remove the hidden fern automations list generate command.

4.80.1

(fix): Display descriptions for discriminated and undiscriminated union variants.

4.80.0

(feat): Add fern automations preview command that discovers previewable generator groups and runs SDK preview for each one, aggregating results. Replaces the previous fern automations list preview listing-only command with a single command that handles both discovery and execution. Designed for consumption by the fern-preview GitHub Action.


4.79.4

(fix): Resolve $ref pointers to external markdown files inside OpenAPI description fields by inlining the file contents as a string at spec load time. Previously such specs failed with e.replace is not a function during SDK generation.

4.79.3

(fix): Support x-fern-discriminator-context extension on OpenAPI discriminator objects and auto-infer protocol context for SSE-shaped discriminated unions.

4.79.2

(fix): Fix AsyncAPI bundler silently degrading typed models to unknown when multi-file specs use file-local $ref pointers (e.g. $ref: '#/Sibling') inside schemas that are inlined from external files.

4.79.1

(fix): Fix auto-detected global headers generating type-incorrect example values. When headers like Request-Timeout (integer type) were auto-promoted to global headers, the example generator used the header name as a string value instead of skipping the example.


4.79.0

(feat): Add a docs.yml setting to disable editing the API reference environment URL. This preserves the default editable behavior while allowing docs sites to lock the displayed base URL when desired.


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, or manual). Set explicitly via the FERN_INVOKER environment variable, otherwise inferred from standard CI env vars.
  • requestedVersion: the raw value passed to --version (e.g. AUTO or 1.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 refschemaswithinmultielementallOfarraysinsteadoffallingbacktountypedobjects,deduplicatemergedallOfrefsfordiamondshapedinheritance,guardvariantsflatteningandcompositionkeywordshortcutsagainstref schemas within multi-element allOf arrays instead of falling back to untyped objects, deduplicate merged allOf refs for diamond-shaped inheritance, guard variants-flattening and composition-keyword shortcuts against 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.