-
Notifications
You must be signed in to change notification settings - Fork 308
Expand file tree
/
Copy pathversions.yml
More file actions
3359 lines (3047 loc) · 112 KB
/
versions.yml
File metadata and controls
3359 lines (3047 loc) · 112 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# yaml-language-server: $schema=../../../fern-versions-yml.schema.json
- version: 3.44.2
changelogEntry:
- summary: |
Generate named Java wrapper classes for unknown type aliases. Previously,
when an API schema had no `type` and no `properties` (representing an
"any" type), the generator dropped the named type definition and inlined
`Object` wherever it was referenced. Unknown type aliases now generate a
proper wrapper class (e.g. `DocumentedUnknownType`) based on
`java.lang.Object`, consistent with how other alias types are handled.
type: fix
createdAt: "2026-03-16"
irVersion: 65
- version: 3.44.1
changelogEntry:
- summary: |
Fix `enable-forward-compatible-enums` config flag being ignored in
download files mode. The flag was missing from
`JavaSdkDownloadFilesCustomConfig`, so `enable-forward-compatible-enums: false`
in generators.yml had no effect when using `--local` generation.
type: fix
createdAt: "2026-03-14"
irVersion: 65
- version: 3.44.0
changelogEntry:
- summary: |
Add `omit-fern-headers` 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.
type: feat
createdAt: "2026-03-12"
irVersion: 65
- version: 3.43.0
changelogEntry:
- summary: |
Fix WebSocket client compilation error when a server message type
produces the same method name as a lifecycle handler. For example,
a message type `error` generated `onError(Consumer<Error>)` which
clashed with the lifecycle `onError(Consumer<Exception>)` due to
Java generics type erasure. Colliding message handler methods are
now suffixed with `Message` (e.g. `onErrorMessage`).
type: fix
createdAt: "2026-03-13"
irVersion: 65
- version: 3.42.9
changelogEntry:
- summary: |
Update bundled npm tar package from 7.5.10 to 7.5.11.
type: chore
createdAt: "2026-03-12"
irVersion: 65
- version: 3.42.8
changelogEntry:
- summary: |
Add `equals()`, `hashCode()`, and `toString()` methods to
interface-based discriminated union wrapper classes. Previously,
the outer wrapper class fell back to `Object.equals()` (reference
identity), breaking equality for any type that transitively
contained the union. The methods now delegate to the inner `Value`
field.
type: fix
createdAt: "2026-03-11"
irVersion: 65
- version: 3.42.7
changelogEntry:
- summary: |
Add concurrency configuration to generated CI workflow with cancel-in-progress: false
to prevent stacked runs from being cancelled when a newer run starts.
type: chore
createdAt: "2026-03-11"
irVersion: 65
- version: 3.42.6
changelogEntry:
- summary: |
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.
type: fix
createdAt: "2026-03-10"
irVersion: 65
- version: 3.42.5
changelogEntry:
- summary: |
Fix `custom-interceptors` support for OAuth staged builders. When
`custom-interceptors: true` is enabled, the `_Builder` inner class now
generates an `interceptors` field, `addInterceptor(Interceptor)` method,
and forwards interceptors to `_TokenAuth` and `_CredentialsAuth` via
`token()` and `credentials()` methods. Previously, only the root builder
received interceptor support, causing OAuth staged builders to lose
interceptor configuration.
type: fix
createdAt: "2026-03-10"
irVersion: 65
- version: 3.42.4
changelogEntry:
- summary: |
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.
type: chore
createdAt: "2026-03-07"
irVersion: 65
- version: 3.42.3
changelogEntry:
- summary: |
Update bundled npm tar package from 7.5.8 to 7.5.10 to fix
GHSA-qffp-2rhf-9h96 (Hardlink Path Traversal via Drive-Relative
Linkpath).
type: chore
createdAt: "2026-03-06"
irVersion: 65
- version: 3.42.2
changelogEntry:
- summary: |
Fix `custom-plugins` configuration not being applied when running in
local/download-files mode (`fern generate --local`). The download-files
config class was missing the `customPlugins` field, causing the values
to be silently dropped during deserialization.
type: fix
createdAt: "2026-03-05"
irVersion: 65
- version: 3.42.1
changelogEntry:
- summary: |
Fix compilation error for objects with many properties that exceed the
JVM 255-parameter-slot limit. Types like CMS-1500 claim forms caused
`too many parameters` javac errors. The generator now computes precise
JVM slot counts (`long`/`double` consume two slots, all other types one)
and, when the threshold is exceeded, generates a constructor that accepts
the Builder as a single parameter, keeping the public API unchanged.
type: fix
createdAt: "2026-03-04"
irVersion: 65
- version: 3.42.0
changelogEntry:
- summary: |
Add support for custom Gradle plugins via the `custom-plugins` configuration
option. Users can now specify custom Gradle plugins (with optional versions)
that will be added to the generated build.gradle file. Format:
`["plugin-id:version", "plugin-id"]`. Plugins are applied after built-in
plugins (java-library, maven-publish, spotless).
type: feat
createdAt: "2026-03-03"
irVersion: 65
- version: 3.41.0
changelogEntry:
- summary: |
Add `custom-interceptors` configuration option for the Java SDK generator.
When enabled (`custom-interceptors: true` in `generators.yml`), the generated
client builder exposes an `addInterceptor(Interceptor)` method that allows SDK
users to add custom OkHttp interceptors. Interceptors are applied to the
OkHttpClient when the client is built. This enables use cases like PKCV (Public
Key Client Validation), custom request signing, and other HTTP-level
customizations via custom code protected by `.fernignore`.
type: feat
createdAt: "2026-03-03"
irVersion: 65
- version: 3.40.9
changelogEntry:
- summary: |
Fix wire test generation for form-urlencoded request bodies: objects
now serialize as Java's `Map.toString()` format (`{key=value}`) instead
of JSON (`{"key":"value"}`), and ISO 8601 dates with zero seconds drop
the `:00` to match Java's `OffsetDateTime.toString()` output (e.g.
`2015-07-30T20:00Z` instead of `2015-07-30T20:00:00Z`).
type: fix
createdAt: "2026-03-03"
irVersion: 65
- version: 3.40.8
changelogEntry:
- summary: |
Fix wire test generation to convert RFC 2822 dates to ISO 8601 in both
the mock response body (served by MockWebServer) and the expected response
assertion. Previously, only the expected response was converted, leaving
RFC 2822 dates in the mock response which caused `DateTimeParseException`
during Jackson deserialization for fields typed as `dateTime` (not
`dateTimeRfc2822`). The conversion now happens upfront so a single
normalized resource file is shared by both mock setup and validation.
type: fix
createdAt: "2026-03-03"
irVersion: 65
- version: 3.40.7
changelogEntry:
- summary: |
Fix wire test generation for URI and path paginated endpoints returning
wrong type. The published `@fern-fern/ir-sdk` doesn't include `uri`/`path`
as `Pagination` union members, so the raw IR JSON passes through
undeserialized with `_type` discriminant fields instead of `type`. The
generator now normalizes raw IR JSON (`_type` → `type`) before extracting
the pagination item type, so wire tests correctly use
`SyncPagingIterable<T>` instead of the raw response type.
type: fix
createdAt: "2026-03-03"
irVersion: 65
- version: 3.40.6
changelogEntry:
- summary: |
Fix wire test generation for form-urlencoded request body encoding.
The generator now uses `+` for spaces (matching Java's `URLEncoder.encode()`)
instead of `%20` (from `encodeURIComponent`), serializes arrays as
`[val1, val2]` (matching Java's `List.toString()`), and serializes objects
as JSON strings.
type: fix
- summary: |
Fix wire test generation for RFC 2822 date fields. The expected response
body in wire tests now converts RFC 2822 dates (e.g.
`Thu, 30 Jul 2015 20:00:00 +0000`) to ISO 8601 with Z suffix (e.g.
`2015-07-30T20:00:00Z`) to match Jackson's `JavaTimeModule` serialization
of `OffsetDateTime`. The mock response body retains RFC 2822 dates since
the SDK's `Rfc2822DateTimeDeserializer` handles them correctly.
type: fix
createdAt: "2026-03-03"
irVersion: 65
- version: 3.40.5
changelogEntry:
- summary: |
Fix wire test generation for URI and path paginated endpoints. The generated
wire tests incorrectly used the raw response type (e.g. `ListMessagesResponse`)
instead of the paginated return type (`SyncPagingIterable<T>`) for endpoints
using URI or path-based pagination, causing compilation failures.
type: fix
createdAt: "2026-03-03"
irVersion: 65
- version: 3.40.4
changelogEntry:
- summary: |
Bump Jackson from 2.18.2 to 2.18.6 to fix GHSA-72hv-8253-57qq
(Number Length Constraint Bypass in Async Parser leading to potential DoS).
type: fix
createdAt: "2026-03-02"
irVersion: 65
- version: 3.40.3
changelogEntry:
- summary: |
Make OAuth authentication section a stable feature block in generated READMEs.
Previously, the authentication documentation was injected as an addendum to the
Usage block with a `## Authentication` heading, which the BlockMerger parsed as
a separate top-level block on subsequent merges. The authentication content is
now registered as a proper AUTHENTICATION feature with a stable block ID, making
README merges deterministic.
type: fix
createdAt: "2026-02-27"
irVersion: 65
- version: 3.40.2
changelogEntry:
- summary: |
Patch minimatch to 10.2.3 in container to fix GHSA-7r86-cg39-jmmj (ReDoS via
combinatorial backtracking in matchOne()) and GHSA-23c5-xmqv-rm74 (ReDoS via
nested *() extglobs).
type: fix
createdAt: "2026-02-27"
irVersion: 65
- version: 3.40.1
changelogEntry:
- summary: |
Fix `Rfc2822DateTimeDeserializer` visibility. The class was generated
with package-private access, causing compilation errors when types in
other packages referenced it via `@JsonDeserialize(using = ...)`.
The class is now `public`.
type: fix
- summary: |
Fix URI/path pagination generating `String` instead of `Optional<String>`
for the next page token. `UriPage.create` and `PathPage.create` expect
`Optional<String>`, but `getNestedPropertySnippet` was unwrapping the
optional via `.orElse(null)`. The generator now builds the getter chain
directly to preserve the `Optional<String>` type.
type: fix
createdAt: "2026-02-26"
irVersion: 65
- version: 3.40.0
changelogEntry:
- summary: |
Add `DATE_TIME_RFC_2822` primitive type support. Fields with
`format: date-time-rfc-2822` (e.g. Twilio's `dateCreated`, `dateSent`,
`dateUpdated`) now generate as `OffsetDateTime` with a per-field
`@JsonDeserialize(using = Rfc2822DateTimeDeserializer.class)` annotation
that parses RFC 2822 dates via `DateTimeFormatter.RFC_1123_DATE_TIME`.
type: feat
createdAt: "2026-02-26"
irVersion: 65
- version: 3.39.1
changelogEntry:
- summary: |
Use generator-cli JS API directly instead of subprocess spawning.
Remove generator-cli from Docker image since it is now bundled via esbuild.
type: chore
createdAt: "2026-02-26"
irVersion: 65
- version: 3.39.0
changelogEntry:
- summary: |
Add support for logging to the generated SDK.
Users can configure logging by passing a `LogConfig` to the client builder's `.logging()` method.
```java
import com.example.api.AcmeApiClient;
import com.example.api.core.LogConfig;
import com.example.api.core.LogLevel;
import com.example.api.core.ConsoleLogger;
AcmeApiClient client = AcmeApiClient.builder()
.token("YOUR_TOKEN")
.logging(LogConfig.builder()
.level(LogLevel.DEBUG) // INFO is the default
.logger(new ConsoleLogger()) // ConsoleLogger is the default
.silent(false) // true is the default, set to false to enable logging
.build())
.build();
```
The `LogConfig` builder accepts the following properties:
- `level(LogLevel)`: The log level to use. Defaults to `LogLevel.INFO`.
- `logger(ILogger)`: The logger implementation to use. Defaults to `ConsoleLogger`.
- `silent(boolean)`: Whether to silence the logger. Defaults to `true`.
The `LogLevel` enum supports the following values:
- `DEBUG`
- `INFO`
- `WARN`
- `ERROR`
To provide a custom logger, implement the `ILogger` interface
with `debug`, `info`, `warn`, and `error` methods.
HTTP request and response details (method, URL, status code, headers, body) are
logged via a `LoggingInterceptor` added to the OkHttp client. Sensitive headers
(`authorization`, `x-api-key`, `cookie`, `x-csrf-token`, etc.) are automatically
redacted in logs.
type: feat
createdAt: "2026-02-25"
irVersion: 65
- version: 3.38.1
changelogEntry:
- summary: |
Preserve existing README.md when the generator does not produce one. Previously,
`overwriteLocalContents` deleted all files before copying generator output, so if
README generation failed silently the file was removed from the target repository.
The method now skips deleting README.md when the source directory does not include it.
type: fix
createdAt: "2026-02-23"
irVersion: 65
- version: 3.38.0
changelogEntry:
- summary: |
Add support for URI and path-based pagination. Endpoints using `uri` or `path`
pagination now generate correct paging iterables that follow next page links
from the response body.
type: feat
createdAt: "2026-02-12"
irVersion: 65
- version: 3.37.1
changelogEntry:
- summary: |
Update container packages to fix 8 security vulnerabilities: gnupg2-minimal (CVE-2026-24882),
curl-minimal and libcurl-minimal (CVE-2025-13034, CVE-2025-14017, CVE-2025-14524, CVE-2025-14819,
CVE-2025-15079, CVE-2025-15224), alsa-lib (CVE-2026-25068), expat (CVE-2026-25210),
openssh and openssh-clients (CVE-2025-61984, CVE-2025-61985), and npm tar (GHSA-83g3-92jg-28cx).
type: fix
createdAt: "2026-02-20"
irVersion: 63
- version: 3.37.0
changelogEntry:
- summary: |
Add `additionalProperty(String key, Object value)` and `additionalProperties(Map<String, Object>)`
methods to generated builders, allowing users to set arbitrary extra fields programmatically.
Previously, additional properties were only populated during JSON deserialization.
type: feat
createdAt: "2026-02-18"
irVersion: 63
- version: 3.36.3
changelogEntry:
- summary: Use correct Long literals (3600L) instead of int literals (3600) for `Optional<Long>` expires_in fields in OAuth token suppliers
type: fix
createdAt: "2026-02-17"
irVersion: 63
- version: 3.36.2
changelogEntry:
- summary: |
Disable OkHttp callTimeout for streaming (SSE) endpoints. The default 60-second
callTimeout was terminating SSE connections after ~1 minute instead of allowing
them to stream indefinitely. Streaming endpoints now set callTimeout to 0 (disabled)
so the iterator blocks on each next() call waiting for new events until the connection
is closed or an error occurs.
type: fix
createdAt: "2026-02-17"
irVersion: 63
- version: 3.36.1
changelogEntry:
- summary: |
Handle Optional access tokens and Long type compatibility in OAuth token supplier.
The generator now unwraps `Optional<String>` access tokens with `orElseThrow` and
uses `Long` literals for the default `expires_in` fallback value.
type: fix
createdAt: "2026-02-13"
irVersion: 63
- version: 3.36.0
changelogEntry:
- summary: |
Add server URL templating support. When an OpenAPI spec uses server variables
(e.g., `https://api.{region}.{environment}.example.com`), the generated SDK now
exposes those variables as builder methods (e.g., `.region("us-east-1")`). The
`x-fern-default-url` extension provides a clean fallback URL when no variables
are provided. Supports both single and multiple base URL environments.
type: feat
createdAt: "2026-02-13"
irVersion: 63
- version: 3.35.2
changelogEntry:
- summary: |
Fix PATCH requests with no explicit body fields failing at runtime with OkHttp's
`IllegalArgumentException: method PATCH must have a request body`. The generator now
provides a non-null empty request body for PATCH endpoints, matching the existing
handling for POST and PUT.
type: fix
createdAt: "2026-02-12"
irVersion: 63
- version: 3.35.1
changelogEntry:
- summary: |
Preserve valid HTML tags in Javadoc comments instead of escaping them. Tags like
`<a>`, `<code>`, `<p>`, `<pre>`, and other standard HTML tags from API descriptions
are now rendered as proper HTML in Javadoc, while standalone angle brackets (e.g.
comparisons, generics) remain escaped.
type: fix
createdAt: "2026-02-12"
irVersion: 63
- version: 3.35.0
changelogEntry:
- summary: |
Add SSE event-level discrimination support. When an SSE payload is a discriminated union
with the discriminator at the SSE envelope level (e.g., `event` field), the SDK now
correctly parses the full SSE envelope instead of just the data payload.
type: feat
createdAt: "2026-02-10"
irVersion: 63
- version: 3.34.9
changelogEntry:
- summary: |
Update container packages to fix 9 security vulnerabilities: openssl-fips-provider-latest
and openssl-libs (CVE-2025-15467), libtasn1 (CVE-2025-13151), libcap (CVE-2025-61726,
CVE-2025-61728, CVE-2025-61730, CVE-2025-61731, CVE-2025-68119, CVE-2025-68121),
python3-pip-wheel (CVE-2026-21441), libxml2 (CVE-2026-0989, CVE-2026-0990, CVE-2026-0992),
libpng (CVE-2026-22695, CVE-2026-22801), and unzip (CVE-2019-13232).
type: fix
createdAt: "2026-02-09"
irVersion: 63
- version: 3.34.8
changelogEntry:
- summary: |
Switch base image from gradle:jdk11-jammy to gradle:jdk11-corretto to fix January 2026
Oracle CPU CVEs: CVE-2026-21945, CVE-2026-21932, CVE-2026-21925, CVE-2026-21933.
Amazon Corretto 11.0.30 includes the security patches while Eclipse Temurin 11.0.30
Docker images are not yet available.
type: fix
createdAt: "2026-02-03"
irVersion: 63
- version: 3.34.7
changelogEntry:
- summary: |
Add pre-flight check for git availability when using self-hosted GitHub mode. The CLI now
verifies git is installed before attempting to clone, providing a clear error message if
git is not found. Also adds improved error logging with diagnostics when git clone fails.
type: fix
createdAt: "2026-02-02"
irVersion: 63
- version: 3.34.6
changelogEntry:
- summary: |
Fix wire test generation importing types from the wrong package when multiple services have
endpoints with the same HTTP method and path. The generator now uses endpoint IDs to resolve
the correct endpoint instead of relying solely on method and path matching.
type: fix
createdAt: "2026-01-29"
irVersion: 63
- version: 3.34.5
changelogEntry:
- summary: |
Fix streaming endpoints incorrectly setting `Accept: application/json` header. Streaming
endpoints (SSE, NDJSON, etc.) now omit the Accept header entirely, allowing the server to
negotiate the appropriate streaming format.
type: fix
createdAt: "2026-01-26"
irVersion: 63
- version: 3.34.4
changelogEntry:
- summary: |
Fix Java SDK compilation error when a path parameter is named `key`. The lambda variable
in `requestOptions.getQueryParameters().forEach((key, value) -> {...})` was shadowing
the path parameter, causing a "variable key is already defined" compilation error.
Lambda variables are now prefixed with underscore to avoid conflicts.
type: fix
createdAt: "2026-01-26"
irVersion: 63
- version: 3.34.3
changelogEntry:
- summary: |
Fix Java SDK generation failure when an environment name is a Java reserved keyword
(e.g., "default") for multi-environment APIs.
type: fix
createdAt: "2026-01-23"
irVersion: 63
- version: 3.34.2
changelogEntry:
- summary: |
Change wire tests to use resource files for JSON strings above a certain length
to prevent undue stress to :spotlessJava and cut down on code duplication.
type: fix
createdAt: "2026-01-23"
irVersion: 63
- version: 3.34.1
changelogEntry:
- summary: |
Fix `output-directory` config option to also apply to test files. When using `source-root` mode,
test files are now written directly to the output path instead of always using `src/test/java/`.
type: fix
createdAt: "2026-01-22"
irVersion: 63
- version: 3.34.0
changelogEntry:
- summary: |
Add `output-directory` config option to control where Java files are written during local generation.
- `project-root` (default): Files written to `<path>/src/main/java/` (current behavior)
- `source-root`: Files written directly to `<path>/` (pre-v3.8.2 behavior for embedding SDKs into existing projects)
This allows customers embedding SDKs into existing projects to avoid double `src/main/java` paths.
type: feat
createdAt: "2026-01-21"
irVersion: 63
- version: 3.33.2
changelogEntry:
- summary: |
Re-publish to verify Docker Hub and generator registry sync.
type: chore
createdAt: "2026-01-21"
irVersion: 63
- version: 3.33.1
changelogEntry:
- summary: |
Fix compilation error in generated InputStream overloads for file upload endpoints. The
`requestOptions.getQueryParameters()` code block is now only emitted in methods that have
`RequestOptions` as a parameter.
type: fix
createdAt: "2026-01-21"
irVersion: 63
- version: 3.33.0
changelogEntry:
- summary: |
Generate body-only method overloads for endpoints with required body and optional headers/query params.
This prevents breaking changes when optional headers or query params are added to existing endpoints.
type: feat
createdAt: "2026-01-20"
irVersion: 63
- version: 3.32.1
changelogEntry:
- summary: |
Update container to fix CVE-2026-23745 (node-tar path traversal via hardlinks/symlinks) and
CVE-2025-66293 (libpng out-of-bounds read). Patches npm's bundled tar to 7.5.3 and updates
libpng16-16 to the latest available version.
type: fix
createdAt: "2026-01-20"
irVersion: 63
- version: 3.32.0
changelogEntry:
- summary: |
Add endpoint-level security support with routing auth providers. APIs can now define different
authentication requirements per endpoint using the ENDPOINT_SECURITY auth mode. The SDK generates
individual auth providers (Bearer, Basic, ApiKey, OAuth, InferredAuth) and a RoutingAuthProvider
that routes requests to the appropriate provider based on each endpoint's security requirements.
Supports OR (any of) and AND (all of) auth requirement combinations.
To enable, add `auth: endpoint-security: {}` to your api.yml and define per-endpoint auth in your
service definitions using the `auth` field on each endpoint.
type: feat
createdAt: "2026-01-15"
irVersion: 63
- version: 3.31.0
changelogEntry:
- summary: |
Add `additionalQueryParameters` support to `RequestOptions`, allowing users to add query parameters
to API requests at runtime. Query parameters added via RequestOptions override any request-defined
parameters with the same key. This mirrors the existing `addHeader` pattern.
Usage example:
```java
client.endpoint(
Request.builder().build(),
RequestOptions.builder()
.addQueryParameter("key", "value")
.build()
);
```
type: feat
createdAt: "2026-01-15"
irVersion: 63
- version: 3.30.0
changelogEntry:
- summary: |
Add `enable-gradle-profiling` configuration option for profiling Gradle commands during generation.
type: feat
createdAt: "2026-01-15"
irVersion: 63
- version: 3.29.2
changelogEntry:
- summary: |
Add `notify`, `notifyAll`, and `wait` to reserved method names to prevent generated SDK
methods from conflicting with final methods in Java's Object class. This fixes compilation
errors when an API has a subpackage named "notify" (e.g., Twilio's Notify API).
type: fix
createdAt: "2026-01-15"
irVersion: 63
- version: 3.29.1
changelogEntry:
- summary: |
Fix `_Builder` class to support all builder methods (url, timeout, environment, maxRetries,
httpClient, addHeader) so method chaining works in any order. This allows customers upgrading
from 3.18.x who wrote `builder().url().token()` to continue working without compile errors.
Configuration values set on `_Builder` are now properly passed through to `_TokenAuth` and
`_CredentialsAuth` when `token()` or `credentials()` is called.
type: fix
createdAt: "2026-01-15"
irVersion: 63
- version: 3.29.0
changelogEntry:
- summary: |
Add backward-compatible `builder()` method for OAuth client credentials authentication.
This restores support for the classic builder pattern `Client.builder().token("...")` and
`Client.builder().credentials("...", "...")` alongside the existing `withToken()` and
`withCredentials()` shortcuts. This prevents breaking changes for customers who upgraded.
type: feat
createdAt: "2026-01-14"
irVersion: 63
- version: 3.28.2
changelogEntry:
- summary: Update Dockerfile to use the latest generator-cli with improve reference.md generation.
type: chore
createdAt: "2026-01-13"
irVersion: 63
- version: 3.28.1
changelogEntry:
- summary: |
Update libtasn1-6 and gnupg packages in container to fix CVE-2021-46848, CVE-2025-13151, CVE-2025-68973.
type: fix
createdAt: "2026-01-13"
irVersion: 63
- version: 3.28.0
changelogEntry:
- summary: |
Upgrade IR version to 63.
type: chore
createdAt: "2026-01-12"
irVersion: 63
- version: 3.27.6
changelogEntry:
- summary: |
Generate overloads without request wrapper when all query parameters are optional.
This prevents compile breaks when optional query parameters are added to endpoints.
For example, `getLatestInsurance(String userId)` and `getLatestInsurance(String userId, RequestOptions requestOptions)`
overloads are now generated in addition to the request wrapper variants.
type: feat
createdAt: "2026-01-06"
irVersion: 61
- version: 3.27.5-rc4
changelogEntry:
- summary: |
Add fallback SDK name generation for X-Fern-SDK-Name header when no explicit maven config is provided.
This ensures local generation matches remote generation for GitHub output mode.
type: fix
createdAt: "2026-01-05"
irVersion: 61
- version: 3.27.5-rc3
changelogEntry:
- summary: Retry Publishing of rc2
type: fix
createdAt: "2025-12-24"
irVersion: 61
- version: 3.27.5-rc2
changelogEntry:
- summary: Install fast-content-type-parse dependency required by @octokit/request@10.0.7 CVE patch.
type: fix
createdAt: "2025-12-23"
irVersion: 61
- version: 3.27.5-rc1
changelogEntry:
- summary: Add debug logging to generator agent methods to help diagnose issues with README and reference generation.
type: chore
createdAt: "2025-12-23"
irVersion: 61
- version: 3.27.5-rc0
changelogEntry:
- summary: Skip installation of generator-cli in Java V2 generator as it is already installed in the base image.
type: chore
createdAt: "2025-12-23"
irVersion: 61
- version: 3.27.4
changelogEntry:
- summary: |
Fix OAuth client credentials flow to include custom headers, timeouts, and retries in token requests by using ClientOptions.Builder.from() pattern.
type: fix
createdAt: "2025-12-18"
irVersion: 61
- version: 3.27.3
changelogEntry:
- summary: |
Fix streaming endpoint return types to use Iterable instead of Optional, fix missing ArrayList import for empty list literals, and fix OAuth wire tests to use withCredentials() pattern.
type: fix
createdAt: "2025-12-18"
irVersion: 61
- version: 3.27.2
changelogEntry:
- summary: |
Support configurable Node.js and Java V2 executable paths via NODE_PATH and JAVA_V2_PATH environment variables for local seed testing.
type: chore
createdAt: "2025-12-18"
irVersion: 61
- version: 3.27.1
changelogEntry:
- summary: |
Add sdkVersion as a top-level field in the generated metadata.json file.
type: chore
createdAt: "2025-12-18"
irVersion: 61
- version: 3.27.0
changelogEntry:
- summary: |
Add `gradle-central-dependency-management` configuration option (boolean, default false).
When enabled, this skips generating the `repositories` block in `build.gradle` files,
allowing `dependencyResolutionManagement` in `settings.gradle` with
`RepositoriesMode.FAIL_ON_PROJECT_REPOS` to work correctly.
This should be used in conjunction with `gradle-plugin-management` when configuring
central repository management on enterprise networks.
Configuration example:
```yaml
config:
gradle-central-dependency-management: true
gradle-plugin-management: |
pluginManagement {
repositories {
maven { url 'https://internal-artifactory.example.com/gradle-plugins/' }
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven { url 'https://internal-artifactory.example.com/maven-releases/' }
}
}
```
type: feat
createdAt: "2025-12-17"
irVersion: 61
- version: 3.26.0
changelogEntry:
- summary: |
Add `gradle-plugin-management` configuration option to inject custom plugin management
and dependency resolution configuration into `settings.gradle`. This enables SDK generation
on enterprise networks that cannot access the Gradle Plugin Portal (`plugins.gradle.org`)
by configuring internal Artifactory/Nexus repositories for plugin resolution.
Configuration example:
```yaml
config:
gradle-plugin-management: |
pluginManagement {
repositories {
maven { url 'https://internal-artifactory.example.com/gradle-plugins/' }
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven { url 'https://internal-artifactory.example.com/maven-releases/' }
}
}
```
type: feat
- summary: |
Fix `gradle-distribution-url` override in Java V2 generator to properly create the
`gradle/wrapper` directory before writing `gradle-wrapper.properties`.
type: fix
createdAt: "2025-12-17"
irVersion: 61
- version: 3.25.1
changelogEntry:
- summary: |
Fix form-urlencoded request body handling to properly serialize request objects using
Jackson's convertValue, preserving wire names from @JsonProperty annotations.
type: fix
createdAt: "2025-12-17"
irVersion: 61
- version: 3.25.0
changelogEntry:
- summary: |
Add `gradle-distribution-url` configuration option to allow overriding the Gradle wrapper
distribution URL. This enables SDK generation on enterprise networks that cannot access
`services.gradle.org` by pointing to an internal Gradle distribution mirror.
Configuration example:
```yaml
config:
gradle-distribution-url: https://internal-mirror.example.com/gradle/gradle-8.14.3-bin.zip
```
type: feat
createdAt: "2025-12-16"
irVersion: 61
- version: 3.24.5
changelogEntry:
- summary: |
Fix OAuth token handling for optional expires_in field with default fallback, and skip
literal properties in OAuth request building.
type: fix
createdAt: "2025-12-16"
irVersion: 61
- version: 3.24.4
changelogEntry:
- summary: |
Mitigate OutOfMemoryError when generating SDKs for large specs. (Specifically, the IR preprocessing
preprocessing step now modifies the JSON tree in-place and avoids calling `.deepCopy()`.)
type: fix
createdAt: "2025-12-16"
irVersion: 61
- version: 3.24.3
changelogEntry:
- summary: |
Update libpng16-16 in container to fix CVE-2025-64720, CVE-2025-65018, CVE-2025-64505, CVE-2025-64506.
type: fix
createdAt: "2025-12-16"
irVersion: 61
- version: 3.24.2
changelogEntry:
- summary: |
Pass full `ClientOptions` instead of just `httpClient()` to custom pagination `create()` method.
This gives custom pager implementations access to all client configuration including base URL,
headers, and other options needed for making subsequent pagination requests.
type: fix
createdAt: "2025-12-15"
irVersion: 61
- version: 3.24.1
changelogEntry:
- summary: |
Fix Jackson deserialization conflict when a property starts with `with` (e.g., `withLabel`) and
another property matches the suffix (e.g., `label`).
type: fix
createdAt: "2025-12-11"
irVersion: 61
- version: 3.24.0
changelogEntry:
- summary: |
Add support for configuring the default timeout via `default-timeout-in-seconds` in generators.yml.
Previously, the default timeout was hardcoded to 60 seconds. Now you can customize it:
Configuration example:
```yaml
config:
default-timeout-in-seconds: 120
```
type: feat
createdAt: "2025-12-09"
irVersion: 61
- version: 3.23.4
changelogEntry:
- summary: |
OAuth token override is now always enabled for APIs with OAuth client credentials authentication.
The `oauth-token-override` config flag has been removed - SDK users can always choose between
providing a pre-generated bearer token directly or using the OAuth client credentials flow.
Generated usage:
```java
// Option 1: Direct bearer token (bypass OAuth flow)
SeedApiClient client = SeedApiClient.withToken("my-pre-generated-bearer-token")
.url("https://api.example.com")
.build();
// Option 2: OAuth client credentials flow (automatic token management)
SeedApiClient client = SeedApiClient.withCredentials("your-client-id", "your-client-secret")
.url("https://api.example.com")
.build();
```
type: chore
createdAt: "2025-12-09"
irVersion: 61
- version: 3.23.3
changelogEntry:
- summary: |
Fix OptionalNullable query parameters to correctly apply .orElse(default) for parameters with
default values. Previously, only java.util.Optional was recognized for default value handling,
causing OptionalNullable parameters to be passed directly without unwrapping. Now both Optional
and OptionalNullable types are handled correctly: parameters with defaults use .orElse(default),
and parameters without defaults use appropriate presence checks (!isAbsent() for OptionalNullable,
isPresent() for Optional).
type: fix
createdAt: "2025-12-08"
irVersion: 61
- version: 3.23.2
changelogEntry:
- summary: |
Revert OAuth staged builder compatibility changes.
type: fix
createdAt: "2025-12-08"
irVersion: 61
- version: 3.23.1
changelogEntry:
- summary: |
Fix duplicate case label compilation errors when multiple error types map to the same HTTP
status code. The generator now deduplicates errors by status code, keeping the first error
declaration for each code. This prevents Java compilation errors in generated switch statements.
type: fix
createdAt: "2025-12-06"
irVersion: 61
- version: 3.23.0
changelogEntry:
- summary: |
Add OAuth token override support with compile-time safe staged builder pattern. When
`oauth-token-override: true` is configured, SDK users can choose between the OAuth client
credentials flow or providing a pre-generated bearer token directly.