-
Notifications
You must be signed in to change notification settings - Fork 332
Expand file tree
/
Copy pathversions.yml
More file actions
815 lines (806 loc) · 31.9 KB
/
Copy pathversions.yml
File metadata and controls
815 lines (806 loc) · 31.9 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
# yaml-language-server: $schema=../../fern-versions-yml.schema.json
- version: 0.28.1
changelogEntry:
- summary: |
Fix generated wire tests failing with "unrecognized subcommand" for specs
mounted under a namespace whose leaf matches a top-level resource name. The
wire-test harness now mirrors the SDK's `merge_into_path` stutter elision, so
an untagged spec grouped under its version path prefix (e.g. `v1`) resolves to
`<bin> v1 <op>` instead of the double `<bin> v1 v1 <op>` that clap rejects.
type: fix
createdAt: "2026-07-24"
irVersion: 67
- version: 0.28.0
changelogEntry:
- summary: |
Includes Rust SDK Generator 0.44.0 updates.
type: feat
createdAt: "2026-07-23"
irVersion: 67
- version: 0.27.0
changelogEntry:
- summary: |
Add an opt-in `generateWireTests` config flag. When enabled, the generator
emits an automated wire-test suite alongside the CLI: `wiremock/wire-test-cases.json`
(one case per endpoint example, derived from the IR) and `tests/wire_test.rs`
(a generic harness). Each test stands up an in-process mock server, drives the
compiled CLI binary against it (`--base-url` + `--params` + `--json`), and
asserts the CLI issued the expected request and rendered the mocked response.
The suite runs under a plain `cargo test` — no docker, no network. Defaults to
off so existing generations are unaffected.
type: feat
createdAt: "2026-07-23"
irVersion: 67
- version: 0.26.1
changelogEntry:
- summary: |
Includes Rust SDK Generator 0.43.1 updates.
type: fix
createdAt: "2026-07-22"
irVersion: 67
- version: 0.26.0
changelogEntry:
- summary: |
Generate OAuth client-credentials authentication from the full Fern IR
contract, including custom token and refresh requests, response mappings,
scopes, token headers and prefixes, environment URLs, expiry-aware caching,
and refresh fallback.
type: feat
createdAt: "2026-07-20"
irVersion: 67
- version: 0.25.0
changelogEntry:
- summary: |
The generated CLI now sends a `User-Agent` header identifying itself by its
own binary name and version (e.g. `mycli-cli/1.4.0`) instead of the shared
`fern-cli-sdk` crate name. This lets each CLI's traffic be tracked
distinctly on the API backend. The product token is normalized to end with
`-cli` so it unambiguously denotes CLI traffic (a binary named `mycli`
reports `mycli-cli`; one already named `mycli-cli` is left unchanged).
A tool built on top of the CLI can voluntarily tag its traffic, either with
the `--user-agent-suffix` flag or the `<NAME>_USER_AGENT_SUFFIX` environment
variable (the flag takes precedence). The token is appended to (rather than
replacing) the CLI's own identity — e.g. `mycli-cli/1.4.0 partner-app/3.1`.
The name of this suffix flag (and its derived environment variable) is
configurable at generation time via the new `userAgentSuffixFlag` custom
config. It defaults to `--user-agent-suffix` / `<NAME>_USER_AGENT_SUFFIX`;
setting `userAgentSuffixFlag: via` instead exposes `--via` and `<NAME>_VIA`,
giving API owners branding control over the consumer suffix knob.
type: feat
createdAt: "2026-07-20"
irVersion: 67
- version: 0.24.0
changelogEntry:
- summary: |
Includes Rust SDK Generator 0.43.0 updates.
type: feat
createdAt: "2026-07-20"
irVersion: 67
- version: 0.23.4
changelogEntry:
- summary: |
Re-export `std::collections::{HashMap, HashSet}` from the embedded SDK
crate's `prelude`. The Rust SDK generator emits `use crate::prelude::*;`
in files that reference `HashMap`/`HashSet` by bare name — most notably
`error.rs`, whose error-body fields can resolve to
`Vec<HashMap<String, serde_json::Value>>`. The CLI generator previously
overwrote the standalone SDK prelude with only the types-crate re-export,
dropping the std re-export, so the generated `<binary>-sdk` crate failed
to compile with `cannot find type HashMap in this scope`. The embedded
prelude now mirrors the standalone SDK prelude for std collections.
type: fix
createdAt: "2026-07-16"
irVersion: 67
- version: 0.23.3
changelogEntry:
- summary: |
Includes Rust SDK Generator 0.42.2 updates.
type: fix
createdAt: "2026-07-15"
irVersion: 67
- version: 0.23.2
changelogEntry:
- summary: |
Includes Rust SDK Generator 0.42.1 updates.
type: fix
createdAt: "2026-07-10"
irVersion: 67
- version: 0.23.1
changelogEntry:
- summary: |
Pin the npm toolchain used by the generated publish workflow. The
`publish` and `publish-launcher` jobs in `.github/workflows/ci.yml` now
run on a pinned Node LTS (`node-version: "lts/Krypton"`) and call
`npm publish` directly instead of `npx -y npm@latest publish`. Relying on
`npm@latest` pulled whatever npm release was newest at publish time, so a
broken npm release could break publishing. The pinned Node LTS bundles an
npm that supports OIDC trusted publishing.
type: fix
createdAt: "2026-07-09"
irVersion: 67
- version: 0.23.0
changelogEntry:
- summary: |
Remove the current-working-directory sandbox on output paths. `--output`
and `--output-dir` now write wherever they are pointed — including
absolute paths and locations outside the current directory — instead of
failing with "resolves to ... which is outside the current directory".
Control-character rejection and the `O_NOFOLLOW` refusal of a
final-component symlink are retained; `--output` still requires its parent
directory to exist.
type: feat
createdAt: "2026-07-09"
irVersion: 67
- version: 0.22.1
changelogEntry:
- summary: |
Fix aarch64-unknown-linux-musl build failure in generated CI workflow.
The emitted workflow now sets CARGO_TARGET_*_LINKER=musl-gcc and
CC=musl-gcc for musl targets so the Rust linker finds musl-gcc
instead of falling back to the system cc (which links against glibc).
type: fix
createdAt: "2026-07-08"
irVersion: 67
- version: 0.22.0
changelogEntry:
- summary: |
Includes Rust SDK Generator 0.42.0 updates.
type: feat
createdAt: "2026-07-07"
irVersion: 67
- version: 0.21.1
changelogEntry:
- summary: |
Fix OpenAPI parser crash when a schema property value is an array instead
of an object. Some Fern-processed specs (e.g. ElevenLabs) emit a
single-element array wrapping the real schema object. The parser now
unwraps single-element arrays and falls back to a default schema for
other non-object values, instead of aborting with "invalid type: sequence,
expected struct OpenApiSchemaObject".
type: fix
createdAt: "2026-07-02"
irVersion: 67
- version: 0.21.0
changelogEntry:
- summary: |
Add `rootGroup` custom config field. When set in `generators.yml`,
emits `.command_namespace("<rootGroup>")` on the generated
`OpenApiBinding`, mounting all spec-derived commands under a
configurable namespace prefix (e.g. `cli api users list` instead of
`cli users list`). Requires cli-sdk >= 0.19.0.
type: feat
createdAt: "2026-07-01"
irVersion: 67
- version: 0.20.0
changelogEntry:
- summary: |
Auto-detect `text/event-stream` responses and stream SSE events to stdout
in real time, even when the OpenAPI spec omits `x-fern-streaming`. Previously
these responses fell through to the binary handler, causing errors or hangs.
type: feat
createdAt: "2026-06-29"
irVersion: 67
- version: 0.19.5
changelogEntry:
- summary: |
Generated CLIs now register two-field HTTP Basic auth at the root level
(`.auth(BasicAuth::new(...))`) instead of on the `OpenApiBinding`. This
makes `<bin> auth status` correctly enumerate the basic scheme, which it
previously reported as "No auth schemes are declared" even though
credentials were wired and requests authenticated correctly. Request-time
behavior is unchanged — the root builder lowers to the same
`SchemeBinding::Basic` and still propagates to the binding. (FER-11474)
type: fix
createdAt: "2026-06-29"
irVersion: 67
- version: 0.19.4
changelogEntry:
- summary: |
Sync cli-sdk runtime from fern-api/cli-sdk.
type: chore
createdAt: "2026-06-26"
irVersion: 67
- version: 0.19.3
changelogEntry:
- summary: |
Add `cargo:` prefix to workspace members in generated `dist-workspace.toml`
so that `dist plan` can parse the file correctly.
type: fix
- summary: |
Strip the `cargo:crates/pipeline-fixture` workspace member from generated
`dist-workspace.toml`. That member is a cli-sdk-only release-pipeline fixture
that is never vendored into a user's CLI, so leaving it in made `cargo dist
plan` / `cargo metadata` fail with "failed to load manifest for workspace
member `crates/pipeline-fixture`".
type: fix
createdAt: "2026-06-26"
irVersion: 67
- version: 0.19.2
changelogEntry:
- summary: |
Includes Rust SDK Generator 0.41.2 updates.
type: fix
- summary: |
Fix embedded SDK generation failure (ENOENT on asIs templates like
prelude.rs, http_client.rs) by setting FERN_RUST_ASIS_DIR before
invoking the Rust SDK generator in-process, ensuring the bundled
rust-sdk-dist/asIs/ directory is discovered correctly.
type: fix
- summary: |
Fix embedded SDK compilation failures caused by type-name casing
divergence between the co-generated types and SDK crates. The embedded
SDK IR is now migrated to exactly v66 (the rust generators' pinned IR
version) instead of all the way down the migration chain; the v66→v65
migration inflated bare-string names into language-agnostic casing
(e.g. "OrderId" → "OrderID"), which only the SDK crate echoed, breaking
references to the types crate.
type: fix
createdAt: "2026-06-26"
irVersion: 67
- version: 0.19.1
changelogEntry:
- summary: |
Includes Rust SDK Generator 0.41.1 updates.
type: fix
- summary: |
Fix embedded SDK generation failure ("failed to read feature configuration")
by skipping standalone doc generation (README, CONTRIBUTING, reference.md)
when the Rust SDK generator runs in cliEmbedded mode. Also stage features.yml
into the CLI dist for future extensibility.
type: fix
createdAt: "2026-06-26"
irVersion: 67
- version: 0.19.0
changelogEntry:
- summary: |
Includes Rust SDK Generator 0.41.0 updates.
type: internal
- summary: |
Fix de-conflicted client names in generated sdk.rs (renamed from
sdk_glue.rs). Client names are now read directly from the Rust SDK
generator's context via in-process orchestration with backward IR
migration (v67→v66), eliminating independent re-derivation drift.
Also renames module sdk_glue→sdk, sdk_client()→client().
type: fix
createdAt: "2026-06-26"
irVersion: 67
- version: 0.18.1
changelogEntry:
- summary: |
Includes Rust SDK Generator 0.40.9 updates.
type: fix
createdAt: "2026-06-25"
irVersion: 67
- version: 0.18.0
changelogEntry:
- summary: |
Add curl|bash installation support for generated CLIs via cargo-dist
release assets. Emits `.github/workflows/release.yml` unconditionally
for GitHub output, removes npm from dist-workspace.toml installers,
and updates the README Installation section to lead with shell/powershell
installer one-liners.
type: feat
createdAt: "2026-06-24"
irVersion: 67
- version: 0.17.12
changelogEntry:
- summary: |
Includes Rust SDK Generator 0.40.8 updates.
type: fix
- summary: |
Suppress `unused import: super::*` warnings in generated type files by adding
`#[allow(unused_imports)]` before the injected `use super::*;` statement.
type: fix
- summary: |
Suppress `dead_code` warnings in the generated `sdk_glue.rs` module, which
contains utilities for custom command handlers that may not be used yet.
type: fix
createdAt: "2026-06-24"
irVersion: 67
- version: 0.17.11
changelogEntry:
- summary: |
Show credential source hints (e.g. env var names) in `--help` for custom auth
providers instead of the opaque "custom auth provider" label.
type: fix
createdAt: "2026-06-24"
irVersion: 67
- version: 0.17.10
changelogEntry:
- summary: |
Includes Rust SDK Generator 0.40.7 updates.
type: fix
createdAt: "2026-06-23"
irVersion: 67
- version: 0.17.9
changelogEntry:
- summary: |
Fix crash in reference.md generation when OpenAPI specs contain `$ref`
parameter references (e.g. `$ref: "#/components/parameters/LimitParam"`).
The generator now resolves these references from `components.parameters`
instead of crashing with "Cannot read properties of undefined".
type: fix
createdAt: "2026-06-22"
irVersion: 67
- version: 0.17.8
changelogEntry:
- summary: |
Sync cli-sdk runtime from fern-api/cli-sdk.
type: chore
createdAt: "2026-06-12"
irVersion: 67
- version: 0.17.7
changelogEntry:
- summary: |
Sync cli-sdk runtime from fern-api/cli-sdk.
type: chore
createdAt: "2026-06-12"
irVersion: 67
- version: 0.17.6
changelogEntry:
- summary: |
Fix generated sdk_glue.rs missing `http_client` field in ApiClient
initializer for flat APIs (no sub-client groups), which caused Rust
compilation failures.
type: fix
createdAt: "2026-06-11"
irVersion: 67
- version: 0.17.5
changelogEntry:
- summary: |
Rebuild to pick up rust-sdk 0.40.6 which fixes serde imports in
`environment.rs` for multi-URL environments when embedded in the CLI.
type: chore
createdAt: "2026-06-11"
irVersion: 67
- version: 0.17.4
changelogEntry:
- summary: |
API-key (`header`) auth schemes now emit a `--api-key` CLI flag in
addition to the environment variable. The generated binding uses a
credential-source chain (`.source(AuthCredentialSource::any([cli,
env]))`) so the flag is tried first, falling back to the env var.
Previously the flag was env-only with no way to pass the key inline.
type: fix
createdAt: "2026-06-10"
irVersion: 67
- version: 0.17.3
changelogEntry:
- summary: |
Rebuild embedded SDK generation to pick up rust-sdk 0.40.5 error.rs
codegen fix — named/non-primitive error body fields now emit correct
imports and use serde_json::from_value() instead of as_str().
type: fix
createdAt: "2026-06-10"
irVersion: 67
- version: 0.17.2
changelogEntry:
- summary: |
Add `reqwest` dependency to the embedded types crate when file-upload
(multipart/form-data) request types are generated. Previously the types
crate referenced `reqwest::multipart::Form` without declaring the dep.
type: fix
- summary: |
Fix SDK glue generation for APIs with nested `x-fern-sdk-group-name`
groups (2+ levels). The glue now recursively discovers sub-client
structs from the generated SDK's resource tree and emits correct
nested struct literals instead of assuming a flat client hierarchy.
Nested sub-clients are qualified through `api::resources::<group>`
(where the group modules actually live) rather than `api::<group>`,
which is not re-exported at the crate's `api` root.
type: fix
createdAt: "2026-06-09"
irVersion: 67
- version: 0.17.1
changelogEntry:
- summary: |
Populate `repository.url` in generated npm `package.json` files from
the GitHub output mode's `repoUrl`. Fixes npm provenance verification
failures (E422) when publishing with `--provenance`.
type: fix
createdAt: "2026-06-09"
irVersion: 67
- version: 0.17.0
changelogEntry:
- summary: |
Add npm version badge to the generated CLI README header when npm
publish info is configured, matching the badge behavior of generated
TypeScript SDKs.
type: feat
createdAt: "2026-06-09"
irVersion: 67
- version: 0.16.4
changelogEntry:
- summary: |
Update generated `sdk_glue.rs` to box `SdkError` when bridging to the SDK's
`RequestExecutor` trait and downcast `ApiError::Executor` back to `SdkError`
for structured error recovery.
type: fix
createdAt: "2026-06-09"
irVersion: 67
- version: 0.16.3
changelogEntry:
- summary: |
Sync cli-sdk runtime from fern-api/cli-sdk.
type: chore
createdAt: "2026-06-09"
irVersion: 67
- version: 0.16.2
changelogEntry:
- summary: |
Remove `--locked` from `cargo check`, `cargo build`, and `cargo test`
commands in generated CI workflows. The lockfile produced at generation
time can become stale when the cli-sdk runtime is updated or users add
custom code, causing `--locked` builds to reject the lockfile.
type: fix
createdAt: "2026-06-09"
irVersion: 67
- version: 0.16.1
changelogEntry:
- summary: |
Fix compilation error in generated CLI embedded types where structs
incorrectly derived `Default` when containing fields whose types extend
base objects that don't support `Default`. Propagated from the underlying
Rust model generator fix.
type: fix
createdAt: "2026-06-08"
irVersion: 67
- version: 0.16.0
changelogEntry:
- summary: |
Replace `embedTypes` and `embedSdk` config options with a single
`customCommands` flag. When true (default), the generator produces
the full custom command infrastructure (types crate, SDK crate,
sdk_glue, and custom.rs scaffold). Set to false for a spec-only
CLI with no custom command support.
type: feat
createdAt: "2026-06-08"
irVersion: 67
- version: 0.15.0
changelogEntry:
- summary: |
Ship custom-command agent skills inside generated CLIs. A freshly
generated project now includes `.agents/skills/custom-commands/SKILL.md`
(symlinked into `.claude/`) with spec-aware guidance: real endpoint
names, typed SDK client fields, and crate names derived from the API
spec. Coding agents can follow the skill to author custom commands
without reverse-engineering the patterns.
type: feat
createdAt: "2026-06-08"
irVersion: 67
- version: 0.14.4
changelogEntry:
- summary: |
Fix local (native) seed test execution by correctly passing OpenAPI specs
and SDK template directory to the CLI generator via environment variables.
type: fix
createdAt: "2026-06-08"
irVersion: 67
- version: 0.14.3
changelogEntry:
- summary: |
Sync cli-sdk runtime from fern-api/cli-sdk.
type: chore
createdAt: "2026-06-08"
irVersion: 67
- version: 0.14.2
changelogEntry:
- summary: |
Add `--locked` to cargo check/build/test commands in generated CI workflow
so dependency resolution matches the committed lockfile (consistent with the
publish job which already used `--locked`).
type: fix
createdAt: "2026-06-08"
irVersion: 67
- version: 0.14.1
changelogEntry:
- summary: |
Remove `--locked` from `cargo build` commands in generated CI
publish workflows. The lockfile produced at generation time may
become stale when users add custom code or dev-dependencies,
causing `--locked` builds to reject the lockfile. CI now allows
Cargo to re-resolve dependencies at build time.
type: fix
createdAt: "2026-06-08"
irVersion: 67
- version: 0.14.0
changelogEntry:
- summary: |
Generate `sdk_glue.rs` module providing `sdk_client()` and `block_on()`
helpers that bridge the CLI's AppContext to the co-generated SDK client.
Custom command handlers can now use typed SDK calls without manual
Cargo.toml edits — the SDK crate is the sole direct dependency and
re-exports all types.
type: feat
createdAt: "2026-06-06"
irVersion: 67
- version: 0.13.2
changelogEntry:
- summary: |
Fix compilation failure in cliEmbedded mode by re-exporting the
co-generated types crate in api/mod.rs so service resource files
can resolve request/response types via `use crate::api::*`.
type: fix
createdAt: "2026-06-06"
irVersion: 67
- version: 0.13.1
changelogEntry:
- summary: |
Fix Docker image build to include rust-sdk dist by adding
@fern-api/rust-sdk#dist:cli to turbo dependency graph.
type: fix
createdAt: "2026-06-05"
irVersion: 67
- version: 0.13.0
changelogEntry:
- summary: |
Sync cli-sdk runtime with CliExecutor bridge for SDK
execution-sharing in custom commands.
type: feat
createdAt: "2026-06-05"
irVersion: 67
- version: 0.12.1
changelogEntry:
- summary: |
Fix process hanging indefinitely after generation completes by
explicitly calling process.exit() instead of relying on the
event loop to drain.
type: fix
createdAt: "2026-06-05"
irVersion: 67
- version: 0.12.0
changelogEntry:
- summary: |
Co-vendor the Rust SDK crate alongside the types crate in CLI generation.
When `embedSdk` is enabled (default), the pipeline invokes `@fern-api/rust-sdk`
in `cliEmbedded` mode to produce a `<api>-sdk` workspace member with a path
dependency on the types crate and a `prelude` module that re-exports all types
for single type identity.
type: feat
createdAt: "2026-06-05"
irVersion: 67
- version: 0.11.0
changelogEntry:
- summary: |
Always emit a build+test CI workflow (check, compile, test) for GitHub
outputs, even when npm publishing is not configured. Previously, no
ci.yml was emitted unless npmPublishInfo was present.
type: feat
createdAt: "2026-06-05"
irVersion: 67
- version: 0.10.1
changelogEntry:
- summary: |
Fix datetime, base64, bigint, and number types failing to compile
in the generated -types crate by copying serde helper modules and
adding missing dependencies.
type: fix
createdAt: "2026-06-05"
irVersion: 67
- version: 0.10.0
changelogEntry:
- summary: |
Restructure generated README to follow progressive disclosure: TOC,
Install → Auth → Quick start → Usage → Documentation link → Advanced
(Common flags, Environment variables, Output formats, Shell completion
collapsed as subsections). Removes the --help dump from Usage.
type: feat
createdAt: "2026-06-05"
irVersion: 67
- version: 0.9.1
changelogEntry:
- summary: |
Derive sync-sdk.sh rsync set and build.mjs SDK_IGNORE from cli-sdk's
sync-manifest.toml instead of hardcoded path lists. Eliminates layout
drift between the two repos.
type: chore
createdAt: "2026-06-05"
irVersion: 67
- version: 0.9.0
changelogEntry:
- summary: |
Embed typed Rust model crate as a workspace member in all generated
CLI output by default. The CLI generator invokes the rust-model
generator as a child process to produce a `<api>-types` library crate
alongside the CLI crate, wired as a path dependency. Custom command
handlers use `ctx.invoke()` with typed serde structs from the types
crate for serialization/deserialization while all HTTP execution stays
on the CLI's native executor. Set `embedTypes: false` in customConfig
to opt out.
type: feat
- summary: |
Exclude `.synced-from` provenance file from generated CLI output.
type: fix
createdAt: "2026-06-04"
irVersion: 67
- version: 0.8.0
changelogEntry:
- summary: |
Generate a README.md in every generated CLI project. The README includes
installation, authentication, usage, output formats, configuration, and
shell completion sections. Customer-authored H2 sections are preserved
on regeneration via the existing Fern SDK README merge mechanism.
type: feat
createdAt: "2026-06-03"
irVersion: 67
- version: 0.7.0
changelogEntry:
- summary: |
Generated publish workflow improvements: uses `npx -y npm@latest publish`
for OIDC support, adds backport tag detection for older-than-latest releases,
switches Linux targets from glibc to musl for fully static binaries,
builds aarch64-linux natively on `ubuntu-24.04-arm` instead of cross-compiling,
conditionally uses `--no-default-features --features rustls` for musl targets,
and bumps `actions/checkout` and `actions/setup-node` to v6.
type: feat
createdAt: "2026-06-03"
irVersion: 67
- version: 0.6.1
changelogEntry:
- summary: |
Publish new docker image after name change fernapi/fern-cli -> fernapi/fern-cli-generator
type: chore
createdAt: "2026-06-03"
irVersion: 67
- version: 0.6.0
changelogEntry:
- summary: Strip fixture-dependent inline tests from vendored cli-sdk so `cargo test` passes in both the SDK and generated
CLIs
type: fix
- summary: |
Generated CLIs now serialize OpenAPI query parameters according to their
declared `style`/`explode` (form, spaceDelimited, pipeDelimited, deepObject).
(cli-sdk #144, FER-10569)
type: feat
- summary: |
Generated CLIs now serialize OpenAPI header parameters using the `simple`
style. (cli-sdk #137, FER-10569)
type: feat
- summary: |
Generated CLIs now serialize OpenAPI path parameters using the `simple`,
`label`, and `matrix` styles. (cli-sdk #138, FER-10569)
type: feat
- summary: |
Generated CLIs support `multipart/form-data` request bodies, exposing each
part as its own flag. (cli-sdk #88, FER-10569)
type: feat
- summary: |
`multipart/form-data` request bodies accept `--file` parts, so file-upload
endpoints can stream a file from disk. (cli-sdk #145, FER-10569)
type: feat
- summary: |
HTTP requests now retry on transient failures with exponential backoff and
automatically attach an `Idempotency-Key` header to retried mutations.
(cli-sdk #86, FER-10521)
type: feat
- summary: |
OpenAPI parameter names are sanitized into valid, readable CLI flags instead
of being passed through verbatim. (cli-sdk #87, FER-10430)
type: feat
- summary: |
Auth error messages now name the specific environment variable the CLI
expected, making missing-credential failures easier to diagnose.
(cli-sdk #81, FER-10702)
type: feat
- summary: |
Auth schemes support multiple headers, enabling APIs that require more than
one credential header (e.g. Sandboxes). (cli-sdk #116)
type: feat
- summary: |
Nullable scalar request-body flags emit a null sentinel, letting users
distinguish an explicit `null` from an omitted value. (cli-sdk 8234544)
type: feat
createdAt: "2026-06-02"
irVersion: 67
- version: 0.5.0
changelogEntry:
- summary: |
Include a `.gitignore` in generated CLI output so that Rust build
artifacts (`target/`) are not tracked by Git.
type: feat
createdAt: "2026-05-29"
irVersion: 67
- version: 0.4.2
changelogEntry:
- summary: |
Move overlay fixture integration tests out of `src/openapi/overlay.rs`
into `tests/overlay_fixture.rs` (filtered from shipped output via
`SDK_IGNORE`). The previous in-source tests `include_str!`'d
`../../cli/openapi-fixture/openapi.yaml`, a path pruned by
`SDK_IGNORE`, so every generated CLI failed
`cargo build --locked --all-features --tests` at
`src/openapi/overlay.rs:1835` / `:1894` with
`couldn't read … openapi.yaml`.
type: fix
createdAt: "2026-05-25"
irVersion: 67
- version: 0.4.1
changelogEntry:
- summary: |
Bump Node.js base image from 24.15 to 24.16.
type: chore
createdAt: "2026-05-22"
irVersion: 67
- version: 0.4.0
changelogEntry:
- summary: |
Drive binary identity and auth wiring from the Fern IR instead of
the raw OpenAPI spec. Env-var names now come from
`generators.yml`'s `auth-schemes` block (e.g. `CLOSE_API_KEY`)
rather than the spec-derived `<BIN>_<SCHEME>_<KIND>`.
Fix silent auth drop for basic schemes with `password.omit: true`
(Close's "API key as username" pattern). Previously emitted
`auth_basic_scheme(..., literal(""))`, but `Literal("")` resolves
to `None`, tripping the SDK's "both halves must resolve" check and
sending the request unauthenticated. Now uses the new
`auth_basic_scheme_username_only` / `_password_only` builders
backed by `BasicAuthProvider::{username_only,password_only}`.
`--help` now reads `basic auth (username only) · username: …`
instead of the misleading `password: built-in literal`.
Output also no longer ships Fern's CI workflows, the strip-schema
dev bin, or the `@fern-api` cargo-dist scope;
`[package.metadata.dist].dist` defaults to `true`.
type: feat
createdAt: "2026-05-22"
irVersion: 67
- version: 0.3.0
changelogEntry:
- summary: |
End-to-end Rust CLI generation. The generator copies the bundled
Rust SDK template into the user's output (recursive copy with a
curated `SDK_IGNORE`) and writes `cli/<binary>/main.rs` from
scratch alongside each mounted OpenAPI spec.
Binary identity is derived from one of:
- `customConfig.binaryName` in generators.yml
- else the spec's `info.title` (kebab-cased) for single-spec
workspaces
- else a clear error (multi-spec without override).
Patched into `Cargo.toml`'s `[[bin]] name`/`path`, the
`CliApp::new(...)` arg, and the env-var prefix for auth
credentials.
Auth detection: each declared `components.securitySchemes`
entry the SDK can lower (`http: bearer`, `oauth2`,
`apiKey: header`, `http: basic`) emits the matching
`.auth_scheme_env(...)` / `.auth_basic_scheme(...)` call
against `<BIN>_<SCHEME>_<KIND>` env vars. Unsupported schemes
(apiKey in query/cookie, openIdConnect, mTLS) are silently
skipped to match the SDK's supported surface.
Multi-spec routing: specs without a `namespace:` in
`generators.yml` emit `.spec(include_str!(...))` so they merge
flat at the root of the command tree; specs with a namespace
emit `.spec_under("<ns>", include_str!(...))` so each surfaces
under its own sub-command. Mixed workspaces work.
Workspaces that mount no OpenAPI specs (e.g. Fern definitions)
skip cleanly with a log message — the output dir stays
untouched rather than receiving a half-wired template.
Operational: Sentry instrumentation matches the other
generators (no-op without `SENTRY_DSN` or with
`FERN_DISABLE_TELEMETRY=true`). Shipped lib test fixture
trimmed from 33 KB to 1.5 KB; the rich fixture remains in
source for template-author tests but is excluded from user
output via SDK_IGNORE.
type: feat
createdAt: "2026-05-21"
irVersion: 67
- version: 0.2.0
changelogEntry:
- summary: |
Add API spec pre-processing infrastructure: bundle external $refs,
merge overrides, apply overlays, and output compact JSON for embedding
in generated CLI.
type: feat
createdAt: "2026-05-20"
irVersion: 67
- version: 0.1.0
changelogEntry:
- summary: |
Add CLI generator infrastructure and registration.
type: feat
createdAt: "2026-05-14"
irVersion: 66
- version: 0.0.1
changelogEntry:
- summary: Initial release of the CLI generator.
type: feat
createdAt: "2026-05-08"
irVersion: 66