Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
properties:
typesReferencedOnlyByService:
docs: "Types referenced by exactly one service."
type: `map<commons.ServiceId, list<commons.TypeId>>`
type: ``map<commons.ServiceId, list<commons.TypeId>>``
sharedTypes:
docs: "Types referenced by either zero or multiple services."
type: `list<commons.TypeId>`
type: ``list<commons.TypeId>``
```

Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,13 @@ use them in alias declarations to minimize code duplication:

```yml
types:
`GenericTest<T>`:
``GenericTest<T>``:
properties:
value: T
other-value: string

GenericApplication:
type: `GenericTest<string>`
type: ``GenericTest<string>``
```

More information can be found here: https://buildwithfern.com/learn/api-definition/fern/types#generics.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ types:
User:
properties:
name: string
email: `nullable<string>`
email: ``nullable<string>``
```


Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ service:
request:
body:
properties:
author: `optional<string>`
tags: `optional<list<string>>`
title: `optional<string>`
author: ``optional<string>``
tags: ``optional<list<string>>``
title: ``optional<string>``
content-type: application/json
name: UploadDocumentRequest
...
Expand Down
10 changes: 10 additions & 0 deletions fern/products/cli-api-reference/cli-changelog/2026-03-16.mdx
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
## 4.31.2
**`(fix):`** Sanitize changelog entries to wrap type references containing angle
brackets (e.g. `Optional<String>`, `Map<String, Object>`) 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.
Expand Down
36 changes: 36 additions & 0 deletions fern/products/cli-api-reference/cli-changelog/2026-03-17.mdx
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
4 changes: 2 additions & 2 deletions fern/products/sdks/overview/csharp/changelog/2026-01-15.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ var request2 = new UpdateUserRequest { Name = "John" };
var request3 = new UpdateUserRequest { Name = null };
```

The `Optional<T>` type includes:
The ``Optional<T>`` 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<Optional<T>>` implementation for proper equality checks
* ``IEquatable<Optional<T>>`` 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.
Expand Down
6 changes: 3 additions & 3 deletions fern/products/sdks/overview/csharp/changelog/2026-01-20.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@ var contentLength = headers.ContentLength;
```

New types:
* `WithRawResponseTask<T>` - Awaitable task wrapper supporting both usage patterns
* `WithRawResponse<T>` - Container for data + raw response metadata
* ``WithRawResponseTask<T>`` - Awaitable task wrapper supporting both usage patterns
* ``WithRawResponse<T>`` - 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<T>` supported
* Backward compatible - implicit conversion to ``Task<T>`` supported
* Type-safe access to HTTP metadata when debugging or logging
* Case-insensitive header lookups following HTTP standards

Expand Down
8 changes: 8 additions & 0 deletions fern/products/sdks/overview/csharp/changelog/2026-03-16.mdx
Original file line number Diff line number Diff line change
@@ -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.


7 changes: 7 additions & 0 deletions fern/products/sdks/overview/csharp/changelog/2026-03-17.mdx
Original file line number Diff line number Diff line change
@@ -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.


Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ service:
response: ListUsersResponse
```

The generated `SyncPagingIterable<User>` can then be used to traverse through the `User` objects:
The generated ``SyncPagingIterable<User>`` can then be used to traverse through the `User` objects:

```java
for (User user : client.users.list(...)) {
Expand Down
8 changes: 8 additions & 0 deletions fern/products/sdks/overview/php/changelog/2026-03-17.mdx
Original file line number Diff line number Diff line change
@@ -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.


7 changes: 7 additions & 0 deletions fern/products/sdks/overview/python/changelog/2026-03-17.mdx
Original file line number Diff line number Diff line change
@@ -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
Expand Down
9 changes: 9 additions & 0 deletions fern/products/sdks/overview/ruby/changelog/2026-03-17.mdx
Original file line number Diff line number Diff line change
@@ -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.


41 changes: 36 additions & 5 deletions fern/products/sdks/overview/typescript/changelog/2026-03-13.mdx
Original file line number Diff line number Diff line change
@@ -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
Expand Down
20 changes: 20 additions & 0 deletions fern/products/sdks/overview/typescript/changelog/2026-03-17.mdx
Original file line number Diff line number Diff line change
@@ -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`.
Expand Down
Loading