Skip to content

🌿 [Scheduled] Upgrade Fern CLI - #6559

Open
fern-api[bot] wants to merge 1 commit into
mainfrom
fern-autorelease/update
Open

🌿 [Scheduled] Upgrade Fern CLI #6559
fern-api[bot] wants to merge 1 commit into
mainfrom
fern-autorelease/update

Conversation

@fern-api

@fern-api fern-api Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Upgrading from 5.59.0 to 5.90.1 - Changelog

    5.90.1
  • fix: Thread the PHP SDK's Composer package identity (name + --version) into the IR's
    filesystem publish target for local-file-system output, so the PHP generator can
    stamp the real version into composer.json instead of defaulting to 0.0.0.

  • 5.90.0

  • feat: Add ref field to the git library input in docs.yml, allowing users to
    generate SDK reference documentation from a specific branch, tag, or commit SHA
    instead of only the default branch.

  • fix: Merge an operation's parameters from overrides.yml by parameter name instead of by array
    position, so an override no longer renames or drops whichever parameter happens to sit at that
    index. When several parameters share a name, in disambiguates them, and an override matching
    no parameter is appended.

  • fix: Read a parameter's description from its inline schema when the parameter object itself does
    not declare one, so descriptions declared inside the schema (as generated by validation
    libraries) reach the SDKs and API reference.

  • 5.89.6

  • fix: fern generate --local no longer bumps the magic placeholder version as if it were a
    real previous version, which produced versions such as 0.0.0-fern-placeholder.0.
    Placeholder candidates from the diff, .fern/metadata.json and git tags are skipped so
    the next resolution source is used instead.

  • 5.89.5

  • fix: Improve fern generate --package artifacts: TypeScript tarballs are compiled before
    packing so they ship runnable JavaScript (falling back to tsc when the package has no
    build script), Java packaging emits a POM with dependency metadata next to the JAR, and
    Python host-mode packaging retries in an isolated venv (python -m build) when pip wheel
    fails on the host toolchain.

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

  • 64 additional updates, see more

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

  • fix: local-file-system output now threads the C# SDK's package identity (from the generator's
    package-id config) and the user-provided --version into the IR via a new nuget
    filesystem publish target, matching the existing npm/pypi/maven/crates/go behavior. This
    enables the C# generator to stamp the SDK name/version into Version.cs and the structured
    User-Agent header.

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

  • 5.79.0

  • feat: Add an experimental external-sitemaps option to the experimental block in
    docs.yml. It accepts a list of absolute sitemap URLs whose pages are indexed in
    search alongside your documentation (tagged to the same domain) but flagged as
    third-party so they rank below all first-party docs.

  • 5.78.0

  • feat: The OpenAPI importer now automatically deconflicts path parameters whose names collide
    with other request properties (query parameters, headers, or request body properties).
    The colliding path parameter's SDK-facing name gets a PathParam suffix (e.g. an
    {idType} path parameter colliding with an idType body property becomes
    idTypePathParam), so such OpenAPI-compliant specs generate without requiring an
    x-fern-parameter-name override. The wire format is unchanged, since path parameter
    names never appear on the wire. Explicit x-fern-parameter-name overrides still take
    precedence.

  • 5.77.0

  • feat: Add an ignore-tags OpenAPI setting to generators.yml. When enabled,
    operation-level tags are ignored when determining the SDK structure:
    endpoints fall back to the root package (or their namespace) and method
    names are derived from each operation's operationId.

    api:
      specs:
        - openapi: ./openapi.yml
          settings:
            ignore-tags: true
  • 5.76.0

  • feat: Support webhook signature verification against multiple normalized notification URL
    forms via url-normalization (port variants and legacy query encoding) on HMAC webhook
    signatures, in both Fern Definition and OpenAPI (x-fern-webhook-signature).

  • 5.75.9

  • fix: Fix multi-API environment grouping (group-multi-api-environments) when a spec's
    environment URLs differ by a dot-separated host segment (e.g. api.stage.acme.com):
    the per-API URL key is now derived once per spec instead of per server, so all
    environments share a consistent set of URL keys. Grouped environments also keep
    their original user-facing names (e.g. Production) instead of normalized
    matching keys (e.g. PRD).

  • 5.75.8

  • fix: Fix multi-API environment grouping (group-multi-api-environments) when a spec's
    environment URLs differ by a dot-separated host segment (e.g. api.stage.acme.com):
    the per-API URL key is now derived once per spec instead of per server, so all
    environments share a consistent set of URL keys. Grouped environments also keep
    their original user-facing names (e.g. Production) instead of normalized
    matching keys (e.g. PRD).

  • 5.75.7

  • fix: Bump @fern-api/generator-cli to 0.9.52. Under --version AUTO, the AI-authored
    changelog.md no longer reports routine version bumps (e.g. the User-Agent /
    X-Fern-SDK-Version headers) as changed or removed, and the Go /vN module suffix
    is retained in the X-Fern-SDK-Name header value and README install/import samples.

  • 5.75.6

  • fix: Resolve the PHP SDK generator's camelCase packageName config key when
    computing the package name for a generator. This lets local-file-system PHP
    generation populate the User-Agent (and SDK name/version) headers, matching
    the behavior of the other generators' package-identity config keys.

  • 5.75.4

  • fix: fern check now compiles each docs page's MDX and reports syntax errors such as
    unclosed components (e.g. a <Card> without a closing tag). Previously the
    MDX-validation rule was defined but not registered, so malformed MDX passed
    validation and only broke at render/build time. Reported at warning severity to
    avoid breaking existing runs on repos with latent MDX issues.

  • 5.75.3

  • fix: Improve OpenAPI example generation performance for schemas with shared allOf
    ancestors while preserving inherited properties and constraints.

  • 5.75.2

  • fix: The OpenAPI importer now emits a warning when a discriminated union lists a member in its
    oneOf/anyOf that is absent from the discriminator mapping. Previously such members were
    silently dropped from the generated union, producing an SDK whose wire contract did not match
    the spec. The warning names the offending schema so the failure is loud instead of silent.

  • 5.75.1

  • fix: Fix fern docs theme upload failing with a 422 "Content has not been uploaded" error
    when binding theme assets. The content-existence check now uses the org-scoped registry
    content path so uploaded content is stored under the same org as the subsequent file bind.

  • fix: Fix fern docs theme upload always targeting the production registry regardless of the
    CLI build environment. It now falls back to DEFAULT_FDR_ORIGIN (the origin configured for
    the CLI build, e.g. dev) like other CLI services, so a dev-CLI login token is no longer sent
    to the production registry (which returned 403 "Failed to resolve organizations").

  • 5.75.0

  • feat: Add a new smart-casing-digit-word-boundary option to generators.yml. When enabled
    alongside smart-casing, snake_case names preserve the word boundary after a digit run
    (e.g., ConversationsV2Configurationconversations_v2_configuration,
    Int32Valueint32_value). The option defaults to false, restoring the
    pre-5.70.3 behavior where the digit run stays fused to the following word
    (conversations_v2configuration).

  • 5.74.2

  • fix: Fix discriminated union variants that reference a nested oneOf/anyOf being
    wrapped in a spurious "value" property. The OpenAPI importer now merges
    the nested oneOf variants into a single object with optional fields,
    preserving the correct wire format.

  • 5.74.1

  • fix: Bump @fern-api/generator-cli to 0.9.49. Self-hosted push/PR commits created with a
    personal access token (ghp_/github_pat_) are now attributed to fern-api[bot]
    as author and committer instead of the PAT owner.

  • 5.74.0

  • feat: Add support for webhook signature schemes that transmit a hash of the raw request
    body separately rather than signing the body directly (for example, Twilio's
    bodySHA256 query parameter for JSON bodies). HMAC webhook signatures now accept a
    body-hash-binding with an algorithm, encoding, and a location (currently a
    query-parameter on the notification URL). The field is threaded through the Fern
    Definition schema, the IR, and the OpenAPI importer, and validation requires
    notification-url in payload-format.components when a query-parameter binding is
    configured.

  • 5.72.1

  • fix: Fix disable-sri being dropped for remote JS scripts when publishing docs
    via the ledger deploy path. The per-script disableSri flag from docs.yml
    is now forwarded through the ledger config, so flagged scripts render without
    an SRI integrity (or crossorigin) attribute.

  • 5.72.0

  • feat: Add a disable-sri option to remote js scripts in docs.yml. When set to
    true, the script is rendered without a Subresource Integrity (SRI) integrity
    attribute, which is useful for scripts whose contents change over time.

  • fix: Resolve the auto-generate-idempotency-key config from a generator invocation's resolved
    config when no raw generators.yml block is present. This restores idempotency-key
    auto-generation for synthetic invocations (e.g. the seed test harness) that populate config
    directly without a raw block.

  • 5.70.3

  • fix: Fix smart-casing snake_case names dropping the word boundary after a number.
    Names like ConversationsV2Configuration now generate conversations_v2_configuration
    instead of conversations_v2configuration (matching the camelCase and pascalCase
    variants). Trailing numbers remain fused, e.g. applicationV1 still generates
    application_v1.

  • 5.70.2

  • fix: Fix multi-API environment grouping (group-multi-api-environments) selecting the wrong
    base URL when more than two specs are merged and several specs share identical servers.
    Duplicate servers no longer accumulate across merges, so environments with the same name
    but different URLs are now grouped into a multi-URL environment instead of collapsing to
    the last spec's URL.

  • 5.70.1

  • fix: fern generate with an explicit --version X.Y.Z now records a version-only entry
    (version header with an empty description) in the SDK repo's changelog.md, and existing
    changelog entries are preserved across regenerations instead of being wiped.

  • 5.70.0

  • feat: Add an opt-in mask-pii setting under ai-search in docs.yml. When enabled, personally
    identifiable information (PII) in user messages is masked before being sent to Ask Fern.
    Disabled by default.

  • 5.69.0

  • feat: Add an api.settings.auto-generate-idempotency-key option in generators.yml that applies
    idempotency-key auto-generation to every generator in the API, so it no longer has to be set
    on each generator's config. A generator's own config.auto-generate-idempotency-key still
    overrides the API-level value. Accepts the same boolean shorthand or header-name / methods
    object form, and is resolved into the IR (SdkConfig.idempotencyKeyGeneration) as before.

  • 5.68.0

  • feat: Add an auto-generate-idempotency-key generator config key. When enabled, the
    CLI records idempotency-key auto-generation in the IR (SdkConfig.idempotencyKeyGeneration)
    so every generator reads a single, canonical setting from the IR instead of each
    defining its own config key. Accepts true or { header-name: "Idempotency-Key" }
    and is stripped from the config forwarded to generators.

  • 5.67.1

  • fix: Fix --version AUTO leaking the literal "AUTO" string into self-hosted generated
    SDKs. Both the IR version field (which drives the User-Agent header and
    X-Fern-SDK-Version) and the IR publishing config (which drives package.json and
    version.ts) now use the language-mapped magic version placeholder
    ("0.0.0-fern-placeholder") instead of the raw "AUTO" version, so these fields are
    stamped with the computed version after post-generation replacement rather than "AUTO".

  • 5.67.0

  • feat: Custom MDX components (experimental.mdx-components) can now import third-party
    libraries. The CLI bundles component files with rolldown (via npx) at docs build
    time, inlining dependencies resolved from the docs project's node_modules.

  • 5.66.1

  • fix: Validate that a docs instance's url and custom-domain share the same basepath for all
    sites, not just basepath-aware ones. Navigation links and redirects are generated relative to
    the basepath, so the CLI now fails with a clear error when they differ.

  • 5.66.0

  • feat: Resolve x-fern-global-parameters applicability once at IR-generation time.
    HttpEndpoint.globalParameters now holds the fully resolved set of global
    parameters that apply to each endpoint (explicit opt-ins plus matching
    apply: auto parameters), with body-location parameters gated on the
    endpoint's request-body schema actually containing the dotted target path.
    An explicit opt-in whose request body lacks the target is dropped with a
    generation-time warning.

  • 5.65.8

  • fix: Docs configs with a path input library no longer crash fern docs dev and
    fern generate --docs. parseLibrariesConfiguration now accepts both git
    and path library inputs instead of throwing on path, so a site whose
    library docs were generated locally with fern docs md generate --local can
    be previewed and published.

  • 5.65.7

  • fix: fern check now fails when docs.yml contains both navigation and products.
    These are mutually exclusive (as navigation and versions already were): in a
    multi-product site the navigation lives in each product's referenced file, so a
    top-level navigation block silently overrides the products and renders empty
    navigation.

  • 5.65.5

  • fix: Improve fern docs dev initial build time by pre-fetching external <Code src="https://..."/> URLs
    in parallel instead of sequentially, and optimizing image processing with early-exit checks and
    streaming scanning. For large docs sites with many external code snippets, this reduces initial
    build time from ~57s to ~14s (75% faster).

  • 5.65.4

  • fix: fern check now errors when a path parameter shares a name with another request
    property (an inlined request body property, query parameter, or header), including
    collisions that only appear after camelCase normalization. These collisions produce
    broken or ambiguous generated SDK code; use x-fern-parameter-name (OpenAPI) or the
    name property (Fern definition) to deconflict.

  • fix: The OpenAPI importer no longer silently renames a request body property that
    collides with a path parameter. These collisions now surface as fern check
    errors, forcing explicit deconfliction (e.g. via x-fern-parameter-name).

  • 5.65.3

  • fix: Fix relative .md/.mdx link resolution in translated documentation pages. Previously, translated pages passed an empty markdownFilesToPathName map, so relative markdown links (e.g., ../reference/support-matrix.md) were not resolved to their published slug URLs.

  • 5.65.2

  • fix: Improve error messages when ledger docs publishing fails: surface the
    server-side validation issues (field paths and messages) so the exact
    failing field is visible without needing server-side log access.

  • 5.65.1

  • fix: Improve fern docs dev reload performance for content edits (35s → 4-5s).
    Reduces debounce from 1000ms to 300ms, skips background validation for
    markdown-only changes, and writes a generation counter file for the docs
    bundle to detect stale cache entries without HTTP round-trips.

  • 5.65.0

  • feat: Add support for x-fern-global-parameters OpenAPI extension. Allows declaring
    global defaults for request body, query, header, and path fields that are set
    once at the SDK client level and injected at the declared wire location, with
    per-call values winning. IR bumped to 67.10.0.

  • 5.64.3

  • fix: Fix pages losing their sidebar when a top-level landing-page shares a slug
    with a page in versioned navigation. Reverts a 5.58.0 change: the top-level
    landing-page is no longer copied into each version, and product-level
    landing-page config is no longer applied to products inside product groups
    (restoring pre-5.58.0 rendering). landing-page in version files is
    unaffected.

  • 5.64.2

  • fix: OpenAPI import: an endpoint that declares both a body-bearing 2xx response and a 204 No
    Content response now correctly produces an optional success body, even when the 204
    erroneously declares a response body. Per RFC 9110 a 204 cannot carry a body, so the
    declared 204 body is ignored (with a warning) and the success response type is wrapped
    optional. Previously the 204 was dropped and the return type stayed non-optional, so a real
    204 (empty body) failed to decode in generated SDKs. Applies to both the legacy and v3
    OpenAPI importers.

  • 5.64.1

  • fix: Fix GraphQL namespace types (e.g. Inventory, Geography) being excluded from the
    type registry and missing parent operations for query pages. Namespace types are
    now registered so their fields render correctly on landing pages.

  • 5.64.0

  • fix: Fix proto target path resolution when using remote git sources. Previously the target
    was resolved relative to the workspace instead of the cloned repository, causing
    "file missing" errors.

  • feat: Support commit SHA references in git source ref field. Previously only branch names
    and tags were supported; commit SHAs now work via fetch+checkout.

  • 5.63.1

  • fix: Prevent --version AUTO from embedding literal 'AUTO' in generated SDK code during remote generation. The magic placeholder is now substituted before IR generation in the remote path, matching the local generation fix.

  • 5.63.0

  • feat: Extend dynamic IR OAuth types with custom properties and populate them in
    DynamicSnippetsConverter, enabling dynamic snippet generators to include
    custom OAuth token endpoint request parameters in generated code examples.

  • 5.62.2

  • fix: Strip CLI-only config keys (e.g. user-agent) from the custom config
    before forwarding to generator containers, preventing strict validation
    errors in generators that reject unknown keys.

  • 5.62.1

  • fix: Fix float primitive types rendering as 'double' in documentation. Float types now correctly render as 'float'.

  • 5.62.0

  • feat: Add --generate-tests flag to fern generate to enable test file generation
    even when outputting to a local file system. Previously, tests were only generated
    for GitHub output modes.

  • 5.61.0

  • feat: Add user-agent generator config option that accepts a template string for
    the User-Agent header. Supported placeholders: {packageName}, {version},
    {language}, {generatorVersion}, {organization}, {apiName}. When absent,
    defaults to {packageName}/{version} (current behavior, non-breaking).

  • 5.60.0

  • feat: Add mcp option to page-actions in docs.yml. When set to false, the MCP server
    endpoint is disabled, its URL is omitted from llms.txt and agent prompts, and the
    "Connect to Claude Code" / "Connect to Cursor" buttons are hidden.

  • fix: Add payload-format support for asymmetric webhook signature verification,
    allowing the timestamp and other components to be included in the signed
    payload. Previously, only the raw body was signed for asymmetric webhooks,
    making the timestamp tolerance check ineffective against replay attacks.


Requested by: Fern Dashboard (fern)

@fern-api
fern-api Bot requested a review from devalog as a code owner August 6, 2026 19:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants