1.30.1
(fix): Fix non-deterministic ordering in generated requests.go and requests_test.go.
Go maps randomize iteration order, causing type ordering to vary across runs
when exportAllRequestsAtRoot is enabled. Map keys are now sorted before
iteration to ensure deterministic output.
1.30.0
(feat): Add omitFernHeaders configuration option. When enabled, Fern platform headers
(X-Fern-Language, X-Fern-SDK-Name, X-Fern-SDK-Version, User-Agent) are omitted
from generated SDK requests.
1.29.3
(chore): Add concurrency configuration to generated CI workflow with cancel-in-progress: false
to prevent stacked runs from being cancelled when a newer run starts.
1.29.2
(fix): Fix datetime query parameter serialization to always include milliseconds.
The valueString function in internal/query.go now formats time.Time
values with "2006-01-02T15:04:05.000Z07:00" instead of time.RFC3339,
ensuring the Go SDK sends timestamps with millisecond precision (e.g.,
2024-07-01T15:30:00.000Z) that match the WireMock stub mappings.
1.29.1
(fix): Remove redundant req.WithContext(ctx) call in the generated HTTP caller.
http.NewRequestWithContext already sets the context on the request, so
the subsequent req.WithContext(ctx) was creating an unnecessary shallow
copy of the request with the same context.
1.29.0
(feat): Bump the default streaming buffer size from 64KB to 1MB and add a new
WithMaxStreamBufSize request option so SDK users can configure the
maximum buffer size for streaming responses at runtime. This controls
the maximum size of a single SSE event (in bytes) that the stream can
process. Also fixes a bug where SseStreamReader would return a
misleading io.EOF error instead of the underlying bufio.ErrTooLong
when a message exceeded the buffer limit.
1.28.7
(fix): Re-throw errors after logging for README.md and reference.md generation failures.
Documentation generation errors now break the generation flow so they are treated
as important to fix.
1.28.6
(fix): Fix dynamic snippets to include global headers in generated code examples.
Previously, required global headers (e.g., X-Organization-ID) configured via
x-fern-global-headers were missing from dynamic snippet output. Also fixes
header value lookup to use wire values instead of a non-existent property.
1.28.5
(chore): Improve error logging for reference.md generation failures. The generator
now logs the actual error message and stack trace instead of a generic
“this is OK” message, making it easier to diagnose generation issues.
1.28.4
(chore): Parallelize endpoint snippet generation in populateSnippetsCache(). All
endpoints are now processed concurrently via Promise.all instead of
sequentially, reducing snippet generation time for large APIs.
1.28.2
(fix): Upgrade generated CI workflow to use golangci/golangci-lint-action@v9
(from @v6) for proper compatibility with golangci-lint v2.x.
1.28.3
(fix): Fix wire test generation crash for endpoints with bytes request bodies.
The wire test generator now skips bytes endpoints, consistent with the
wiremock mapping generation which also excludes them. Previously, the
generator would throw “No wiremock mapping found” when an API contained
file upload endpoints using application/octet-stream.
1.28.1
(fix): Resolve datetime aliases in marshal/unmarshal code generation. Fields typed as
aliases of datetime or date (e.g. DatetimeAlias: type: datetime) now
correctly use the custom internal.DateTime / internal.Date serialization
helpers instead of falling back to default time.Time JSON handling. Also
relaxes DateTime.UnmarshalJSON to accept ISO 8601 timestamps without a
timezone suffix (e.g. 2024-01-15T09:30:00), falling back from RFC 3339
when the timezone is absent.
1.28.0
(feat): Improve DateTime deserialization to handle multiple timestamp formats instead of
only strict RFC3339. The UnmarshalJSON method now tries RFC3339Nano first (which
is a superset of RFC3339 and supports fractional seconds), then falls back to
ISO 8601 without timezone (assuming UTC), then date-only format, and finally
Unix epoch seconds (integer). This matches the flexibility of other Fern SDK
generators (Java, Python, TypeScript, C#) and prevents deserialization failures
when APIs return timestamps in slightly different ISO 8601 variants.
1.27.0
(feat): Add golangci-lint to seed tests for generated Go SDK code; adjust various
internal files to comply with golangci-lint. (The upshot of this is that
golangci-lint run should now pass for any Fern-generated Go SDKs.)
1.26.1
(chore): Standardize WireMock configuration to use WIREMOCK_URL environment variable
(e.g., http://localhost:8080) instead of WIREMOCK_PORT. The CI workflow now
sets WIREMOCK_URL after discovering the dynamically assigned port. Falls back
to http://localhost:8080 if the variable is not set.
1.25.0-rc4
(chore): Use generator-cli JS API directly instead of subprocess spawning.
Remove generator-cli from Docker image since it is now bundled via esbuild.