diff --git a/fern/products/cli-api-reference/cli-changelog/2023-08-01.mdx b/fern/products/cli-api-reference/cli-changelog/2023-08-01.mdx index 5e202bbda8..164fd3bcc1 100644 --- a/fern/products/cli-api-reference/cli-changelog/2023-08-01.mdx +++ b/fern/products/cli-api-reference/cli-changelog/2023-08-01.mdx @@ -5,9 +5,9 @@ properties: typesReferencedOnlyByService: docs: "Types referenced by exactly one service." - type: `map>` + type: ``map>`` sharedTypes: docs: "Types referenced by either zero or multiple services." - type: `list` + type: ``list`` ``` diff --git a/fern/products/cli-api-reference/cli-changelog/2024-09-04.mdx b/fern/products/cli-api-reference/cli-changelog/2024-09-04.mdx index 43f646c401..bd98690b6c 100644 --- a/fern/products/cli-api-reference/cli-changelog/2024-09-04.mdx +++ b/fern/products/cli-api-reference/cli-changelog/2024-09-04.mdx @@ -48,13 +48,13 @@ use them in alias declarations to minimize code duplication: ```yml types: - `GenericTest`: + ``GenericTest``: properties: value: T other-value: string GenericApplication: - type: `GenericTest` + type: ``GenericTest`` ``` More information can be found here: https://buildwithfern.com/learn/api-definition/fern/types#generics. diff --git a/fern/products/cli-api-reference/cli-changelog/2025-01-14.mdx b/fern/products/cli-api-reference/cli-changelog/2025-01-14.mdx index e19e315d2f..9293de1bc9 100644 --- a/fern/products/cli-api-reference/cli-changelog/2025-01-14.mdx +++ b/fern/products/cli-api-reference/cli-changelog/2025-01-14.mdx @@ -24,7 +24,7 @@ types: User: properties: name: string - email: `nullable` + email: ``nullable`` ``` diff --git a/fern/products/cli-api-reference/cli-changelog/2025-08-14.mdx b/fern/products/cli-api-reference/cli-changelog/2025-08-14.mdx index 860ef33411..59c85f80ae 100644 --- a/fern/products/cli-api-reference/cli-changelog/2025-08-14.mdx +++ b/fern/products/cli-api-reference/cli-changelog/2025-08-14.mdx @@ -40,9 +40,9 @@ service: request: body: properties: - author: `optional` - tags: `optional>` - title: `optional` + author: ``optional`` + tags: ``optional>`` + title: ``optional`` content-type: application/json name: UploadDocumentRequest ... diff --git a/fern/products/cli-api-reference/cli-changelog/2026-03-16.mdx b/fern/products/cli-api-reference/cli-changelog/2026-03-16.mdx index f0c6439662..c989f7f359 100644 --- a/fern/products/cli-api-reference/cli-changelog/2026-03-16.mdx +++ b/fern/products/cli-api-reference/cli-changelog/2026-03-16.mdx @@ -1,3 +1,13 @@ +## 4.31.2 +**`(fix):`** Sanitize changelog entries to wrap type references containing angle +brackets (e.g. `Optional`, `Map`) in inline +code fences. This prevents MDX compilers from parsing these as +unclosed HTML/JSX tags when changelogs are rendered in documentation +sites. The sanitization is applied to both seed-based and +auto-versioned changelog generation paths, and the AI prompt now +instructs the model to wrap such references in backticks. + + ## 4.31.0 **`(feat):`** Update the gRPC SDK generator to not require the `google.api.http` annotation on endpoints. diff --git a/fern/products/cli-api-reference/cli-changelog/2026-03-17.mdx b/fern/products/cli-api-reference/cli-changelog/2026-03-17.mdx index ac85da762f..92ebbe392d 100644 --- a/fern/products/cli-api-reference/cli-changelog/2026-03-17.mdx +++ b/fern/products/cli-api-reference/cli-changelog/2026-03-17.mdx @@ -1,3 +1,39 @@ +## 4.33.0 +**`(feat):`** Add `enums-coerceable-to-literals` option for `coerce-consts-to`, and make +it the new default. This behaves like `enums` (const values become +single-element enums) but allows `coerce-enums-to-literals` to transitively +coerce them to literals, which is consistent with past default behavior. The +existing `enums` option continues to block this transitive coercion. + + +## 4.32.2 +**`(fix):`** Fix custom LICENSE files not being included in SDK output when using +`fern generate --local`. The license path (e.g. `../../LICENSE`) was +resolved relative to `fern.config.json` instead of `generators.yml`, +causing the file to not be found in multi-API workspace layouts where +these files are in different directories. + + +## 4.32.1 +**`(fix):`** Downgrade the `no-openapi-v2-in-docs` validation rule from an error to a +warning. Fern supports OpenAPI 2.0 (Swagger) specs in docs generation, so +`fern check` no longer fails when Swagger 2.0 specs are present. + + +## 4.32.0 +**`(feat):`** Add support for the `x-fern-sdk-method-name` extension on AsyncAPI v2 +`publish` and `subscribe` operations. Users can now customize the +generated SDK method name (e.g., changing `sendPublish` to `send`) +without migrating to AsyncAPI v3. + + +## 4.31.3 +**`(fix):`** Enable WebSocket auth in AsyncAPI by populating IR auth schemes. The AsyncAPI +converter now converts security schemes from both generators.yml auth overrides +and native AsyncAPI spec securitySchemes into IR AuthScheme objects, so the docs +explorer correctly renders auth forms for WebSocket endpoints. + + ## 4.31.1 **`(fix):`** Fix `x-fern-streaming` with `stream-condition` emitting the condition field as an optional boolean instead of a required literal in split request types. diff --git a/fern/products/sdks/overview/csharp/changelog/2026-01-15.mdx b/fern/products/sdks/overview/csharp/changelog/2026-01-15.mdx index 26916ad6e5..308f35ce8d 100644 --- a/fern/products/sdks/overview/csharp/changelog/2026-01-15.mdx +++ b/fern/products/sdks/overview/csharp/changelog/2026-01-15.mdx @@ -24,13 +24,13 @@ var request2 = new UpdateUserRequest { Name = "John" }; var request3 = new UpdateUserRequest { Name = null }; ``` -The `Optional` type includes: +The ``Optional`` type includes: * `IsDefined` property to check if a value is set * `Value` property to access the value (throws if undefined) * `TryGetValue` method for safe value access * Implicit conversion operators for ergonomic usage * Full JSON serialization support -* `IEquatable>` implementation for proper equality checks +* ``IEquatable>`` implementation for proper equality checks **`(fix):`** Fix query parameter serialization to properly handle nullable struct types (DateTime?, DateOnly?, etc.) by adding `.Value` accessor when needed. diff --git a/fern/products/sdks/overview/csharp/changelog/2026-01-20.mdx b/fern/products/sdks/overview/csharp/changelog/2026-01-20.mdx index 9ddab32b47..cbce104a72 100644 --- a/fern/products/sdks/overview/csharp/changelog/2026-01-20.mdx +++ b/fern/products/sdks/overview/csharp/changelog/2026-01-20.mdx @@ -29,14 +29,14 @@ var contentLength = headers.ContentLength; ``` New types: -* `WithRawResponseTask` - Awaitable task wrapper supporting both usage patterns -* `WithRawResponse` - Container for data + raw response metadata +* ``WithRawResponseTask`` - Awaitable task wrapper supporting both usage patterns +* ``WithRawResponse`` - Container for data + raw response metadata * `RawResponse` - HTTP response metadata (status code, headers, URL) * `ResponseHeaders` - Case-insensitive header collection with enumeration support Benefits: * Zero overhead when raw response access isn't needed -* Backward compatible - implicit conversion to `Task` supported +* Backward compatible - implicit conversion to ``Task`` supported * Type-safe access to HTTP metadata when debugging or logging * Case-insensitive header lookups following HTTP standards diff --git a/fern/products/sdks/overview/csharp/changelog/2026-03-16.mdx b/fern/products/sdks/overview/csharp/changelog/2026-03-16.mdx new file mode 100644 index 0000000000..862d840f3d --- /dev/null +++ b/fern/products/sdks/overview/csharp/changelog/2026-03-16.mdx @@ -0,0 +1,8 @@ +## 2.31.1 +**`(fix):`** Fix CS0426 compilation error when the client class name matches a namespace +root segment (e.g., class `Candid` in namespace `Candid.Net`). The C# compiler +previously resolved `Candid.Net` as looking for a `Net` member on the `Candid` +type instead of the `Candid.Net` namespace. The generator now uses `global::` +prefixes in both inline references and `using` directives to disambiguate. + + diff --git a/fern/products/sdks/overview/csharp/changelog/2026-03-17.mdx b/fern/products/sdks/overview/csharp/changelog/2026-03-17.mdx new file mode 100644 index 0000000000..d0860d5d82 --- /dev/null +++ b/fern/products/sdks/overview/csharp/changelog/2026-03-17.mdx @@ -0,0 +1,7 @@ +## 2.32.0 +**`(feat):`** Add support for the `google.protobuf.Empty` well-known type for gRPC endpoints. + + +**`(fix):`** Add more permissive handling for optional `google.protobuf.Timestamp` response properties. + + diff --git a/fern/products/sdks/overview/java/changelog/2024-06-13.mdx b/fern/products/sdks/overview/java/changelog/2024-06-13.mdx index 7f39ea0ef1..1ed6b60c58 100644 --- a/fern/products/sdks/overview/java/changelog/2024-06-13.mdx +++ b/fern/products/sdks/overview/java/changelog/2024-06-13.mdx @@ -35,7 +35,7 @@ service: response: ListUsersResponse ``` -The generated `SyncPagingIterable` can then be used to traverse through the `User` objects: +The generated ``SyncPagingIterable`` can then be used to traverse through the `User` objects: ```java for (User user : client.users.list(...)) { diff --git a/fern/products/sdks/overview/php/changelog/2026-03-17.mdx b/fern/products/sdks/overview/php/changelog/2026-03-17.mdx new file mode 100644 index 0000000000..dd0b78cbec --- /dev/null +++ b/fern/products/sdks/overview/php/changelog/2026-03-17.mdx @@ -0,0 +1,8 @@ +## 2.2.1 +**`(fix):`** Fix Wire test files to read `WIREMOCK_URL` environment variable instead of +hardcoding `http://localhost:8080`. The `setUp()` method now declares a +`$wiremockUrl` variable that reads from the environment with a fallback, +enabling tests to work with dynamically assigned Docker ports in local +development and CI/CD environments. + + diff --git a/fern/products/sdks/overview/python/changelog/2026-03-17.mdx b/fern/products/sdks/overview/python/changelog/2026-03-17.mdx index a69d3f3cc3..8da89d58ea 100644 --- a/fern/products/sdks/overview/python/changelog/2026-03-17.mdx +++ b/fern/products/sdks/overview/python/changelog/2026-03-17.mdx @@ -1,3 +1,10 @@ +## 5.0.3 +**`(fix):`** Skip Docker container management in generated `tests/conftest.py` when the +`WIREMOCK_URL` environment variable is already set. This allows wire tests to +run in CI/CD pipelines that provide an external WireMock sidecar container +without requiring Docker-in-Docker support. + + ## 5.0.2 **`(fix):`** Add docstring emission for unknown/any type alias definitions. When a type alias resolves to `typing.Any` and has a description in the API definition, the generated diff --git a/fern/products/sdks/overview/ruby/changelog/2026-03-17.mdx b/fern/products/sdks/overview/ruby/changelog/2026-03-17.mdx new file mode 100644 index 0000000000..994b7f4f2e --- /dev/null +++ b/fern/products/sdks/overview/ruby/changelog/2026-03-17.mdx @@ -0,0 +1,9 @@ +## 1.1.1 +**`(fix):`** Strip zero-millisecond datetime values from WireMock stub query parameters. +Ruby's DateTime/Time ISO 8601 serialization omits zero fractional seconds +(e.g., `2024-09-08T12:00:00Z`), but mock-utils generates values with `.000Z` +(e.g., `2024-09-08T12:00:00.000Z`). WireMock's `equalTo` matcher is exact-match, +so the stubs never fired for datetime query parameters. This follows the same +pattern used by the Python and PHP generators. + + diff --git a/fern/products/sdks/overview/typescript/changelog/2026-03-13.mdx b/fern/products/sdks/overview/typescript/changelog/2026-03-13.mdx index 734166463c..cee8326387 100644 --- a/fern/products/sdks/overview/typescript/changelog/2026-03-13.mdx +++ b/fern/products/sdks/overview/typescript/changelog/2026-03-13.mdx @@ -1,9 +1,40 @@ ## 3.56.0 -**`(feat):`** Add a `naming` configuration object that allows users to independently control the -namespace export and PascalCase class/type names (client, error, timeout error, -environment, environment URLs, version). When individual overrides are not provided, -they are derived from the namespace value using the existing `${PascalCase(namespace)}Suffix` -pattern. The existing `namespaceExport` config continues to work for backwards compatibility. +**`(feat):`** Add a `naming` configuration object that gives you fine-grained control over the +exported namespace and generated class names (client, error, timeout error, +environment, environment URLs, version). + +You can use it as a simple string shorthand to set the namespace: +```yaml +# generators.yml +groups: + ts-sdk: + generators: + - name: fernapi/fern-typescript-node-sdk + config: + naming: acme +``` + +Or as a full object to override individual names: +```yaml +# generators.yml +groups: + ts-sdk: + generators: + - name: fernapi/fern-typescript-node-sdk + config: + naming: + namespace: acme + client: AcmeApiClient + error: AcmeApiError + environment: AcmeRegion +``` + +When individual overrides are not provided, they are derived from the namespace +using the `PascalCase(namespace) + Suffix` pattern (e.g. `namespace: acme` produces +`AcmeClient`, `AcmeError`, `AcmeTimeoutError`, `AcmeEnvironment`, `AcmeEnvironmentUrls`, +and `AcmeVersion` by default). + +The existing `namespaceExport` config continues to work for backwards compatibility. ## 3.55.0 diff --git a/fern/products/sdks/overview/typescript/changelog/2026-03-17.mdx b/fern/products/sdks/overview/typescript/changelog/2026-03-17.mdx index 0c5bed7d31..7a9f598012 100644 --- a/fern/products/sdks/overview/typescript/changelog/2026-03-17.mdx +++ b/fern/products/sdks/overview/typescript/changelog/2026-03-17.mdx @@ -1,3 +1,23 @@ +## 3.59.1 +**`(fix):`** Fix generated README.md including the "Customizing Fetch Client" section +under "Runtime Compatibility" even when `allowCustomFetcher` is `false`. +The section and its code snippet are now conditionally omitted when the +custom fetcher option is disabled. + + +## 3.59.0 +**`(feat):`** Make `readyState` on generated WebSocket socket classes return a `ReadyState` +enum (`CONNECTING`, `OPEN`, `CLOSING`, `CLOSED`) instead of a raw `number`, +improving developer experience with IDE autocompletion and self-documenting code. + + +## 3.58.1 +**`(fix):`** Export the generated Socket class from subpackage `exports.ts` when +WebSocket clients are enabled. Previously only the Client class was +exported, making the Socket class inaccessible through the public +exports path. + + ## 3.58.0 **`(fix):`** Add explicit type annotation to `mockServerPool` export in generated test mock-server code to satisfy `--isolatedDeclarations`.