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., ConversationsV2Configuration → conversations_v2_configuration,
Int32Value → int32_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.3
(chore): Move internal docs-publish logs that expose implementation details (docs ledger deploy mode, per-locale segment counts, FDR publish, ledger deployment IDs) from INFO to DEBUG level, so they only appear when debug logging is enabled.
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.73.0
(internal): Forward the GitHub Actions OIDC request variables (ACTIONS_ID_TOKEN_REQUEST_URL and
ACTIONS_ID_TOKEN_REQUEST_TOKEN) into the local-generation Docker container, so tooling running
inside a generator (e.g. npm publish to an npm trusted publisher) can mint a short-lived OIDC
token instead of relying on a long-lived registry token. No effect outside GitHub Actions OIDC jobs.
The OIDC request token is redacted from the logged container command line.
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.71.0
(internal): Compute discriminated-union base-property dedupe facts once during IR generation and expose them
on both the regular and dynamic IR: UnionTypeDeclaration.inheritedBaseProperties (base properties
every samePropertiesAsObject variant redeclares with a structurally-equal type) and
ObjectTypeDeclaration.deferredUnionBaseProperties (properties an object used exclusively as a union
variant defers to the union envelope). Generators now read one source of truth instead of
re-deriving the decision independently. The facts are computed regardless of any generator flag.
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.