April 14, 2026

AI search model update

Ask Fern now uses Claude 4.6 Sonnet and Claude 4.5 Haiku.

Read the docs

The api: link syntax now supports linking to the root of an API Reference section. Use api:apiName to create a link that resolves to the landing page of a specific API Reference at build time. This is useful when your project has multiple APIs.

Markdown
1Explore the [Plant Store API](api:plant-store) reference.
Read the docs

April 11, 2026

AsyncAPI spec endpoints

Fern docs sites serve your raw AsyncAPI 2.6.0 specification at /asyncapi.json and /asyncapi.yaml for sites with WebSocket channels. Download it for client generation, contract testing, or importing into AsyncAPI-compatible tools. The spec is also linked from your site’s llms.txt, so AI coding assistants can discover and use it automatically.

Read the docs

April 10, 2026

Custom llms.txt and llms-full.txt files

Provide your own llms.txt and llms-full.txt files instead of using the auto-generated versions. Add paths to your files under the agents key in docs.yml:

docs.yml
1agents:
2 llms-txt: ./path/to/llms.txt
3 llms-full-txt: ./path/to/llms-full.txt

Custom files are served at the root-level /llms.txt and /llms-full.txt endpoints. Nested paths continue to use auto-generated output.

Requires Fern CLI version 4.67.0 or later.

Read the docs

April 9, 2026

Default per-page directive for AI agents

Every page served to AI agents now includes a default directive that tells agents how to navigate your documentation programmatically — pointing them to .md URLs, llms.txt, and llms-full.txt. The directive is automatically generated using your site’s domain and basepath, so no configuration is needed.

Default page directive
For clean Markdown of any page, append .md to the page URL. For a complete documentation index, see https://docs.example.com/llms.txt. For full documentation content, see https://docs.example.com/llms-full.txt.

You can still override the default with a custom directive or disable it entirely.

Read the docs

Standalone search widget

Embed Ask Fern’s AI-powered search on any React site using the @fern-api/search-widget package. The widget renders a button that opens a search modal connected to your documentation content. It requires React 19; all other dependencies are bundled.

Read the docs

April 2, 2026

Per-page directives in llms.txt

You can add a directive that’s automatically prepended to every page when it’s served to AI agents — both individual Markdown page URLs and each page section within llms-full.txt. The directive is only visible to agents requesting Markdown; human-facing documentation is unaffected.

docs.yml
1agents:
2 page-directive: "For a complete page index, fetch https://docs.example.com/llms.txt"
Read the docs

Missing redirects check rule

The missing-redirects rule for fern check detects pages that were removed or moved without a redirect. It compares your current docs navigation against the previously published state and warns when a previously published URL would return a 404. Configure its severity in docs.yml:

docs.yml
1check:
2 rules:
3 missing-redirects: error

Requires authentication via fern login or the FERN_TOKEN environment variable. The check is skipped on first publish, when unauthenticated, or when the network is unavailable.

Requires Fern CLI version 4.57.0 or later.

Read the docs

Library docs generator

Generate MDX documentation pages from your Python or C++ library source code and include them in your Fern Docs site. Configure your libraries in docs.yml, run fern docs md generate, and the generated pages appear as navigation sections alongside your other documentation.

Read the docs

March 31, 2026

Configure fern check rule severity

You can now configure the severity of validation rules run by fern check directly in your docs.yml file using the check.rules property. Set individual rules to "warn" (non-blocking) or "error" (blocking) to control which checks fail your build.

docs.yml
1check:
2 rules:
3 broken-links: error
4 example-validation: warn

The --broken-links and --strict-broken-links CLI flags are now deprecated in favor of this configuration.

Read the docs

AI search upgrade

Ask Fern now runs on Claude 4.6 Sonnet for faster, more accurate answers.

Read the docs

Context7 integration

Host a Context7 verification file on your Fern docs site. Add integrations.context7 to your docs.yml pointing to your context7.json file, and Fern serves it at /context7.json on your domain.

docs.yml
1integrations:
2 context7: ./path/to/context7.json

Requires Fern CLI version 4.52.0 or later.

Read the docs

March 30, 2026

Tab alignment and placement options

You can now finetune how your tabs look and behave using theme.tabs in docs.yml. Choose between the default underline or bubble style, place tabs in the header or sidebar, and center-align header tabs from a single configuration block.

docs.yml
1theme:
2 tabs:
3 style: bubble
4 alignment: center
5 placement: header

The existing string shorthand (e.g., theme.tabs: bubble) continues to work for simple style changes.

Read the docs

March 23, 2026

On-page feedback logging for self-hosted deployments

Self-hosted deployments now log on-page feedback events as structured JSON with the [fern-docs-feedback] prefix. Filter your container logs to capture user feedback, including thumbs up/down votes and written messages.

Read the docs

March 18, 2026

Share a single preview link with reviewers that stays up to date as you push changes by passing an --id to fern generate --docs --preview. Rerunning with the same --id updates the existing preview in place rather than creating a new URL.

$fern generate --docs --preview --id my-feature

To set this up in CI, update your GitHub Actions workflow to pass the branch name as the --id.

Read the docs

March 12, 2026

Multi-file ZIP downloads

The <Download> component now supports bundling multiple files into a single ZIP download using the new sources prop. This is useful when you want users to download a collection of related assets — such as brand logos, SDK files, or configuration templates — without needing to host a pre-built ZIP file.

Pass an array of publicly accessible URLs to sources, and the component fetches each file client-side and packages them into a ZIP archive:

Markdown
1<Download
2 sources={[
3 "https://example.com/assets/logo-dark.svg",
4 "https://example.com/assets/logo-light.svg",
5 "https://example.com/assets/icon.svg"
6 ]}
7 filename="brand-assets.zip"
8>
9 <Button intent="primary">Download brand assets</Button>
10</Download>
Read the docs

open-by-default option for collapsed sections

Sections and folders in your sidebar navigation support a new collapsed: open-by-default value. Sections configured with this value start expanded but display a toggle so users can collapse them.

docs.yml
1navigation:
2 - section: API guides
3 collapsed: open-by-default
4 contents:
5 - page: Authentication
6 path: ./pages/api/auth.mdx
7 - page: Pagination
8 path: ./pages/api/pagination.mdx
Read the docs