跳到导航

Export your docs site from the CLI

You can now download a copy of your live docs site with fern docs export. Choose the format with --format:

  • html (default): the full static site, including each page’s Markdown copy, llms.txt, and assets. Serve it locally with npx serve <folder>.
  • md: each page’s Markdown and llms.txt.
  • pdf: one PDF of the site, with the same cover, table of contents, header, and footer options as the Dashboard export.
developer-tools

Move custom domains off Vercel

Fern Docs sites are now prebuilt as static pages and served from the edge, so pages load faster and a publish no longer slows your site down. Custom domains that still point to Vercel, Fern’s previous hosting, must point to cname.ferndocs.com by December 1, 2026. You can now make the switch from the Dashboard, and your docs stay live on the current setup until you change the DNS record.

dashboarddeveloper-tools

Real page titles for external sitemap results

Search results for pages indexed from experimental.external-sitemaps now show each page’s real title instead of one derived from its URL, so help center and community pages are findable by topic.

  • Fern’s crawler identifies itself as FernBot/1.0 (+https://buildwithfern.com) and follows robots.txt and Crawl-delay, so site owners can allow or restrict it.
  • URLs that carry their language in a query parameter such as lang, hl, or _LANG are routed to the matching site locale.
  • A temporarily unavailable sitemap no longer removes its pages from search.
search

Role-based access control in local preview

fern docs dev now applies role-based access control the same way a preview link does. Use the role selector to view the site as a specific viewer and check which pages and navigation items each role sees. Password protection also works locally when you set FERN_AUTH_TYPE=password and FERN_AUTH_SECRET before starting the server.

Read the docs
securitydeveloper-tools

Analytics consent

You can now keep PostHog analytics off until a visitor consents. Set settings.require-analytics-consent: true in docs.yml, then report consent from your consent manager’s callback (for example, Ketch or OneTrust) by setting window.fernAnalyticsConsent and dispatching a fern-analytics-consent event. Until consent is granted, Fern’s built-in PostHog analytics and your own PostHog instance load no scripts, set no cookies, and send no events. Revoking consent turns PostHog off and removes its cookies and storage keys.

integrationsdocs.yml

Choose the default version

You can now mark any entry in versions with default: true to make it the version served at your unversioned URLs, instead of relying on the first entry in the list. List order still sets the order of the version dropdown, so a preview or development version can appear first while a stable release keeps the canonical URLs, sitemap, and search. The flag also works in product versions.

navigation

Dynamic OG images on by default

Sites that set no site-wide og:image or twitter:image now get a generated preview image for every page, so links shared in Slack, X, and LinkedIn show a card image instead of a blank placeholder. Pages with their own og:image in frontmatter keep it. Set og:dynamic: false under metadata in docs.yml to opt out.

Read the docs
seo

Draggable Ask AI chat widget

Visitors can now move the standalone AskAiChat widget anywhere on the page. Drag the card by its header, or drag the launcher button itself and the card follows. The widget stays inside the viewport, and the card opens above or below the launcher depending on where there’s room. Dragging is on by default in @fern-api/search-widget 0.6.0; pass draggableCard={false} to keep the chat pinned to its placement corner.

aicomponents

Sort endpoints by availability

You can now order endpoints in your API Reference by their availability with the sort-by-availability option. Listed values come first, in the order you provide, followed by any remaining values in the default order. Use unset to position endpoints that have no availability. Combine it with alphabetized: true to sort endpoints alphabetically within each availability.

api-referencedocs.yml

PHP filter for llms.txt and Markdown output

You can now pass lang=php to /llms.txt and to per-page .md and .mdx URLs to return only PHP SDK code examples. php joins node, python, java, ruby, go, csharp, and swift as accepted values for the lang query parameter.

Example
/llms.txt?lang=php
/plants/create-plant.md?lang=php
Read the docs
ai

Exclude changelogs from llms.txt

You can now omit changelog sections from llms.txt by adding the excludeChangelog=true query parameter. This keeps the index small for sites with long release histories. It combines with the existing lang and excludeSpec parameters, for example /llms.txt?lang=python&excludeSpec=true&excludeChangelog=true.

Read the docs
ai

More page suggestions in agent 404 responses

Requests for a nonexistent .md URL now return up to five “Similar pages” suggestions instead of three, so agents on large sites are more likely to find the page they were looking for.

Read the docs
ai

Split response example selector

When an endpoint has multiple examples for the same status code, the response snippet now renders two dropdowns side by side instead of one flat list: a status code dropdown on the left and an example dropdown to its right. The example dropdown only appears when the selected status code has more than one example — status codes with a single example show only the status code dropdown, keeping the UI uncluttered for the common case.

api-reference

Site-level changelog for multi-product sites

Multi-product sites can now have a single changelog shared by every product. Add a top-level changelog key in docs.yml next to products and the changelog is served at /changelog, without a product slug prefix and without appearing in the product switcher. This replaces the workaround of a dedicated “Changelog” product hidden with CSS.

docs.yml
products:
- display-name: Ferns
path: ./products/ferns.yml
- display-name: Cacti
path: ./products/cacti.yml
changelog:
navigationdocs.yml

Reference API specs directly from docs.yml

You can now point an api navigation item straight at your OpenAPI, AsyncAPI, or GraphQL specification files with a specs list, without creating a generators.yml. Each entry takes a type and a path (relative to the configuration file), plus optional overrides, overlays, and namespace. Existing api-name setups are unchanged.

docs.yml
navigation:
- api: API Reference
specs:
- type: openapi
path: ./openapi.yml
api-referencedocs.yml

Custom Ask Fern disclaimer

You can now replace the default Ask Fern disclaimer (“Responses are generated using AI and may contain mistakes.”) with your own wording. Set ai-search.disclaimer in docs.yml and the text appears beneath answers in the chat panel, standalone modal, mobile drawer, and search widget, so the disclaimer can match your legal or privacy requirements.

docs.yml
ai-search:
disclaimer: Answers are generated by a third-party AI model and may be inaccurate.
aidocs.yml

Playground-only authentication descriptions

You can now add auth instructions that appear only in the API Explorer, such as where to generate a token, without changing the Authorization description in your API Reference. Set x-fern-playground-description on a security scheme in your OpenAPI spec, or playground-docs on an auth scheme in a Fern Definition. The text renders as an info callout beneath the matching auth input and supports links, inline code, and paragraphs.

api-reference

Custom search metadata for faceting

You can now attach your own key-value metadata to a page with the search-metadata frontmatter object. Fern copies the block onto every Algolia record for that page and declares each key for faceting, so a custom search integration can group and filter results by your own taxonomy.

Read the docs
searchfrontmatter

Per-deployment values in self-hosted docs

A self-hosted container can now resolve environment variables in the pages it serves, on each request. A ${VAR} whose name is listed in FERN_RUNTIME_ENV_VARS is deferred past generation instead of being substituted with its build-time value, so one image serves deployments that differ only in those values.

Read the docs
self-hostedcustomization

Fern Agent automations

You can now put Fern Agent on a schedule. Create an automation on the Automations page in the Fern Dashboard. You can also describe the recurring work in the chat panel or Slack, and Fern Agent will set up an automation for you. Automations can review your reader feedback, unanswered Ask Fern questions, search queries, or analytics, report back what it found, and open a pull request when the prompt asks for a change.

ai