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 :

event: message
data: { "type": "completion", "content": "Hello!" }
event: message
data: { "type": "error", message: "Something went wrong!" }

“protocol”-context discrimination (use x-fern-discriminator-context: protocol):

event: completion
data: { "content": "Hello!" }
event: error
data: { "message": "Something went wrong!" }

Example OpenAPI usage:

1SseEvent:
2 oneOf:
3 - $ref: '#/components/schemas/CompletionEvent'
4 - $ref: '#/components/schemas/ErrorEvent'
5 discriminator:
6 propertyName: event
7 x-fern-discriminator-context: protocol

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.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.


3.72.0

(feat): Add support for URI and Path pagination types in OpenAPI x-fern-pagination extension. This enables HATEOS-style pagination where the next page is specified as a full URI (next_uri: $response.nextUri) or path only (next_path: $response.nextPath). These new pagination types complement the existing cursor and offset pagination options.

3.71.0

(feat): Adds support for customizing GraphQL API Reference layout (ordering, renaming operations, overriding slugs).

3.70.3

(chore): Rename resource to name in the GraphQL spec schema for generators.yml configuration.

3.70.2

(fix): Fix AsyncAPI V3 parser failing to resolve channel references that use JSON Pointer encoding. Channel paths containing forward slashes (e.g., /api/v1/streaming-tts/stream) are encoded as ~1api~1v1~1streaming-tts~1stream in $ref values per RFC 6901. The parser now correctly decodes ~1 to / and ~0 to ~ when resolving channel and message references.

3.70.1

(fix): Fix OOM crash during IR generation for OpenAPI specs with self-referencing schemas (e.g. JSON Schema’s JsonschemaSchema with 14 recursive fields). Added cycle detection to v1 example generation to prevent exponential memory growth when generating examples for recursive types.

3.70.0

(feat): Add PR update feature for local SDK generation in GitHub output mode. When generating SDKs with mode: pull-request, the CLI now checks for existing open PRs that were created by the fern-api bot and contain only generation commits. If such a PR exists, it updates the existing PR’s branch instead of creating a new one, reducing PR clutter when regenerating SDKs multiple times.



3.69.1

(internal): Regenerate older IR types with new TypeScript SDK generator.

3.69.0

(feat): [Beta] Add fern docs md generate command for generating MDX documentation from library source code. This feature requires a libraries configuration in docs.yml. The command is in beta and may change in future releases.

3.68.1

(fix): Fix grouped multi-API environment server handling to preserve defaultUrl, urlTemplate, and variables metadata when merging multiple OpenAPI specs with group-multi-api-environments: true. Previously, server URL templating metadata was silently dropped during the merge, causing generated SDKs to use malformed template-substituted URLs as defaults. Also fixes API name extraction for grouped base URL keys to use the clean x-fern-default-url value instead of the variable-substituted URL.

3.68.0

(feat): Add folder-title-source global setting in docs.yml under settings. When set, this value is used as the default title-source for all folder navigations that do not explicitly specify their own title-source. This allows configuring frontmatter or filename as the default title derivation strategy for all folders in one place.

3.67.1

(fix): Fix title-source: frontmatter in folder navigation to correctly pass the setting through to buildNavigationForDirectory. Previously, the title-source option was ignored when expanding folder configurations, so page titles and sidebar titles always derived from file names. Now, when title-source: frontmatter is set, page titles and the folder section title use the frontmatter title field.

3.67.0

(feat): Adds schema name and title collision detection for OpenAPI/AsyncAPI specs. When title-as-schema-name is enabled and multiple schemas share the same title, fern check now reports an error identifying the conflicting schemas. To opt in to automatic resolution, set resolve-schema-collisions: true in your generators.yml settings under api/specs:

1api:
2 specs:
3 - asyncapi: asyncapi.yml
4 settings:
5 title-as-schema-name: true
6 resolve-schema-collisions: true

When enabled, colliding titles are disambiguated with a numeric suffix (e.g. OpenAI2) and a warning is emitted instead of an error.

(fix): Run OSS validation rules (e.g. schema title collision detection) during fern generate, not just during fern check. This ensures validation errors are surfaced before generation proceeds.

3.66.0

(feat): Add support for server URL templating in multi-URL environments. The Fern definition schema now supports url-templates, default-urls, and variables fields on MultipleBaseUrlsEnvironmentSchema, enabling SDKs to expose server variables as constructor parameters with runtime URL interpolation.

3.65.1

(fix): Fix fern check --strict-broken-links was not validating markdown files referenced by sections with paths.

3.65.0

(feat): Add --generator option to fern generate to run a specific generator by name. Filters within the resolved group (from --group or default-group) to only run the specified generator.


