> This page is for Fern CLI.

> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt.

## 5.156.0

**`(feat):`** `fern generate` now generates the `cli` target of `sdk-config.yml`. No generator takes SDK Config for it, so the
CLI translates the target into a temporary `generators.yml` for `fernapi/fern-cli-generator` and generates it
like a `generators.yml` group, locally with `--local` or remotely. No file in the project changes.
The translation writes the target's CLI generation settings (`binaryName`, `customCommands`, `rootGroup`,
`profiles`, `splitTypeCrates`, `userAgentSuffixFlag`), browser login (an authorization-code flow with a public
`clientId`) and Homebrew/Scoop `distribution`.

## 5.155.10

**`(chore):`** Upgrade `@postman/sdk-config` to 0.11.0. `fern sdk migrate` now carries the CLI generator's typed
generation settings, package metadata, Cargo dependency sources, and `distribution` (Homebrew,
Scoop, and GitHub App secret names) into SDK Config, and SDK Config accepts the public OAuth
`clientId` on authorization-code flows.

**`(fix):`** SDK Config generation no longer uploads `output.github.credentials` (root or target level) in the
SDK Config document sent to the SDK Generation API; GitHub delivery is unchanged because the
service already discarded them. Malformed `github.credentials` is rejected without echoing its
value. CLI `output.distribution` secret names are never resolved or sent as publish credentials.

## 5.155.9

**`(chore):`** Upgrade `@postman/sdk-config` to 0.11.0. `fern sdk migrate` now carries the CLI generator's typed
generation settings, package metadata, Cargo dependency sources, and `distribution` (Homebrew,
Scoop, and GitHub App secret names) into SDK Config, and SDK Config accepts the public OAuth
`clientId` on authorization-code flows.

**`(fix):`** `fern sdk migrate` now migrates OAuth `authorization-code` schemes instead of omitting them. The
literal `client-id` becomes the public `flows[].clientId`, alongside `authorizationUrl`,
`tokenUrl`, `refreshUrl`, and scopes. A scheme without a literal `client-id` (including one that
sets only `client-id-env`) is still omitted with a diagnostic, and settings SDK Config cannot hold
yet, such as `redirect-uri` and `pkce`, are reported.

## 5.155.8

**`(fix):`** `fern sdk migrate` now migrates OAuth client-credentials auth. If one auth scheme cannot be
migrated, the other schemes are still written to `api.auth`. A `FERN_API_AUTH_SCHEME_OMITTED`
warning names the scheme that was left out and the fields it affects. `FERN_API_AUTH_FIELD_UNSUPPORTED`
reports OAuth settings that SDK Config cannot hold. OAuth token URLs follow the token endpoint's base
paths, namespaced references, and environment URL overrides; a token endpoint on a host that differs
by environment is reported instead of being pointed at the API base URL.

## 5.155.7

**`(fix):`** Detect Rust as the language for `fernapi/fern-rust-sdk` and `fernapi/fern-rust-model` generators in
`generators.yml`. Previously the language was left unset, so `fern generate --package` reported
"Nothing to package" for Rust groups and Rust-specific CLI behavior (reserved-word casing, crates.io
version checks) was skipped. `--package` now builds a `.crate` for Rust SDK output and warns (keeping the
source) for Rust output without a `Cargo.toml`, such as `fern-rust-model` output.

**`(fix):`** An auth scheme declared under the name `bearer`, `basic` or `oauth` in `auth-schemes` is now
used when `api.auth` references it. Previously the reference resolved to the built-in shorthand
of the same name and dropped the declaration, so settings such as `token.env` were lost and
generators fell back to a derived environment variable (for example `<CLI_NAME>_TOKEN`).
A declared auth scheme's `docs` now also reach the IR when the reference itself has no `docs`.

## 5.155.6

**`(fix):`** `fern export` no longer marks `optional<T>` object properties (including union variant values and
multipart form fields), query parameters, headers, and request bodies as `nullable: true`. Optionality is already expressed by leaving them out of `required`, so the
extra flag turned every `optional<T>` into `optional<nullable<T>>` when the spec was imported or used
to generate an SDK. `nullable<T>` and `optional<nullable<T>>` still export with `nullable: true`, as do
`optional<T>` list items, map values, aliases, and responses, where `null` is how an absent value is sent.

## 5.155.5

**`(fix):`** SDK Config GitHub delivery through sdk-gen-api now reports its outcome. The CLI prints the pull
request link when one is created, says explicitly when no changes were detected and nothing was
delivered, and fails instead of reporting success when sdk-gen-api never confirms the delivery.

## 5.155.4

**`(fix):`** `fern sdk migrate` now keeps publish usernames written as plain text (such as the PyPI token
username `__token__`) instead of dropping them, which made `fern generate` fail with "Direct
pypi publication through sdk-gen-api requires username". Maven usernames are still omitted
unless they are environment variables, because Sonatype user tokens make them secret.

## 5.155.3

**`(fix):`** Add `algorithm-header` to HMAC `webhook-signature` blocks (including
`api.settings.webhook-signature`). It names a request header whose value selects the
HMAC algorithm per request, optionally prefixed by a key ID
(e.g. Twilio's `X-Twilio-Webhook-Signature-Settings: <key_id>;HMAC_SHA256`), and maps the
allowed header values (`HMAC_SHA1`, `HMAC_SHA256`) to algorithms. Compiled into
`HmacSignatureVerification.algorithmHeader` in the IR so generated verifiers can read the
algorithm and key ID from the request themselves.

## 5.155.2

**`(fix):`** Each feature flag evaluation now also sends a `feature_flag_evaluated` event with the same
properties (`org`, `environment`, `generator`, `language`, `version`) and the flag `response`
and `enabled` result. PostHog keeps only about one `$feature_flag_called` per org, flag, and
value per hour, so that event cannot count evaluations per generator; this one can.

**`(fix):`** `fern generate` now routes SDK Config runs and generator versions at or past their SDK Config
cutover (for example TypeScript 4.0.0+, Python 6.0.0+) through sdk-gen-api regardless of the
`use-sdk-gen-api` feature flag, which now only governs earlier versions. A post-cutover version
configured in generators.yml always fails before generation with the `fern sdk migrate` /
`--sdk-config` error, instead of being sent to legacy generation when the flag is off.
`FERN_USE_SDK_GEN_API=false` still turns sdk-gen-api off, and `fernapi/fern-mcp-server` remains
gated by the flag.