3.88.0
(feat): Add Replay support for preserving SDK customizations across regenerations.
Replay detects user edits via .fern/replay.lock, applies them with 3-way
merge, and creates PRs with conflict resolution guidance when needed.
New CLI commands: fern replay init, fern replay status, fern replay forget,
fern replay reset. New --no-replay flag on fern generate to skip patch
application. Gated behind replay: { enabled: true } in generators.yml.
3.87.0
(feat): Added collapsible and collapsed-by-default options for docs.yml navigation sections/folders, preserving the legacy collapsed behavior while adding validation to prevent invalid configurations.
3.86.1
(fix): Fall back to initial version 0.0.1 when AUTO versioning cannot extract
the previous version instead of failing the entire generation. This
handles new SDK repositories where all files are additions and no
previous version lines exist in the diff.
3.86.0
(feat): Add support for x-fern-sdk-method-name extension on AsyncAPI WebSocket channels
to customize the connection method name in generated SDKs. This field is now
available in both AsyncAPI v2 and v3 specifications.
AsyncAPI example — use x-fern-sdk-method-name to customize the WebSocket
connection method instead of the default “connect”:
This generates client.createChatConnection() instead of client.connect(),
avoiding confusing APIs where both wrapper creation and actual connection use “connect”.
3.85.6
(chore): Complete document-level webhook-signature configuration parsing. Adds validation for webhook
signature configs (algorithms, encodings, timestamp settings, JWKS consistency).
3.85.5
(fix): Report broken AsyncAPI V3 message references as visible warnings instead
of silently dropping entire specs. When an operation references a
non-existent channel or message (e.g. $ref: "#/channels/auth/messages/authenticate"
when no auth channel exists), the parser now logs a warning with the
specific broken $ref and continues processing the remaining valid
messages and channels.
3.85.4
(fix): Skip compatible IR version validation when running in local development
mode (CLI version 0.0.0). This prevents noisy 404 errors from the FDR
registry when the CLI version is not a real published release.
3.85.3
(fix): Remove unhelpful “Unable to analyze changes with AI” fallback message from
changelog entries when AI analysis fails during AUTO versioning. The changelog
now shows just the version header with no body instead.
3.85.1
(fix): Fix AUTO versioning failing for new SDK repositories. When generating an SDK
into an empty or newly initialized repository, the version extraction would fail
because all files are new additions with no previous version lines in the diff.
Now returns 0.0.1 as the initial version instead of throwing an error.
3.85.2
(chore): Regenerate internal SDKs with the latest TypeScript SDK generator to pick up improvements and fixes.
3.85.0
(feat): Auto-correct incorrect fern-api/ Docker org prefix to fernapi/ in generator names.
When a generator is specified with fern-api/ (the GitHub/npm org) instead of fernapi/
(the Docker Hub org), the CLI now automatically corrects it and prints a warning.
This applies to CLI commands (--generator flag) and generators.yml configuration files.
3.84.0
(feat): Add workspace validation caching and skipValidation flag to improve toFernWorkspace()
performance. A global validation cache eliminates redundant JSON schema validation and
Zod parsing when the same files are processed by multiple workspace instances. The
skipValidation option allows callers to bypass JSON schema validation for known-good files.
3.83.3
(fix): Preserve existing README.md during local SDK generation when the generator
does not produce one. Previously, copyGeneratedFiles deleted all files
before copying generator output, so if README generation failed silently
the file was removed from the target repository. The file copy methods now
skip deleting README.md when the generated output directory does not
include it.
3.83.2
(chore): Improve CLI startup performance by loading workspace files concurrently.
3.83.1
(fix): Fix S3 signature mismatch for docs assets outside fern/ folder. Paths containing ”../”
are now sanitized to prevent HTTP client URL normalization from breaking S3 presigned URLs.
3.83.0
(feat): Add webhook signature verification support. Webhooks can now declare a signature
configuration with type: hmac or type: asymmetric, including algorithm, encoding,
signature prefix parsing, payload format composition, and timestamp-based replay protection.
Supported via Fern Definition signature field, OpenAPI x-fern-webhook-signature extension,
and the IR WebhookSignatureVerification union.
OpenAPI example — set x-fern-webhook-signature at the document level so
all webhooks inherit the same signature configuration:
Individual webhook operations can also override the document-level default by
specifying their own x-fern-webhook-signature configuration inline.
3.82.0
(feat): Add webhook signature verification configuration to the IR. Webhooks can now
specify a signature block (in Fern Definition) or x-fern-webhook-signature
extension (in OpenAPI) with algorithm, encoding, header name, and payload format.
SDK generators can use this to produce signature verification utilities.
(feat): Add terminator field support for SSE streaming throughout the OpenAPI to Fern pipeline.
The field was already present in the Fern definition schema but missing from the OpenAPI
extension parsing, OpenAPI-IR schema, and the OpenAPI-IR to Fern conversion layers.
3.81.1
(fix): Fix example object keys starting with $ (e.g. $ref) not being unescaped when
generating the IR jsonExample. The Fern definition escapes $-prefixed keys with
a backslash to avoid collision with example references, but the backslash was not
removed when building the wire-format JSON example, causing generators to emit
invalid code (e.g. "\$ref" in Go).
3.81.0
(feat): Add --skip-autorelease-disabled flag to fern generator upgrade. When passed,
generators with autorelease: false in their configuration are skipped during
the upgrade. Skipped generators are reported in the output summary.
3.80.0
(feat): Make fern init default to OpenAPI initialization with a sample Petstore spec.
Previously, fern init created a Fern Definition workspace by default, and
fern init --openapi <path> was needed for OpenAPI. Now fern init creates an
OpenAPI workspace by default. Use fern init --fern-definition to get the previous
Fern Definition initialization behavior.
3.79.3
(fix): Fix auto-generated examples for recursive types to include required non-leaf properties (e.g. nested objects) and empty containers in minimal stubs, preventing deserialization failures in generated mock server tests.
3.79.2
(fix): Fix fern check --strict-broken-links to resolve <Markdown src="..." /> snippets used
inside link targets.
3.79.1
(fix): Fix AI example enhancement being silently skipped.
3.79.0
(feat): Support GraphQL origins that serve JSON schema directly.
3.78.1
(fix): Fix endpoint example generation for global headers, nullable params, and recursive types.
Global header example failures no longer drop all endpoint examples. Nullable/optional
wrappers are now traversed in hasExample(). Recursive types produce minimal stub examples
on cycle detection instead of cascading failures.
3.78.0
(feat): Improve library docs generation UI with clean spinner interface.
Replace verbose polling logs with interactive task spinners for better UX.
Enable parallel processing of multiple libraries with concurrent spinners.
Verbose logs moved to debug level only for cleaner output.
3.77.1
(fix): Scope PR update feature for self-hosted GitHub generation to the current generator by
including the generator name in the branch prefix (e.g. fern-bot/fernapi-fern-typescript-sdk/).
This prevents concurrent generators targeting the same repository from racing on the same PR.
3.77.0
(feat): Add support for bytes request and response body types in the fern export command.
Previously, exporting APIs with bytes endpoints would fail with “bytes is not supported”.
Now bytes request bodies are exported as application/octet-stream with format: binary,
and bytes/fileDownload/text/streaming response bodies are properly converted to their
corresponding OpenAPI content types.
3.76.0
(feat): Add support for SSE discriminator context with discriminatorContext field in IR.
Supports “data” (default) for discriminators within union data and “protocol” for
SSE protocol-level discriminators, such as event.
“data”-context discrimination :
“protocol”-context discrimination (use x-fern-discriminator-context: protocol):
Example OpenAPI usage:
3.75.0
(chore): Remove deprecated V1 python-docs navigation item. Use the library navigation item
with libraries config instead. See the library docs migration guide for details.
3.74.1
(chore): Add missing conversion for nextUri and nextPath pagination types.
3.74.0
(feat): [Beta] Library docs generated via fern docs md generate are now resolved as first-class
navigation sections in fern docs dev. The resolver reads _navigation.yml and MDX files
from the library output directory, wires stable cross-reference URLs, and sets the root
module page as the section overview.
3.73.1
(chore): Add support for basepath-aware documentation generation.
3.73.0
(feat): Add accent scale color override support (accent-1 through accent-12) to docs configuration. Fixes compatibility with updated fdr-sdk.
3.72.1
(fix): Process x-fern-ignore flag from a referenced parameter object.