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.