Changelog

5.89.4

(fix): Fix local images and links being published as build-machine filesystem paths (e.g. /home/runner/work/.../assets/image.png) when an earlier line on the page contains a literal < in prose or inline code. The markdown scanner treated any < as the start of a tag and skipped ahead to the next >, dropping every image and link substitution in between.

5.89.3

(fix): Fix Cannot resolve endpoint: <operationId> in file <tag>.yml when importing an OpenAPI spec whose operationId contains a dot and does not share a prefix with its tag (e.g. actions.index under the Custom Actions tag). Dotted operation ids are now collapsed into a single valid endpoint name, so x-fern-pagination resolves correctly. Note that this renames the generated method for these endpoints (actions.index is now imported as actionsIndex rather than verbatim); set x-fern-sdk-method-name to pin a specific name.

5.89.2

(fix): Fix OpenAPI import dropping the null branch of a anyOf/oneOf when a schema that contains such a branch is referenced via $ref. References to these schemas are now correctly treated as nullable, so generators that distinguish optional from nullable (e.g. TypeScript) emit | null instead of silently dropping it.

5.89.1

(fix): Fix fern docs preview list omitting previews created with a named --id. The command filtered server results with a hex-only pattern that dropped any preview whose id contained letters outside a-f. Preview deployments are already filtered server-side, so the redundant client-side filter has been removed.

5.89.0

(feat): Rename the --pack and --pack-mode flags on fern generate to --package and --package-mode, and add --package-only, which builds the distributable artifact into fern-dist/ and removes the generated SDK source, leaving only the package in the output directory.

5.88.0

(feat): Support declaring OAuth public-client login flows in auth-schemes: type: authorization-code (Authorization Code + PKCE, browser login) and type: device-code (RFC 8628). These lower to the new OAuthConfiguration.authorizationCode / deviceCode IR variants for public clients (no client secret), carrying the public client id, authorization/device/token URLs, scopes, an optional loopback redirect-uri, and PKCE. The valid-oauth rule enforces the per-flow required fields and that a set redirect-uri is a loopback address — either 127.0.0.1 (recommended) or localhost, with any path — that the generated CLI then binds and sends verbatim so it matches the redirect registered with the authorization server. Existing client-credentials OAuth configurations are unchanged.

5.87.0

(feat): Add the send-optional-defaults playground setting to docs.yml (settable globally or per-endpoint). When enabled, optional API Explorer parameters that declare a default (or x-fern-default) are pre-filled and sent from the playground. Defaults to off.

5.86.0

(feat): Add the preserve-one-of-in-all-of OpenAPI setting. When enabled, an allOf whose members include a oneOf/anyOf is distributed into a union — each variant is the union member merged with the remaining allOf members — instead of flattening every variant’s properties into a single object. This makes the variants available to SDKs and renders a variant selector in the API reference. Defaults to false.

5.85.0

(feat): fern generate --pack now produces a source zip artifact for Go SDKs in fern-dist/ (<output-dir>-source.zip). Go modules have no binary package format, so the zip contains the module source (excluding fern-dist/ and .git/) and can be shared internally and referenced with a replace directive in go.mod. The zip is built in-process, so it works identically in host and docker pack modes without any toolchain.

5.84.0

(feat): Add a --pack flag to fern generate. When generating to the local file system, the CLI now builds distributable package artifacts (npm tarball, Python wheel, JAR, NuGet package, gem, Composer zip, crate) into a fern-dist/ folder inside each output directory, so SDKs can be shared internally without publishing to a registry. Use --pack-mode docker to run the packaging toolchains inside official Docker images instead of requiring them on the host. --pack also generates full, packageable projects (pyproject.toml, README.md, etc.) for local-file-system outputs so the packaging toolchains have the metadata they need, and host-mode packaging hides any enclosing git repository so VCS-aware build backends (e.g. poetry-core) don’t silently exclude gitignored output files from the artifact.

5.83.1

(fix): Fix user-specified OpenRPC examples to use the method’s computed endpoint path instead of appending a hardcoded /{apiKey} path.

5.83.0

(internal): Add the additive OAuthAuthorizationCode.redirectUriBackupPorts IR field (fallback loopback callback ports for the authorization-code/PKCE flow). No behavior change for existing configs.

5.82.0

(feat): Add fern org set/get/unset cli-version to pin the Fern CLI to a version or a min/max range for your whole organization, keeping every project on a consistent CLI version.

5.81.0

(internal): Add the additive OAuthConfiguration.authorizationCode and OAuthConfiguration.deviceCode IR variants modeling the OAuth 2.0 authorization code grant with required PKCE (browser login) and the device authorization grant (RFC 8628) for public clients. IR consumers now narrow the OAuth configuration union before reading client-credentials-only fields. No behavior change for existing client-credentials configurations.

5.80.5

(fix): Fix markdown images that specify a title (e.g. ![alt](./image.png "Title")) failing to render. The title was treated as part of the image path, so the image was never swapped for its uploaded file reference.

5.80.4

(fix): fern generate (cloud generation) with local-file-system output now threads the package name and version into the IR the same way fern generate --local does. This fixes generated SDKs missing the User-Agent and X-Fern-SDK-Name/X-Fern-SDK-Version headers when generating to the local filesystem without the --local flag. Package names configured via generator config (e.g. package_name, packageJson.name) are now also resolved on the cloud generation path.

5.80.3

(fix): Bump @fern-api/generator-cli to 0.9.53. Under --version AUTO, a purely additive Go change (inserting a new field into a struct) is no longer misclassified as a breaking MAJOR bump. The generated explicitFields bit-constant reindexing that a field insertion produces is now stripped before AI diff analysis, so real additions stay MINOR and real removals stay MAJOR.

5.80.2

(fix): Support client-default on api.headers entries in generators.yml. The generators.yml schema previously dropped this field, so global headers with a client-default produced no client-side default in the generated SDKs. The field now flows through to the IR (clientDefault), so SDKs send the value by default when the caller and environment variable do not provide one.

5.80.1

(fix): Preserve the base schema description on nested fields composed with allOf. When a property merged a $ref (carrying a description) with an inline schema adding constraints (e.g. pattern), the merged validation was kept but the inherited description was dropped from the generated docs/SDKs.

5.80.0

(feat): Add the layout.show-nav-availability-badges docs.yml setting. When set to true, availability badges (Beta, Deprecated, etc.) render inline next to navigation items in the sidebar. Defaults to false; the page-header availability badge is unaffected.