Changelog
5.114.1
(fix): Scope the namespaced-errors OpenAPI setting to the spec that enables it, and only honor an explicit
x-fern-sdk-namespace on the response object. Previously enabling the setting on one spec applied it to
every spec in the API, and errors whose body schema lived in a namespace were moved into that namespace.
5.114.0
(feat): Add the namespaced-errors OpenAPI setting (default false). When enabled, an error whose
response object (components.responses[...]) or body schema carries x-fern-sdk-namespace is
declared in, and its shared-error conflict detection is scoped to, that namespace instead of the
endpoint’s. This lets each namespace get its own typed TooManyRequestsError etc. while endpoints
and other types stay at the root.
5.113.3
(fix): Revert the namespace-scoped shared-error collapse (#17619) and the case-insensitive namespace/tag flattening
(#17643) in the OpenAPI importer. Shared errors are again compared API-wide by status code, and an operation tag
that only matches the spec namespace case-insensitively is again treated as a sub-group.
5.113.2
(fix): Fall back to an OpenAPI parameter’s inline schema description when the parameter itself has no
description, so query, header, and path parameter docs appear in generated API references.
5.113.1
(fix): When an OpenAPI spec has namespace set, an operation tag that matches the
namespace case-insensitively (e.g. tag Video with namespace: video) is now
treated as the namespace itself instead of creating a nested video.video
sub-package.
5.113.0
(feat): Add fern sdk migrate to create Postman SDK Config v1 from existing Fern SDK groups, including the exact single- or multi-spec API source paths. Repeat --group to consolidate groups that resolve to the same API schema and source configuration into one multi-language configuration.
5.112.1
(fix): When importing OpenAPI specs with namespace set, shared SDK errors are now
collapsed to unknown per namespace instead of across the whole API. A status
code that has a different body schema in one namespace no longer degrades the
typed error body in other namespaces.
5.112.0
(fix): Supply resolved API source archives when fern sdk preview routes generation through sdk-gen-api,
and accept the empty default OpenAPI audience filter during SDK Config source validation.
(internal): Select sdk-gen-api payload routes before generation work, preserve legacy Fern runtime bundles for pre-cutover targets, and require SDK Config v1 at or after each generator’s cutover version. Reject incompatible legacy configuration with an actionable fern sdk migrate instruction before source preparation or remote mutations, while preparing deterministic, deduplicated source archives for compatible targets.
5.111.0
(feat): Add the any-of-sibling-properties-as-object OpenAPI setting. When enabled, a
schema that declares properties alongside an anyOf whose branches only
re-declare some of those same properties as required is converted as the object
it declares, rather than as an undiscriminated union. Per JSON Schema such an
anyOf is an “at least one of” constraint over sibling properties, not a set of
variants, so converting it to a union discards the declared properties and
makes the fields mutually exclusive — a request body setting two of them
silently sent only one.
5.110.1
(fix): The warning for auth-schemes declared without api.auth now fires on
fern generate and fern check, not only fern check --from-openapi. It
was emitted from OSSWorkspace.getIntermediateRepresentation, a branch
reached only when --from-openapi is passed; fern generate and plain
fern check go through toFernWorkspace and saw nothing. Since the whole
point is that this misconfiguration is otherwise silent — valid YAML, clean
check, successful generation, and a client reading an environment variable
the user never configured — the warning was unreachable on exactly the paths
where it was needed. Both entry points now emit it, at most once per
workspace.
5.110.0
(feat): Add FERN_RUNTIME_ENV_VARS, which defers the listed environment variables past
generation for self-hosted docs. Instead of being substituted with their build-time
value, ${APP_SERVER} is rewritten to a FERN_SELF_HOSTED_ENV_APP_SERVER placeholder
that the self-hosted container resolves on every request, so a single generated image
can serve deployments that differ only in those values.
5.109.3
(fix): Preserve deprecated/x-fern-availability on OpenAPI object properties whose value is a
$ref (or a single-$ref allOf). Previously availability was only read off inline
schemas, so a request body property referencing a deprecated component schema rendered
without a Deprecated badge, while the equivalent query parameter did.
x-fern-availability written alongside a $ref now overrides the referenced schema’s
availability, so a property can opt out of an inherited deprecated.
5.109.2
(fix): Warn when generators.yml declares auth-schemes but no api.auth to select them. The
workspace only reads the auth-schemes block when api.auth is set, so declaring schemes
without it silently discards the whole block — env: overrides included — before the importer
sees it. Auth is then re-derived from the spec’s securitySchemes, which carries no
environment variable, and each generator falls back to its own default name (the CLI
generator to <BINARY>_TOKEN). Nothing is invalid, so fern check stayed clean and
generation succeeded while producing a client that read an environment variable the user
never configured. The warning names the schemes being dropped and the auth: line that
applies them.
5.109.1
(fix): Fix fern check and docs previews failing with an uncaught error (e.g. “Expected one of …
Received [object Object]”) when the broken-links rule builds an API definition for an
api section. The rule now resolves the API definition the same way the docs build does,
skips link validation for an API it cannot load, and a rule that throws mid-validation is
reported as a violation honoring its configured severity instead of aborting the command.
5.109.0
(fix): Convert a GraphQL interface to its own set of fields and record each implements clause on the
implementing type, so docs can list an interface’s fields and the types that implement it.
(fix): Don’t document GraphQL operation-namespace types (e.g. a Mutation.checkout: CheckoutMutations
grouping type) as types of their own. Their fields are already documented as operations, so a
type page for them duplicated every field and argument on the referenced types’ pages.
5.108.0
(internal): Send generator-compatible Fern runtime bundles with sdk-gen-api build requests.
5.107.0
(fix): Publish the configured default locale as the docs manifest locale key instead of always using “en”.
(feat): You can now keep your redirects in their own files instead of listing them all in docs.yml.
Point redirects at one file or several, and Fern combines them in the order you list them.
5.106.1
(chore): Fix stale blog changelog-slug rule test expectations after the blog feed slug allowlist change.
5.106.0
(feat): Add a blog navigation item as an alias for changelog navigation.
(fix): Accept blog, blogs, and posts changelog slugs for feeds.
5.105.3
(chore): Add snapshot coverage for OAuth client credentials with a custom token header and prefix.