diff --git a/fern/products/cli-api-reference/cli-changelog/2026-05-10.mdx b/fern/products/cli-api-reference/cli-changelog/2026-05-10.mdx new file mode 100644 index 000000000..d78386222 --- /dev/null +++ b/fern/products/cli-api-reference/cli-changelog/2026-05-10.mdx @@ -0,0 +1,6 @@ +## 5.22.0 +**`(feat):`** Add `fern sdk list` command to list configured and available SDK generators. +Displays configured SDKs from local fern.yml and available generators from the +Fern registry. Supports `--language`, `--type`, and `--json` flags. + + diff --git a/fern/products/cli-api-reference/cli-changelog/2026-05-11.mdx b/fern/products/cli-api-reference/cli-changelog/2026-05-11.mdx new file mode 100644 index 000000000..f0d5cbce8 --- /dev/null +++ b/fern/products/cli-api-reference/cli-changelog/2026-05-11.mdx @@ -0,0 +1,26 @@ +## 5.23.1 +**`(fix):`** Fix `fern docs dev` hanging indefinitely on Node.js v26+ on Linux by disabling +io_uring in the child server process. Node 26 enables io_uring by default in +libuv, which has a busy-loop bug where worker threads spin on an internal +eventfd, starving the main event loop. + + +## 5.23.0 +**`(internal):`** Add an opt-in `VerificationStep` to the post-generation pipeline that runs +`.fern/verify.sh` (when emitted by the generator) inside a language-specific +`{generatorImage}-validator` container after replay and before any GitHub +push. A failing script aborts the pipeline before opening a PR and surfaces +raw stderr through the pipeline logger; a missing script is a silent no-op. + +The step is gated on a hidden `--verify` flag for `fern generate`; when +passed (with `--local` or `--runner`), the local workspace runner sets +`config.verify.enabled = true` on the pipeline and the configured container +runtime (`docker` or `podman`) is forwarded to the validator container. +Remote/Fiddle generation does not honor this flag yet. + + +## 5.22.1 +**`(fix):`** Fix `fern docs dev` failing with pnpm 11 due to esbuild build scripts being blocked by default. +Writes `onlyBuiltDependencies` config to the bundle folder before installing esbuild. + + diff --git a/fern/products/docs/docs.yml b/fern/products/docs/docs.yml index 77e194548..e9ad34d01 100644 --- a/fern/products/docs/docs.yml +++ b/fern/products/docs/docs.yml @@ -509,6 +509,8 @@ navigation: hidden: true - website: hidden: true + - scribeWebhooks: + hidden: true # must be included to use the schema component - api: API reference api-name: docs-yml diff --git a/fern/products/docs/pages/ai/fern-writer.mp4 b/fern/products/docs/pages/ai/fern-writer.mp4 index cbc7afc6c..7db9f3f71 100644 Binary files a/fern/products/docs/pages/ai/fern-writer.mp4 and b/fern/products/docs/pages/ai/fern-writer.mp4 differ diff --git a/fern/products/docs/pages/ai/writer-open-pr.png b/fern/products/docs/pages/ai/writer-open-pr.png index d44644ea1..a1b94c265 100644 Binary files a/fern/products/docs/pages/ai/writer-open-pr.png and b/fern/products/docs/pages/ai/writer-open-pr.png differ diff --git a/fern/products/docs/pages/ai/writer-slack.png b/fern/products/docs/pages/ai/writer-slack.png deleted file mode 100644 index f56b83f31..000000000 Binary files a/fern/products/docs/pages/ai/writer-slack.png and /dev/null differ diff --git a/fern/products/docs/pages/ai/writer.mdx b/fern/products/docs/pages/ai/writer.mdx index 07f8595ca..79c4ce423 100644 --- a/fern/products/docs/pages/ai/writer.mdx +++ b/fern/products/docs/pages/ai/writer.mdx @@ -6,11 +6,15 @@ description: A Slack-based technical writing agent that updates your documentati Fern Writer is a Slack-based technical writing agent that keeps your docs aligned as your product evolves. It's powered by [Devin from Cognition](https://cognition.ai/blog/introducing-devin). Fern Writer understands Fern components and your writing style, and can be customized via an `AGENTS.md` file in your docs repository. - - Fern Writer in Slack + + ## How it works @@ -19,34 +23,8 @@ Fern Writer is a Slack-based technical writing agent that keeps your docs aligne In Slack channels where you've added Fern Writer, tag `@Fern Writer` and describe the change you need. Fern Writer [only responds when directly tagged](#privacy-and-data-handling). It will react to your message to confirm receipt, then create a pull request and reply with a link. - - Fern Writer opening a PR - - Fern Writer supports image and file attachments for additional context. When tagged in an existing thread, it reads the full conversation to understand context before responding. -| Use case | Sample request | -|----------|----------------| -| Document a new feature from a pull request | `@Fern Writer document the new rate limiting feature added in PR #123` | -| Add new content to existing pages | `@Fern Writer add a section about webhook retry behavior to the webhooks guide` | -| Reorganize and consolidate content | `@Fern Writer merge the authentication and authorization pages, and add a redirect from the old auth page` | -| Fix errors and improve clarity | `@Fern Writer fix the broken code example in the quickstart and update the package version to v2.1.0` | - - - - - ### Reviewing and merging Request changes by commenting in the Slack thread. Once the PR meets your requirements, merge it like any other pull request. @@ -62,6 +40,30 @@ Request changes by commenting in the Slack thread. Once the PR meets your requir Each pull request includes a **Requested by** field in the description, attributing the change to the person or team that initiated the request. Commits are signed and attributed to `fern-support`, ensuring that automated changes are clearly distinguishable from manual contributions in your repository's history. +## Example requests + + +@Fern Writer document the new rate limiting feature added in PR #123 + + +
+ + +@Fern Writer add a section about webhook retry behavior to the webhooks guide + + +
+ + +@Fern Writer merge the authentication and authorization pages, and add a redirect from the old auth page + + +
+ + +@Fern Writer fix the broken code example in the quickstart and update the package version to v2.1.0 + + ## Setup diff --git a/fern/products/docs/pages/api-references/library-docs.mdx b/fern/products/docs/pages/api-references/library-docs.mdx index e00a59ce9..5396750d7 100644 --- a/fern/products/docs/pages/api-references/library-docs.mdx +++ b/fern/products/docs/pages/api-references/library-docs.mdx @@ -4,7 +4,9 @@ description: Generate MDX documentation pages from your Python or C++ library so --- -The library docs generator parses your **Python or C++** library source code and generates MDX documentation pages for modules, classes, functions, methods, and parameters. Generated pages include cross-reference links and hierarchical navigation, and are integrated directly into your Fern Docs site. +The library docs generator parses your **Python or C++** library source code and generates MDX documentation pages for modules, classes, functions, methods, and parameters. Generated pages are added to your Fern Docs site with hierarchical navigation. + +Cross-links are automatic. When a fully-qualified identifier appears in a code block — for example, in a class signature or type annotation — the generator links it to the page documenting that symbol, so readers can jump straight to the definition. ## Configuration diff --git a/fern/products/docs/pages/component-library/default-components/runnable-endpoint.mdx b/fern/products/docs/pages/component-library/default-components/runnable-endpoint.mdx index 57f7540ab..f3d4e5efc 100644 --- a/fern/products/docs/pages/component-library/default-components/runnable-endpoint.mdx +++ b/fern/products/docs/pages/component-library/default-components/runnable-endpoint.mdx @@ -4,26 +4,31 @@ description: Add testable API endpoints to your docs with RunnableEndpoint. Supp --- -The `` component lets users make real HTTP requests to your APIs directly in the API Reference. It auto-detects endpoint definitions from your API specification and provides a request builder with inputs for headers, path parameters, query parameters, and request bodies. +The `` component lets users make real HTTP requests to your APIs directly from your documentation. It auto-detects the endpoint definition from your API specification, renders a request builder for headers, path parameters, query parameters, and request bodies, and displays the response status, headers, body, and timing inline. Form inputs persist in local storage across page reloads. ## Usage
- ![Runnable Endpoint component example](runnable-endpoint.png) +
```jsx Markdown - + ``` -## Features +## Variants -The component supports: -- **Multiple examples** – When your endpoint has multiple pre-configured examples, the component displays a dropdown selector in the header so users can switch between different examples -- **Multiple environments** – If your API defines multiple environments (production, staging, development), the component automatically displays an environment selector so users can test against different base URLs -- **API Reference integration** – Each `` includes a button that links users to the full API Reference documentation for the endpoint -- **Real-time response preview** – Users can view response status, headers, body, and response time immediately after sending requests -- **Form persistence** – Form inputs are automatically persisted in the browser's local storage, so users' test data is preserved even when navigating between pages or refreshing the browser +### Collapse by default + +Use `collapsed` to render the component with the form section hidden. Users can expand it by clicking the component. + +
+ +
+ +```jsx Markdown + +``` ## Properties diff --git a/fern/products/docs/pages/component-library/default-components/webhook-payload-snippet.mdx b/fern/products/docs/pages/component-library/default-components/webhook-payload-snippet.mdx index ad8f9004c..a197f2546 100644 --- a/fern/products/docs/pages/component-library/default-components/webhook-payload-snippet.mdx +++ b/fern/products/docs/pages/component-library/default-components/webhook-payload-snippet.mdx @@ -4,16 +4,26 @@ description: Reference a webhook payload from your API Reference to display exam --- -Use the `` component to reference a webhook payload from your API Reference. +The `` component displays a webhook's request payload schema from your API Reference. It renders the same fields, types, and example values that appear on the webhook's full API Reference page, so readers can inspect the payload inline alongside your prose. + +To display the schema for a regular HTTP endpoint, use the [``](/learn/docs/writing-content/components/endpoint-schema-snippet) component. ## Usage +Reference a webhook by its `operationId`. + +
+
+ +
+
+ ```jsx Markdown - + ``` ## Properties - The operation ID of the webhook to display. + The `operationId` of the webhook to display. If your API uses [namespaces](/learn/api-definitions/overview/project-structure#combined-sdks-from-multiple-apis), prefix with the namespace and `::` (e.g., `payments::on-payment-succeeded`). diff --git a/fern/products/docs/pages/getting-started/quickstart.mdx b/fern/products/docs/pages/getting-started/quickstart.mdx index e561f6669..d01d29dc6 100644 --- a/fern/products/docs/pages/getting-started/quickstart.mdx +++ b/fern/products/docs/pages/getting-started/quickstart.mdx @@ -147,7 +147,7 @@ This guide covers the CLI path. A browser-based guided setup also exists at http - Now that you have a basic docs site, you can customize it by adding tutorials, generating an API Reference, or finetuning the branding. (Or skip ahead to [preview](#preview-your-docs) and [publish](#publish-to-production).) + Now that you have a basic docs site, you can customize it by adding tutorials, generating an API Reference, or fine-tuning the branding. (Or skip ahead to [preview](#preview-your-docs) and [publish](#publish-to-production).) diff --git a/fern/products/docs/pages/preview-publish/preview-changes-locally.mdx b/fern/products/docs/pages/preview-publish/preview-changes-locally.mdx index 666289bf5..cb6d58255 100644 --- a/fern/products/docs/pages/preview-publish/preview-changes-locally.mdx +++ b/fern/products/docs/pages/preview-publish/preview-changes-locally.mdx @@ -13,6 +13,7 @@ Fern offers two ways to preview documentation changes: Install the following: - Node.js version 22 or higher - [The Fern CLI](/learn/cli-api-reference/cli-reference/overview#install-fern-cli) +- [pnpm](https://pnpm.io/installation), available on your `PATH`. `fern docs dev` uses pnpm internally to install the dependencies it needs to render your preview (for example, `esbuild`), so it must be installed globally even if your project uses npm or yarn.
## Local development @@ -55,6 +56,12 @@ Some features are disabled in local development: `fern docs dev` and `fern generate --docs` must be run from a directory that contains a [`fern/` folder](/learn/docs/getting-started/project-structure) with a `docs.yml` inside. Change into your project directory, or add a `docs.yml`. +#### Failed to install required package due to error: Command failed with exit code 1: pnpm i esbuild + +`fern docs dev` shells out to pnpm to install the dependencies it needs to render your preview. Install [pnpm](https://pnpm.io/installation) globally and make sure it's on your `PATH`, then rerun `fern docs dev`. Your project's package manager (npm, yarn, etc.) doesn't need to change. + +If the same command also prints `[ERR_PNPM_IGNORED_BUILDS] Ignored build scripts: esbuild`, run `pnpm approve-builds` and approve `esbuild` so pnpm allows its post-install scripts to run. + #### Broken link to /some/path (resolved path: ...) `fern check` reports this when a link in a Markdown page doesn't resolve to a real page, anchor, or file in your docs. diff --git a/fern/products/docs/pages/self-hosted/changelog/2026-05-09.mdx b/fern/products/docs/pages/self-hosted/changelog/2026-05-09.mdx new file mode 100644 index 000000000..c28eea12a --- /dev/null +++ b/fern/products/docs/pages/self-hosted/changelog/2026-05-09.mdx @@ -0,0 +1,47 @@ +### v0.114.44 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.44 +``` + +Digest: `sha256:1af81539eb27cd3c8f5e049581ca48f49388dbbee5a87bdafc30dd3ea8096d6e` + +### v0.114.44 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.44 +``` + +Digest: `sha256:1af81539eb27cd3c8f5e049581ca48f49388dbbee5a87bdafc30dd3ea8096d6e` + +### v0.114.45 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.45 +``` + +Digest: `sha256:402c90cc3b4f043b461a840901f192e1a71ffb06b573e2760b1aa5a5ebff8292` + +### v0.114.45 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.45 +``` + +Digest: `sha256:402c90cc3b4f043b461a840901f192e1a71ffb06b573e2760b1aa5a5ebff8292` + +### v0.114.46 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.46 +``` + +Digest: `sha256:c7aa2e5b00f764469d5310beca727cf29a21694f831bdbb6c34aa9472c44c295` + +### v0.114.46 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.46 +``` + +Digest: `sha256:c7aa2e5b00f764469d5310beca727cf29a21694f831bdbb6c34aa9472c44c295` diff --git a/fern/products/docs/pages/self-hosted/changelog/2026-05-11.mdx b/fern/products/docs/pages/self-hosted/changelog/2026-05-11.mdx new file mode 100644 index 000000000..b8afb05e0 --- /dev/null +++ b/fern/products/docs/pages/self-hosted/changelog/2026-05-11.mdx @@ -0,0 +1,7 @@ +### v0.114.47 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.47 +``` + +Digest: `sha256:23b4cb7e2dc2ccf93a10f1e1ab69247c74b01df4bae211c2268d077cc94922c8` diff --git a/fern/products/docs/pages/self-hosted/changelog/2026-05-12.mdx b/fern/products/docs/pages/self-hosted/changelog/2026-05-12.mdx new file mode 100644 index 000000000..d7e1e3d3b --- /dev/null +++ b/fern/products/docs/pages/self-hosted/changelog/2026-05-12.mdx @@ -0,0 +1,23 @@ +### v0.114.48 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.48 +``` + +Digest: `sha256:46ff081497e53f7fd574fb9cc2b3463761ef4214430246b82d4587f206020079` + +### v0.114.49 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.49 +``` + +Digest: `sha256:392c78851ff5c6964b6973ebf4e8042b52f3e6d7e2404ed36badd00c4fa9e8d0` + +### v0.114.50 + +```dockerfile +FROM fernenterprise/fern-self-hosted:0.114.50 +``` + +Digest: `sha256:8b204fd8cf4a0b47feb6143c7f32859eb81f5a602288d2f087b9d75c6c38718f` diff --git a/fern/products/sdks/generators/csharp/changelog/2026-05-11.mdx b/fern/products/sdks/generators/csharp/changelog/2026-05-11.mdx new file mode 100644 index 000000000..21cd34dde --- /dev/null +++ b/fern/products/sdks/generators/csharp/changelog/2026-05-11.mdx @@ -0,0 +1,12 @@ +## 2.66.1 +**`(chore):`** Bump the C# SDK and C# model generator containers' Node base image from +`node:22.22-alpine3.23` to `node:24.15-alpine3.23`. Aligns the generators +with the rest of the Fern generator containers on a single Node major +version (Node 24) and picks up Node 24's CVE patches. The bundled npm +11.12.1 in `node:24.15` already ships patched `brace-expansion@5.0.4`, so +the C# SDK's `brace-expansion 2.0.3` replacement step is removed. The +`ip-address` and `picomatch` patches are retained because the bundled +versions in `node:24.15` (10.1.0 and 4.0.3 respectively) are still +vulnerable. + + diff --git a/fern/products/sdks/generators/go/changelog/2026-05-11.mdx b/fern/products/sdks/generators/go/changelog/2026-05-11.mdx new file mode 100644 index 000000000..cfbab0d6b --- /dev/null +++ b/fern/products/sdks/generators/go/changelog/2026-05-11.mdx @@ -0,0 +1,16 @@ +## 1.41.0 +**`(feat):`** Add a `WithFunc` option for bearer auth that accepts a `func() (string, error)` callable. +The callable is evaluated at request time when no static token is set, matching the callable +auth behavior available in the Python and TypeScript SDK generators. + + +## 1.40.4 +**`(chore):`** Bump the Go SDK and Go model generator containers' Node base image from +`node:22.22-alpine3.23` to `node:24.15-alpine3.23`. Aligns the generators +with the rest of the Fern generator containers on a single Node major +version (Node 24) and picks up Node 24's CVE patches. The existing +`npm pack @latest` loop that swaps in patched `ip-address`, +`brace-expansion`, and `picomatch` is retained because `npm pack @latest` +continues to resolve the same fixed releases on Node 24. + + diff --git a/fern/products/sdks/generators/java/changelog/2026-05-11.mdx b/fern/products/sdks/generators/java/changelog/2026-05-11.mdx new file mode 100644 index 000000000..1aef556aa --- /dev/null +++ b/fern/products/sdks/generators/java/changelog/2026-05-11.mdx @@ -0,0 +1,16 @@ +## 4.8.5 +**`(chore):`** Bump the Java SDK generator container's Node base image from +`node:24.14.1-bookworm` to `node:24.15-trixie`. Aligns the generator +with the rest of the Fern generator containers on a single Node patch +minor (floating `24.15`) and a single Debian release (trixie). Trixie ships +patched versions of glibc, dpkg, nghttp2, libcap2, systemd, libgcrypt20, +krb5, curl, and expat that are not available on bookworm, clearing the +AWS Inspector findings that dist-upgrade alone could not. The non-slim +variant is intentional because the Node-stage patch steps shell out to +`curl` and `tar`. The bundled npm 11.12.1 in `node:24.15` already ships +patched `glob@13.0.6`, `minimatch@10.2.4`, `tar@7.5.11`, and +`brace-expansion@5.0.4`, so those tarball-replacement patch steps are +removed. The `ip-address` and `picomatch` patches are retained because the +bundled versions (10.1.0 and 4.0.3 respectively) are still vulnerable. + + diff --git a/fern/products/sdks/generators/php/changelog/2026-05-11.mdx b/fern/products/sdks/generators/php/changelog/2026-05-11.mdx new file mode 100644 index 000000000..2f962dd19 --- /dev/null +++ b/fern/products/sdks/generators/php/changelog/2026-05-11.mdx @@ -0,0 +1,7 @@ +## 2.9.4 +**`(chore):`** Bump the PHP SDK and PHP model generator containers' Node base image from +`node:22.22-alpine3.23` to `node:24.15-alpine3.23`. Aligns the generators +with the rest of the Fern generator containers on a single Node major +version (Node 24) and picks up Node 24's CVE patches. + + diff --git a/fern/products/sdks/generators/python/changelog/2026-05-11.mdx b/fern/products/sdks/generators/python/changelog/2026-05-11.mdx new file mode 100644 index 000000000..4bcd29cf4 --- /dev/null +++ b/fern/products/sdks/generators/python/changelog/2026-05-11.mdx @@ -0,0 +1,10 @@ +## 5.12.4 +**`(chore):`** Bump the Python SDK generator container's Node base image from +`node:22.22-bookworm-slim` to `node:24.15-trixie-slim`. Aligns the +generator with the rest of the Fern generator containers on a single +Node major version (Node 24) and Debian release (trixie). Trixie ships +patched versions of glibc, dpkg, nghttp2, libcap2, systemd, libgcrypt20, +krb5, curl, and expat that are not available on bookworm, clearing the +AWS Inspector findings that dist-upgrade alone could not. + + diff --git a/fern/products/sdks/generators/rust/changelog/2026-05-11.mdx b/fern/products/sdks/generators/rust/changelog/2026-05-11.mdx new file mode 100644 index 000000000..344d02ae0 --- /dev/null +++ b/fern/products/sdks/generators/rust/changelog/2026-05-11.mdx @@ -0,0 +1,19 @@ +## 0.36.5 +**`(chore):`** Bump the Rust SDK and Rust model generator containers' Node base image from +`node:22.22-alpine3.23` to `node:24.15-alpine3.23`. Aligns the generators +with the rest of the Fern generator containers on a single Node major +version (Node 24) and picks up Node 24's CVE patches. The Rust SDK's +in-place `npm@11.13.0` self-upgrade and the bundled `ip-address` patch are +retained because the Node 24 `npm` ship (`11.12.1`) still vendors +`ip-address@10.1.0`, which is vulnerable to GHSA-v2v4-37r5-5v8g. + + +## 0.36.4 +**`(chore):`** Bump the rust toolchain stage in the rust-sdk and rust-model generator +containers from `rust:1.82-alpine3.20` to `rust:1.91-alpine3.23`. Alpine +3.20 is EOL and ships outdated openssl/musl/busybox/zlib/curl/git; 1.91 +is the lowest rust version Docker Hub publishes for alpine3.23. The +Node runtime stage was already on `node:22.22-alpine3.23`, so there is +no longer any Alpine 3.20 layer anywhere in these images. + + diff --git a/fern/products/sdks/generators/swift/changelog/2026-05-11.mdx b/fern/products/sdks/generators/swift/changelog/2026-05-11.mdx new file mode 100644 index 000000000..67db7330f --- /dev/null +++ b/fern/products/sdks/generators/swift/changelog/2026-05-11.mdx @@ -0,0 +1,7 @@ +## 0.35.5 +**`(chore):`** Bump the Swift SDK and Swift model generator containers' Node base image +from `node:22.22-alpine3.23` to `node:24.15-alpine3.23`. Aligns the +generators with the rest of the Fern generator containers on a single Node +major version (Node 24) and picks up Node 24's CVE patches. + + diff --git a/fern/products/sdks/generators/typescript/changelog/2026-05-11.mdx b/fern/products/sdks/generators/typescript/changelog/2026-05-11.mdx new file mode 100644 index 000000000..b6a5c9ee9 --- /dev/null +++ b/fern/products/sdks/generators/typescript/changelog/2026-05-11.mdx @@ -0,0 +1,17 @@ +## 3.70.5 +**`(chore):`** Bump the TypeScript SDK validator container's Node base image to +`node:24.15-trixie-slim`. Aligns the validator with the rest of the +Fern generator containers on a single Node major version (Node 24) on +top of the trixie-slim base introduced for `typescript-sdk-cli` and +`typescript-sdk-validator` by PR #15779. + + +## 3.70.4 +**`(chore):`** Bump the typescript-sdk-cli and typescript-sdk-validator container base +images from `node:*-bookworm-slim` to `node:*-trixie-slim`. Trixie ships +patched versions of glibc, dpkg, nghttp2, libcap2, systemd, libgcrypt20, +krb5, curl, and expat that are not available on bookworm, so dist-upgrade +alone is a no-op for those AWS Inspector findings — the base-image bump +is what actually clears them. + +