5.148.2
(fix): Decouple SDK Config initialization from SDK Gen API generation routing so each can be rolled out independently.
(fix): fern docs md generate now prefixes generated Python library page slugs with the slug of the
navigation tab the pages are listed under in docs.yml. Generated pages previously skipped the tab
(e.g. /prismo/prismo/floorplan_editor_signals instead of
/api-reference/prismo/prismo/floorplan_editor_signals). File paths and page IDs are unchanged.
5.148.1
(fix): fern generate --docs no longer re-parses every OpenAPI spec of an API reference that sets
tag-description-pages: true. Tag descriptions are now read straight from the specs’ tags,
which saves about 0.4s per spec on a large (4.8 MB) spec.
(fix): OpenAPI specs with external $refs to remote files convert faster. Each remote file is now
fetched once per conversion instead of once per $ref (for example 114 fetches down to 2 on a
large spec), and a failed fetch is retried by the next $ref instead of being remembered.
5.148.0
(feat): Add an experimental fern docs dev --astro flag that renders the docs to the ledger read model, serves it from a
local mirror, and runs the prebuilt Astro docs preview server (downloaded and cached like the Next bundle) against
it with live reload. Next.js remains the default.
5.147.9
(fix): fern generate --local now generates SDK Config targets after fern sdk migrate, instead of
failing with “SDK Config v1 generation is only supported with remote sdk-gen-api generation”
(--target) or silently generating nothing (no selectors). Each target runs on the on-prem
generator for its language, at its generatorVersion or, when unpinned, the SDK Config cutover
release. Targets with zip or github delivery generate into generated/<language> beside
sdk-config.yml. Targets with no on-prem generator, a pre-cutover generatorVersion, or a
repeated language, and an --sdk-config file other than the one the local runner reads
(sdk-config.yml, else sdk-config.yaml), are rejected with an explanation.
5.147.8
(fix): fern check now reads and validates each markdown page once, even when several
navigation items or version files reference it. A page shared by 36 versions is no longer
parsed and link-checked 36 times, and its errors are reported once instead of once per reference.
5.147.7
(fix): fern generate --docs uses less memory on large multi-version API references. Worker threads
return their dynamic snippet IRs gzipped, the IRs cached for validation are released once the
docs navigation is built, and each worker’s heap is capped at 1.5 GB (a job that runs out of
memory is regenerated in-process). Machines with less than about 9.5 GB of RAM, such as the
2-core / 7 GB GitHub Actions runner, keep generating dynamic snippet IRs in-process.
5.147.6
(fix): fern generate --docs is faster on large multi-version API references. OpenAPI parsing
no longer rescans the whole spec for every operation’s request body, type resolution no
longer rebuilds the map of definition files on every lookup while generating dynamic snippet
IRs, and external $ref resolution no longer re-shifts its work queue. Dynamic snippet IRs
are now generated on worker threads (bounded by CPU cores, available memory and
FERN_DOCS_API_REGISTRATION_CONCURRENCY; runners with less than about 10 GB of RAM, such as
the 2-core GitHub Actions runner, stay in-process), starting as soon as each API’s IR is built so they
overlap the navigation build. Set FERN_DOCS_API_REGISTRATION_CONCURRENCY=1 to generate them
serially in-process.
5.147.5
(fix): Fix translated navigation labels getting out of order after a top-level page, link, or
collapsed section. The CLI wraps those items in an internal sidebar group, and the
translation overlay now matches the group’s items as siblings of the items around it, so
labels like API reference sections and endpoint titles no longer stay in English or pick up
another item’s translation.
5.147.4
(fix): fern generate --docs now registers each distinct API definition once per publish. Versioned
docs that reference the same API from every version no longer repeat its AI example
enhancement, dynamic snippet generation and upload for each version.
(fix): fern generate --docs now builds each OpenAPI workspace’s IR once per run. The publish
reuses the IR that the valid-markdown-links check already built, instead of converting
every spec a second time.
5.147.3
(fix): Fix component schemas that are only a $ref to another schema (for example
CopyBatchArg: { $ref: '#/components/schemas/RelocationBatchArgBase' }) being imported
as unknown. Their API reference pages showed “any” instead of the referenced type’s
fields. These schemas now become an alias of the referenced type.
5.147.2
(fix): fern generate --docs now registers API definitions with FDR four at a time instead of one
after another, which shortens publishes for docs sites with many APIs or API versions. Set
FERN_DOCS_API_REGISTRATION_CONCURRENCY to change the limit (1 restores serial registration).
5.147.1
(fix): <Markdown src="..." /> snippets now resolve when a prop value contains >, e.g.
<Markdown src="/snippets/intro.mdx" returnType="Promise<void>" />. Previously the > inside the
quoted value ended the tag early, so the snippet was never inlined and the page rendered incorrectly.
5.147.0
(feat): fern init can now create sdk-config.yml for new OpenAPI projects. Initialized OpenAPI
files are bundled into the Fern workspace, while URL sources are preserved in the generated configuration.
5.146.2
(fix): Fix fern generate --docs corrupting MDX pages that mix JSX image expressions like
icon={<img src="..." />} with other components that have local image paths. Text after
those components (such as a closing </Tab>) was deleted, so the page failed to compile and
rendered as raw text.
(fix): Fix local images inside Markdown link text, like [Docs <img src="./icon.svg" />](https://...)
or [](https://...), being published with the build machine’s absolute
path instead of the uploaded file. Finding images to upload no longer parses each page as full
MDX, which makes fern generate --docs faster on large sites.
5.146.1
(fix): Support building package artifacts from SDKs generated through SDK Gen API with fern generate --package, including pnpm-based TypeScript projects.
5.146.0
(feat): SDK variables can now declare an environment variable fallback. In api.yml, use the
detailed form variables: { myVar: { type: string, env: MY_VAR } }; in OpenAPI, add
x-fern-env: MY_VAR to an x-fern-sdk-variables entry. The value is emitted as
VariableDeclaration.envVar in the IR so generators can make the variable optional at
client construction and read it from the environment when it is not passed explicitly.
5.145.2
(fix): fern org get now names the org, shows when the CLI version policy was last updated, and shows
the running CLI version (e.g. Org "acme" requires Fern CLI >= 5.106.0 (updated 2026-08-26). You're on 5.140.2.), so the output no longer reads like an error.
(fix): fern upgrade no longer warns that the running CLI is outside the org’s version policy (“Version
redirection is disabled, so it was not upgraded”), since the upgrade itself moves the project
to a new version.
5.145.1
(fix): fern docs dev no longer reports a false api-section-has-definition error for every api:
navigation item. The dev server validates docs without loading API workspaces, so the check
is now skipped there; fern check and fern generate --docs still run it.
(fix): Upgrade to SDK Config 0.6 and omit defaulted optional fields from SDK Config payloads sent to local and remote generators.
5.145.0
(feat): fern export now accepts a repeatable --audience flag. When set, the exported OpenAPI spec only
includes the endpoints, webhooks, environments, and schemas required for those audiences
(e.g. fern export openapi.yml --audience public).
5.144.3
(fix): fern generate --docs --preview --id <id> --no-prompt no longer asks for
confirmation when the preview ID already exists, so an existing preview can
be overwritten non-interactively (as --force and CI environments already
allowed).
(fix): Fix several gaps in docs translation navigation overlays: the display-name
of a changelog tab is now applied; overlays can now translate link labels,
api reference titles, API package titles and endpoint titles (via the api
node’s layout); positional matching of sections/pages no longer shifts after
a sibling that was matched by an explicit slug; API layout section overlays
now apply to their API package nodes; endpoint overlays match by HTTP method
when it is unique among siblings; and multi-segment explicit overlay slugs
(e.g. customization/voice) now match. Overlay endpoint titles are no longer
reverted to the translated spec’s endpoint name when that name is unchanged
from the default locale.