4.65.0

(feat): Add --output flag to fern sdk preview that accepts filesystem paths and/or registry URLs. Omit to publish to the default preview registry and write to a temp directory. Use --output <path> for disk-only output, or --output <path> --output <url> to write to disk and publish to a custom registry.

4.64.0

(feat): Support default on discriminant properties in OpenAPI discriminated unions. When a variant’s discriminant property has a default value matching its const value, the default variant is threaded through the IR so generators can fall back to it when the discriminant field is omitted. The x-fern-default extension takes priority over default if both are set.

4.63.5

(fix): Fix union variant display names showing “object” instead of proper schema names in documentation.

4.63.4

(fix): Add no-conflicting-parameter-names OSS validation rule to fern check. Detects when header parameters and query/path parameters on the same endpoint normalize to the same camelCase name, which causes broken generated SDK code (Python SyntaxError from duplicate keyword arguments, TypeScript duplicate interface properties). The rule reports an error at validation time so the collision is caught before code generation.

4.63.3

(fix): Fix coerce-enums-to-literals: false not being respected for boolean single-value enums (type: boolean, enum: [true]). Previously, boolean enums were always coerced to literals regardless of the setting. Now getSingleBooleanEnumValue checks coerceEnumsToLiterals consistently with the string enum path.

4.63.2

(fix): Add log rotation for fern docs dev debug logs in ~/.fern/logs/. Old log files are automatically deleted when the directory exceeds 100 MB, keeping the most recent logs.

4.63.1

(fix): Fix Go dynamic snippets not being generated during docs publish. The Go package name comparison between snippet configuration and generator output was failing due to an https:// prefix mismatch, causing docs to fall back to raw net/http code instead of SDK-idiomatic snippets.