3.64.6

(fix): Fix fern generator upgrade failing when encountering unrecognized generator names. Previously, an unrecognized generator (e.g. fernapi/java-model) would block the entire upgrade process. Now unrecognized generators are skipped with a warning, allowing the remaining generators to be upgraded. Also adds support for the java-model legacy generator name alias.

3.64.5

(fix): Add support for legacy generator names (fernapi/java-model, fernapi/fern-typescript) used in older IR version configurations.

3.64.4

(fix): Fix additionalProperties in examples being lost when a schema defines additionalProperties: true. Previously, additional properties in examples were set to undefined during conversion, causing them to be stripped from the output. Now the actual values from the example are preserved.

3.64.3

(fix): Fix extraction of large generated ZIP files (>2 GiB) by using the yauzl-promise library instead of the decompress library. Node.js has a 2 GiB limit for reading files into buffers, which caused the decompress library to fail with ERR_FS_FILE_TOO_LARGE errors for large SDK outputs. The yauzl-promise library streams ZIP entries individually instead of loading the entire file into memory.

3.64.2

(fix): Add support for OpenAPI server templating. Server variables are now preserved in the IR instead of being exploded into multiple environments, enabling SDKs to configure URL variables at runtime. Supports both single and multiple base URL environments.

3.64.1

(fix): Fix example validation to correctly handle allOf schema compositions. Properties from composed schemas are now properly recognized, eliminating false positive “unexpected property” warnings.

3.64.0

(feat): Improve .fernignore to prevent generation of new files. Previously, .fernignore only prevented modification or deletion of existing files during SDK regeneration.


3.63.0

(feat): Add support for setting subfolder position based on the position field in the index file’s frontmatter when using folder navigation. Subfolders with a position are sorted before those without, and items with the same position are sorted alphabetically.

3.62.0

(feat): Add title-source configuration option for folder navigation. When using folder navigation, you can now set title-source: frontmatter to use the title field from frontmatter for page and section titles instead of deriving titles from file names. The default behavior (title-source: filename) remains unchanged.

3.61.0

(feat): Add support for @/ prefix in MDX import statements to indicate absolute paths from the fern folder root. Users can now write import { Banner } from '@/components/Banner' instead of using relative paths like import { Banner } from '../../../components/Banner'. The imports are transformed to relative paths at publish time.


3.60.2

(fix): Fix header example generation to use global header literal values when defined in generators.yml

3.60.1

(fix): Fix custom header and footer components not being recognized in docs.yml. The serialization schema was missing the header and footer fields, causing validation errors when using these new fields.

3.60.0

(feat): Add support for custom header and footer components in docs.yml. Users can now specify header: ./path/to/header.tsx and footer: ./path/to/footer.tsx to replace the default header and footer with custom React components. The components must have a default export.

3.59.1

(fix): Fix unknown argument error for fern completion.

3.59.0

(feat): Add shell completion support via fern completion. Running this command outputs a shell script that can be sourced in your .bashrc or .zshrc to enable tab completion for Fern CLI commands and options.

3.58.0

(feat): Add support for setting page availability in frontmatter. Users can now add availability: beta (or other values like stable, generally-available, in-development, pre-release, deprecated) to a page’s frontmatter to display an availability badge. When set in frontmatter, it overrides the availability defined in the navigation (docs.yml).

3.57.1

(fix): Add availability support for webhooks. Webhooks can now inherit availability status from their parent section/package, and display availability badges in the docs UI.


3.57.0

(feat): Add support for index.mdx (or index.md) files as section overviews when using folder navigation. When a nested subfolder contains an index.mdx file, it is now automatically used as the section overview page instead of appearing as a regular page in the navigation.

3.56.10

(fix): Add proactive debug logging for git environment when using self-hosted GitHub mode. Running with --log-level debug now outputs git path, version, and PATH before attempting to clone, helping diagnose git availability issues without requiring manual debug prints.

3.56.9

(fix): Fix undiscriminated union variant displayName to only use user-specified values. Previously, displayName would fall back to the type’s originalName, which for OpenAPI-sourced APIs could be long generated schema names (e.g., “ObjectsObjectTypeBatchUpsertPostRequestBody…”). Now displayName is only set when explicitly specified via display-name in the Fern definition.

3.56.8

(fix): Support GraphQL API References. You can now add a graphql spec to generators.yml to render an auto-generated reference in the docs.

3.56.0

(feat): Add namespace prefix support for endpoint references. When working with multiple OpenAPI specs that have namespaces, you can now disambiguate endpoints using the namespace::METHOD /path syntax (e.g., oauth::POST /v2/token). This is useful for OAuth configuration when multiple specs may have overlapping paths.