{ "type": "object", "properties": { "instances": { "type": "array", "items": { "$ref": "#/definitions/docs.DocsInstance" } }, "title": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "A string that is used as the tab bar title." }, "libraries": { "oneOf": [ { "type": "object", "additionalProperties": { "$ref": "#/definitions/docs.LibraryConfiguration" } }, { "type": "null" } ], "description": "Configuration for library documentation generation. Each library entry defines\na source repository and output location for generated MDX documentation.\n\nExample:\n```yaml\nlibraries:\n my-sdk:\n input:\n git: https://github.com/acme/sdk-python\n subpath: src/sdk\n output:\n path: ./static/sdk-docs\n lang: python\n```" }, "analytics": { "oneOf": [ { "$ref": "#/definitions/docs.AnalyticsConfig" }, { "type": "null" } ], "description": "The `analytics` object allows you to configure analytics for your docs site.\nCurrently, only Segment is supported." }, "announcement": { "oneOf": [ { "$ref": "#/definitions/docs.AnnouncementConfig" }, { "type": "null" } ] }, "roles": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.RoleId" } }, { "type": "null" } ], "description": "Global list of roles that can be used to filter the navigation and content based on the user's session." }, "tabs": { "oneOf": [ { "type": "object", "additionalProperties": { "$ref": "#/definitions/docs.TabConfig" } }, { "type": "null" } ] }, "versions": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.VersionConfig" } }, { "type": "null" } ] }, "products": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.ProductConfig" } }, { "type": "null" } ] }, "landing-page": { "oneOf": [ { "$ref": "#/definitions/docs.PageConfiguration" }, { "type": "null" } ], "description": "Creates a landing page for your documentation website." }, "navigation": { "oneOf": [ { "$ref": "#/definitions/docs.NavigationConfig" }, { "type": "null" } ], "description": "The navigation config is skipped when multiple versions are present." }, "navbar-links": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.NavbarLink" } }, { "type": "null" } ] }, "footer-links": { "oneOf": [ { "$ref": "#/definitions/docs.FooterLinksConfig" }, { "type": "null" } ] }, "page-actions": { "oneOf": [ { "$ref": "#/definitions/docs.PageActionsConfig" }, { "type": "null" } ] }, "global-theme": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Name of a global theme stored in Fern's cloud to apply to this documentation site.\nTheme values override local branding configuration (colors, typography, logo, fonts, JS, CSS, etc.).\nUpload a theme first with: fern beta docs theme upload --name " }, "experimental": { "oneOf": [ { "$ref": "#/definitions/docs.ExperimentalConfig" }, { "type": "null" } ] }, "default-language": { "oneOf": [ { "$ref": "#/definitions/docs.ProgrammingLanguage" }, { "type": "null" } ], "description": "Sets the default language displayed by code snippets in the API Reference.\nOptions include: typescript, python, java, go, ruby, csharp, php, swift, curl" }, "languages": { "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "translations": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.TranslationConfig" } }, { "type": "null" } ], "description": "Configuration for multi-language documentation. Each entry defines a locale\nthat the documentation supports. Use the `translations/` directory alongside\n`docs.yml` to provide per-language content.\n\nExample (object syntax):\n```yaml\ntranslations:\n - lang: en\n default: true\n - lang: ja\n - lang: fr\n```\n\nExample (simplified syntax):\n```yaml\ntranslations:\n - en\n - ja\n - fr\n```\n\nYou can mix both syntaxes:\n```yaml\ntranslations:\n - lang: en\n default: true\n - ja\n - fr\n```" }, "ai-chat": { "oneOf": [ { "$ref": "#/definitions/docs.AIChatConfig" }, { "type": "null" } ] }, "ai-search": { "oneOf": [ { "$ref": "#/definitions/docs.AIChatConfig" }, { "type": "null" } ] }, "ai-examples": { "oneOf": [ { "$ref": "#/definitions/docs.AiExamplesConfig" }, { "type": "null" } ], "description": "Configure AI-powered example enhancement for API documentation. When enabled, API examples will be enhanced with AI-generated content to provide more comprehensive and realistic examples." }, "agents": { "oneOf": [ { "$ref": "#/definitions/docs.AgentsConfig" }, { "type": "null" } ], "description": "Configuration for agent-serving endpoints." }, "metadata": { "oneOf": [ { "$ref": "#/definitions/docs.MetadataConfig" }, { "type": "null" } ] }, "redirects": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.RedirectConfig" } }, { "type": "null" } ] }, "check": { "oneOf": [ { "$ref": "#/definitions/docs.CheckConfig" }, { "type": "null" } ] }, "logo": { "oneOf": [ { "$ref": "#/definitions/docs.LogoConfiguration" }, { "type": "null" } ] }, "favicon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Relative filepath to the favicon." }, "background-image": { "oneOf": [ { "$ref": "#/definitions/docs.BackgroundImageConfiguration" }, { "type": "null" } ] }, "colors": { "oneOf": [ { "$ref": "#/definitions/docs.ColorsConfiguration" }, { "type": "null" } ] }, "typography": { "oneOf": [ { "$ref": "#/definitions/docs.DocsTypographyConfig" }, { "type": "null" } ] }, "layout": { "oneOf": [ { "$ref": "#/definitions/docs.LayoutConfig" }, { "type": "null" } ] }, "settings": { "oneOf": [ { "$ref": "#/definitions/docs.DocsSettingsConfig" }, { "type": "null" } ] }, "theme": { "oneOf": [ { "$ref": "#/definitions/docs.ThemeConfig" }, { "type": "null" } ] }, "integrations": { "oneOf": [ { "$ref": "#/definitions/docs.IntegrationsConfig" }, { "type": "null" } ] }, "css": { "oneOf": [ { "$ref": "#/definitions/docs.CssConfig" }, { "type": "null" } ] }, "js": { "oneOf": [ { "$ref": "#/definitions/docs.JsConfig" }, { "type": "null" } ] }, "header": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Relative filepath to a custom React component (TSX/JSX) that replaces the default header.\nThe component must have a default export." }, "footer": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Relative filepath to a custom React component (TSX/JSX) that replaces the default footer.\nThe component must have a default export." } }, "required": [ "instances" ], "additionalProperties": false, "definitions": { "docs.CustomDomain": { "anyOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] }, "docs.GithubEditThisPageConfig": { "type": "object", "properties": { "host": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "@default: `github.com`" }, "owner": { "type": "string", "description": "The GitHub organization that owns the documentation repository." }, "repo": { "type": "string", "description": "The name of the GitHub repository containing your fern folder." }, "branch": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The branch of the repository you would like the GitHub editor to open a PR to. Default is `main`." } }, "required": [ "owner", "repo" ], "additionalProperties": false }, "docs.EditThisPageLaunch": { "type": "string", "enum": [ "github", "dashboard" ] }, "docs.EditThisPageConfig": { "type": "object", "properties": { "github": { "oneOf": [ { "$ref": "#/definitions/docs.GithubEditThisPageConfig" }, { "type": "null" } ] }, "launch": { "oneOf": [ { "$ref": "#/definitions/docs.EditThisPageLaunch" }, { "type": "null" } ], "description": "The launch method for \"Edit this page\" button. Defaults to github." } }, "additionalProperties": false }, "docs.AudienceId": { "type": "string", "description": "ID of audience which is used to filter the API spec." }, "docs.Audience": { "anyOf": [ { "$ref": "#/definitions/docs.AudienceId" }, { "type": "array", "items": { "$ref": "#/definitions/docs.AudienceId" } } ], "description": "Audience can either be a string or list of strings\ni.e. `audiences: internal` or `audiences: [internal, beta]`" }, "docs.DocsInstance": { "type": "object", "properties": { "url": { "type": "string", "description": "The URL where your Fern documentation is deployed. Must contain the suffix `docs.buildwithfern.com`." }, "custom-domain": { "oneOf": [ { "$ref": "#/definitions/docs.CustomDomain" }, { "type": "null" } ], "description": "The custom domain where your documentation is hosted. Learn more about setting up a custom domain." }, "edit-this-page": { "oneOf": [ { "$ref": "#/definitions/docs.EditThisPageConfig" }, { "type": "null" } ], "description": "If specified, adds an \"Edit this page\" link to the bottom of each page that links to the given public GitHub repository." }, "audiences": { "oneOf": [ { "$ref": "#/definitions/docs.Audience" }, { "type": "null" } ], "description": "Specify which audiences this instance serves (e.g., internal developers, beta testers, public customers).\nYou can use audiences to control which versions and products appear in each documentation instance, enabling you to create separate sites for different user groups. Content is included when its audience tag matches the instance audience. Content without an audience tag is included by default." }, "multi-source": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When enabled, docs registration uses a basepath-aware S3 key format, allowing multiple independent doc sites to be hosted under the same custom domain with different basepaths. If true, the url and custom-domain must share the same basepath." } }, "required": [ "url" ], "additionalProperties": false }, "docs.GitLibraryInputSchema": { "type": "object", "properties": { "git": { "type": "string", "description": "GitHub URL to the repository containing the library source code.\nExample: https://github.com/django/django" }, "subpath": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Optional path within the repository to the library source.\nExample: django/core" }, "ref": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Git ref (branch, tag, or commit SHA) to check out.\nDefaults to the repository's default branch when omitted.\nExample: feature/my-fix" } }, "required": [ "git" ], "additionalProperties": false, "description": "Configuration for fetching library source from a Git repository." }, "docs.PathLibraryInputSchema": { "type": "object", "properties": { "path": { "type": "string", "description": "Local filesystem path to the library source.\nExample: ./src/my-library" } }, "required": [ "path" ], "additionalProperties": false, "description": "Configuration for using a local filesystem path as library source. (Not yet implemented)" }, "docs.LibraryInputConfiguration": { "anyOf": [ { "$ref": "#/definitions/docs.GitLibraryInputSchema" }, { "$ref": "#/definitions/docs.PathLibraryInputSchema" } ], "description": "Configuration for the library source location." }, "docs.LibraryOutputConfiguration": { "type": "object", "properties": { "path": { "type": "string", "description": "The output directory where MDX files will be generated.\nExample: ./static/sdk-docs" } }, "required": [ "path" ], "additionalProperties": false, "description": "Configuration for the library documentation output." }, "docs.LibraryLanguage": { "type": "string", "enum": [ "python", "cpp" ], "description": "The programming language of the library source code." }, "docs.LibraryConfig": { "type": "object", "properties": { "doxyfile": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Path to a Doxyfile for C++ library documentation, relative to the fern/ directory.\nWhen provided, the backend uses this Doxyfile instead of auto-generating one.\nOnly valid when lang is cpp." } }, "additionalProperties": false, "description": "Language-specific configuration for library documentation.\nValid fields depend on the `lang` value of the parent LibraryConfiguration." }, "docs.LibraryConfiguration": { "type": "object", "properties": { "input": { "$ref": "#/definitions/docs.LibraryInputConfiguration", "description": "Configuration for the library source location." }, "output": { "$ref": "#/definitions/docs.LibraryOutputConfiguration", "description": "Configuration for the library documentation output." }, "lang": { "$ref": "#/definitions/docs.LibraryLanguage", "description": "The programming language of the library source code." }, "config": { "oneOf": [ { "$ref": "#/definitions/docs.LibraryConfig" }, { "type": "null" } ], "description": "Language-specific configuration options. Valid fields depend on the lang value." } }, "required": [ "input", "output", "lang" ], "additionalProperties": false, "description": "Configuration for a library documentation source.\nUsed by `fern docs md generate` to generate MDX files from library source code." }, "docs.SegmentConfig": { "type": "object", "properties": { "write-key": { "type": "string" } }, "required": [ "write-key" ], "additionalProperties": false }, "docs.FullStoryAnalyticsConfig": { "type": "object", "properties": { "org-id": { "type": "string" } }, "required": [ "org-id" ], "additionalProperties": false }, "docs.IntercomConfig": { "type": "object", "properties": { "app-id": { "type": "string" }, "api-base": { "oneOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "app-id" ], "additionalProperties": false }, "docs.PostHogConfig": { "type": "object", "properties": { "api-key": { "type": "string", "description": "Your PostHog project API key. Defaults to the api-host of \"https://us.i.posthog.com\"." }, "endpoint": { "oneOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "api-key" ], "additionalProperties": false }, "docs.GTMConfig": { "type": "object", "properties": { "container-id": { "type": "string", "description": "Your Google Tag Manager container ID. Must start with \"GTM-\"." } }, "required": [ "container-id" ], "additionalProperties": false }, "docs.GoogleAnalytics4Config": { "type": "object", "properties": { "measurement-id": { "type": "string", "description": "Your Google Analytics 4 measurement ID. Must start with \"G-\"." } }, "required": [ "measurement-id" ], "additionalProperties": false }, "docs.AnalyticsConfig": { "type": "object", "properties": { "segment": { "oneOf": [ { "$ref": "#/definitions/docs.SegmentConfig" }, { "type": "null" } ] }, "fullstory": { "oneOf": [ { "$ref": "#/definitions/docs.FullStoryAnalyticsConfig" }, { "type": "null" } ] }, "intercom": { "oneOf": [ { "$ref": "#/definitions/docs.IntercomConfig" }, { "type": "null" } ] }, "posthog": { "oneOf": [ { "$ref": "#/definitions/docs.PostHogConfig" }, { "type": "null" } ] }, "gtm": { "oneOf": [ { "$ref": "#/definitions/docs.GTMConfig" }, { "type": "null" } ] }, "ga4": { "oneOf": [ { "$ref": "#/definitions/docs.GoogleAnalytics4Config" }, { "type": "null" } ] } }, "additionalProperties": false }, "docs.AnnouncementConfig": { "type": "object", "properties": { "message": { "type": "string", "description": "The message to display in the announcement bar. Markdown is supported." } }, "required": [ "message" ], "additionalProperties": false }, "docs.RoleId": { "type": "string", "description": "ID of role which is used to filter the content shown in Fern Docs." }, "docs.Role": { "anyOf": [ { "$ref": "#/definitions/docs.RoleId" }, { "type": "array", "items": { "$ref": "#/definitions/docs.RoleId" } } ], "description": "Audience can either be a string or list of strings\ni.e. `audience: internal` or `audience: [internal, beta]`" }, "docs.FeatureFlag": { "type": "object", "properties": { "flag": { "type": "string", "description": "The name of the feature flag to check." }, "fallback-value": { "oneOf": [ { "type": [ "string", "number", "boolean", "object", "array", "null" ] }, { "type": "null" } ], "description": "The default value to use if the feature flag is not set. If not specified, defaults to false." }, "match": { "oneOf": [ { "type": [ "string", "number", "boolean", "object", "array", "null" ] }, { "type": "null" } ], "description": "The value that the feature flag should match for the content to be shown. If not specified, content is shown when the flag is true." } }, "required": [ "flag" ], "additionalProperties": false }, "docs.FeatureFlagConfiguration": { "anyOf": [ { "type": "string", "description": "The name of the feature flag, We assume that it is a boolean feature flag that needs to be evaluated to true." }, { "$ref": "#/definitions/docs.FeatureFlag", "description": "A single feature flag with a configurable name, fallback value, and match value. Especially useful for non boolean feature flags." }, { "type": "array", "items": { "$ref": "#/definitions/docs.FeatureFlag" }, "description": "A list of feature flags. If any of the feature flags are satisfied, we will show all content." } ] }, "docs.Target": { "type": "string", "enum": [ "_blank", "_self", "_parent", "_top" ] }, "docs.ChangelogFolderRelativePath": { "type": "string", "description": "The relative path to a folder containing markdown files broken down by date.\n\nExample:\n```\nchangelog: \"changelog\"\n```\n\nThis will look for markdown files in the `/fern/changelog` directory, which should contain files named like\n- `/fern/changelog/2024-04-29.mdx`.\n- `/fern/changelog/2023-01-02.mdx`." }, "docs.TabConfig": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "display-name": { "type": "string" }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "skip-slug": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "hidden": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "href": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "If `href` is set, clicking on the tab will redirect to the given URL.\n\nTabs with `href` must not have children in the navigation config." }, "target": { "oneOf": [ { "$ref": "#/definitions/docs.Target" }, { "type": "null" } ] }, "changelog": { "oneOf": [ { "$ref": "#/definitions/docs.ChangelogFolderRelativePath" }, { "type": "null" } ] } }, "required": [ "display-name" ], "additionalProperties": false }, "docs.VersionAvailability": { "type": "string", "enum": [ "deprecated", "legacy", "ga", "stable", "beta", "alpha", "preview" ] }, "docs.VersionConfig": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "display-name": { "type": "string" }, "path": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The relative path to the version's docs.yml file. Required unless `ref` is set,\nin which case the version's content is built from that git ref." }, "ref": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "A git ref—branch, tag, or commit SHA—whose committed content is built for this\nversion. Branches are mutable and resolve to their latest commit on the remote;\ntags and commit SHAs are immutable." }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The \"slug\" is this version's basePath. If not set, the slug will be generated from the display-name." }, "availability": { "oneOf": [ { "$ref": "#/definitions/docs.VersionAvailability" }, { "type": "null" } ], "description": "If `availability` is set to `deprecated`, Fern will display a warning banner on the docs site." }, "audiences": { "oneOf": [ { "$ref": "#/definitions/docs.Audience" }, { "type": "null" } ] }, "hidden": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If true, this version will be hidden from navigation, search, and indexing, but still accessible via direct URL." }, "announcement": { "oneOf": [ { "$ref": "#/definitions/docs.AnnouncementConfig" }, { "type": "null" } ] } }, "required": [ "display-name" ], "additionalProperties": false }, "docs.InternalProduct": { "type": "object", "properties": { "display-name": { "type": "string" }, "subtitle": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "image": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The image to display in the product card. This will override the icon field if both are set." }, "versions": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.VersionConfig" } }, { "type": "null" } ] }, "audiences": { "oneOf": [ { "$ref": "#/definitions/docs.Audience" }, { "type": "null" } ] }, "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "path": { "type": "string", "description": "The relative path to the version's docs.yml file." }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The \"slug\" is this version's basePath. If not set, the slug will be generated from the display-name." }, "announcement": { "oneOf": [ { "$ref": "#/definitions/docs.AnnouncementConfig" }, { "type": "null" } ] } }, "required": [ "display-name", "path" ], "additionalProperties": false }, "docs.ExternalProduct": { "type": "object", "properties": { "display-name": { "type": "string" }, "subtitle": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "image": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The image to display in the product card. This will override the icon field if both are set." }, "versions": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.VersionConfig" } }, { "type": "null" } ] }, "audiences": { "oneOf": [ { "$ref": "#/definitions/docs.Audience" }, { "type": "null" } ] }, "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "href": { "type": "string", "description": "The absolute URL to the product." }, "target": { "oneOf": [ { "$ref": "#/definitions/docs.Target" }, { "type": "null" } ], "description": "The target of the URL" } }, "required": [ "display-name", "href" ], "additionalProperties": false }, "docs.ProductConfig": { "anyOf": [ { "$ref": "#/definitions/docs.InternalProduct" }, { "$ref": "#/definitions/docs.ExternalProduct" } ] }, "docs.Availability": { "type": "string", "enum": [ "stable", "generally-available", "in-development", "pre-release", "deprecated", "beta", "alpha", "preview", "legacy" ] }, "docs.PageConfiguration": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "page": { "type": "string" }, "path": { "type": "string" }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "hidden": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "noindex": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "availability": { "oneOf": [ { "$ref": "#/definitions/docs.Availability" }, { "type": "null" } ] } }, "required": [ "page", "path" ], "additionalProperties": false }, "docs.CollapsedStringValue": { "type": "string", "enum": [ "open-by-default" ] }, "docs.CollapsedValue": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/docs.CollapsedStringValue" } ] }, "docs.SectionConfiguration": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "section": { "type": "string" }, "path": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The relative path to the markdown file that will be displayed when the section is clicked." }, "contents": { "type": "array", "items": { "$ref": "#/definitions/docs.NavigationItem" } }, "collapsed": { "oneOf": [ { "$ref": "#/definitions/docs.CollapsedValue" }, { "type": "null" } ], "description": "Deprecated. Use `collapsible` and `collapsed-by-default` instead." }, "collapsible": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Whether the section can be expanded/collapsed by the user." }, "collapsed-by-default": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Whether the section starts collapsed. Only meaningful when `collapsible` is true. Defaults to false (starts open)." }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "hidden": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "skip-slug": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "availability": { "oneOf": [ { "$ref": "#/definitions/docs.Availability" }, { "type": "null" } ] } }, "required": [ "section", "contents" ], "additionalProperties": false }, "docs.VersionedSnippetLanguageConfiguration": { "type": "object", "properties": { "version": { "type": "string" }, "package": { "type": "string" } }, "required": [ "version", "package" ], "additionalProperties": false }, "docs.SnippetLanguageConfiguration": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/docs.VersionedSnippetLanguageConfiguration" } ], "description": "This snippets config object is meant to allow users to specify a specific package for the snippets,\nand optionally a version for that package. If you pass in a string, that should be the name of the package." }, "docs.SnippetsConfiguration": { "type": "object", "properties": { "python": { "oneOf": [ { "$ref": "#/definitions/docs.SnippetLanguageConfiguration" }, { "type": "null" } ] }, "typescript": { "oneOf": [ { "$ref": "#/definitions/docs.SnippetLanguageConfiguration" }, { "type": "null" } ] }, "go": { "oneOf": [ { "$ref": "#/definitions/docs.SnippetLanguageConfiguration" }, { "type": "null" } ] }, "java": { "oneOf": [ { "$ref": "#/definitions/docs.SnippetLanguageConfiguration" }, { "type": "null" } ] }, "ruby": { "oneOf": [ { "$ref": "#/definitions/docs.SnippetLanguageConfiguration" }, { "type": "null" } ] }, "csharp": { "oneOf": [ { "$ref": "#/definitions/docs.SnippetLanguageConfiguration" }, { "type": "null" } ] }, "php": { "oneOf": [ { "$ref": "#/definitions/docs.SnippetLanguageConfiguration" }, { "type": "null" } ] }, "swift": { "oneOf": [ { "$ref": "#/definitions/docs.SnippetLanguageConfiguration" }, { "type": "null" } ] }, "rust": { "oneOf": [ { "$ref": "#/definitions/docs.SnippetLanguageConfiguration" }, { "type": "null" } ] } }, "additionalProperties": false }, "docs.PlaygroundButtonSettings": { "type": "object", "properties": { "href": { "oneOf": [ { "type": "string" }, { "type": "null" } ] } }, "additionalProperties": false }, "docs.PlaygroundSettings": { "type": "object", "properties": { "hidden": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "environments": { "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ], "description": "A list of environment IDs that are allowed to be used in the playground. If not provided, all environments are allowed. And if the provided list is empty, the playground should be disabled." }, "button": { "oneOf": [ { "$ref": "#/definitions/docs.PlaygroundButtonSettings" }, { "type": "null" } ] }, "oauth": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "limit-websocket-messages-per-connection": { "oneOf": [ { "type": "integer" }, { "type": "null" } ], "description": "The maximum number of websocket messages per connection in the playground." }, "send-optional-defaults": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When true, optional parameters that declare a default (or x-fern-default) are\npre-filled and sent from the API Explorer playground. Defaults to false." } }, "additionalProperties": false }, "docs.ApiReferencePackageConfigurationWithOptions": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "title": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "summary": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Relative path to the markdown file. This summary is displayed at the top of the API section." }, "contents": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.ApiReferenceLayoutItem" } }, { "type": "null" } ] }, "availability": { "oneOf": [ { "$ref": "#/definitions/docs.Availability" }, { "type": "null" } ] }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "hidden": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "skip-slug": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "playground": { "oneOf": [ { "$ref": "#/definitions/docs.PlaygroundSettings" }, { "type": "null" } ], "description": "Settings for the api playground that is applied only to descendants of this api package." } }, "additionalProperties": false }, "docs.ApiReferencePackageConfiguration": { "anyOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.ApiReferenceLayoutItem" } }, { "$ref": "#/definitions/docs.ApiReferencePackageConfigurationWithOptions" } ] }, "docs.ApiReferenceSectionConfiguration": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "section": { "type": "string", "description": "The title of the api package that will be displayed in the sidebar." }, "referenced-packages": { "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ], "description": "This section will inherit the endpoints from the specified subpackage(s). If multiple packages are specified, they will be merged." }, "summary": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Relative path to the markdown file." }, "contents": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.ApiReferenceLayoutItem" } }, { "type": "null" } ] }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "hidden": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "skip-slug": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "collapsed": { "oneOf": [ { "$ref": "#/definitions/docs.CollapsedValue" }, { "type": "null" } ], "description": "Deprecated. Use `collapsible` and `collapsed-by-default` instead." }, "collapsible": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Whether the section can be expanded/collapsed by the user in the sidebar." }, "collapsed-by-default": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Whether the section starts collapsed. Only meaningful when collapsible is true." }, "availability": { "oneOf": [ { "$ref": "#/definitions/docs.Availability" }, { "type": "null" } ] }, "playground": { "oneOf": [ { "$ref": "#/definitions/docs.PlaygroundSettings" }, { "type": "null" } ], "description": "Settings for the api playground that affects all endpoints." } }, "required": [ "section" ], "additionalProperties": false }, "docs.ApiReferenceEndpointConfiguration": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "endpoint": { "type": "string" }, "title": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "hidden": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "availability": { "oneOf": [ { "$ref": "#/definitions/docs.Availability" }, { "type": "null" } ] }, "playground": { "oneOf": [ { "$ref": "#/definitions/docs.PlaygroundSettings" }, { "type": "null" } ], "description": "Settings for the api playground that affect this endpoint specifically." } }, "required": [ "endpoint" ], "additionalProperties": false }, "docs.ApiReferenceOperationConfiguration": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "operation": { "type": "string" }, "title": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "hidden": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "availability": { "oneOf": [ { "$ref": "#/definitions/docs.Availability" }, { "type": "null" } ] } }, "required": [ "operation" ], "additionalProperties": false, "description": "Defines a GraphQL-native schema for selecting operations (REST -> Endpoint === GraphQL -> Operation)" }, "docs.LinkConfiguration": { "type": "object", "properties": { "link": { "type": "string" }, "href": { "type": "string" }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "target": { "oneOf": [ { "$ref": "#/definitions/docs.Target" }, { "type": "null" } ] } }, "required": [ "link", "href" ], "additionalProperties": false }, "docs.ApiReferenceLayoutItem": { "anyOf": [ { "type": "string", "description": "This should be either an endpoint, websocket, webhook, or subpackage ID" }, { "type": "object", "additionalProperties": { "$ref": "#/definitions/docs.ApiReferencePackageConfiguration" }, "description": "Keyed by subpackage name, this object allows you to group endpoints and pages together." }, { "$ref": "#/definitions/docs.ApiReferenceSectionConfiguration" }, { "$ref": "#/definitions/docs.ApiReferenceEndpointConfiguration" }, { "$ref": "#/definitions/docs.ApiReferenceOperationConfiguration" }, { "$ref": "#/definitions/docs.PageConfiguration" }, { "$ref": "#/definitions/docs.LinkConfiguration" } ], "description": "Use the `layout` object to customize the order that your API endpoints\nare displayed in the docs site." }, "docs.ApiReferenceConfiguration": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "api": { "type": "string" }, "api-name": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Name of API that we are referencing" }, "openrpc": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Path to an openrpc spec." }, "audiences": { "oneOf": [ { "$ref": "#/definitions/docs.Audience" }, { "type": "null" } ] }, "display-errors": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Defaults to false" }, "tag-description-pages": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If true, a page will be created for each tag in the OpenAPI spec that contains a description." }, "snippets": { "oneOf": [ { "$ref": "#/definitions/docs.SnippetsConfiguration" }, { "type": "null" } ] }, "postman": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to a Postman collection for this API reference" }, "summary": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Relative path to the markdown file" }, "layout": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.ApiReferenceLayoutItem" } }, { "type": "null" } ], "description": "Advanced usage: when specified, this object will be used to customize the order that your API endpoints are displayed in the docs site, including subpackages, and additional markdown pages (to be rendered in between API endpoints). If not specified, the order will be inferred from the OpenAPI Spec or Fern Definition." }, "collapsed": { "oneOf": [ { "$ref": "#/definitions/docs.CollapsedValue" }, { "type": "null" } ] }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "hidden": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "availability": { "oneOf": [ { "$ref": "#/definitions/docs.Availability" }, { "type": "null" } ] }, "skip-slug": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "alphabetized": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If `alphabetized` is set to true, packages and endpoints will be sorted alphabetically, unless explicitly ordered in the `layout` object." }, "flattened": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If `flattened` is set to true, the title specified in `api` will be hidden, and its endpoints and subpackages won't be grouped under it.\n\nThis setting is useful if the API reference is short and you want to display all endpoints at the top level." }, "paginated": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If true, the API reference will be paginated rather than displayed in a single page (long-scrolling)." }, "playground": { "oneOf": [ { "$ref": "#/definitions/docs.PlaygroundSettings" }, { "type": "null" } ], "description": "Settings for the api playground that affects all endpoints." } }, "required": [ "api" ], "additionalProperties": false }, "docs.LibraryName": { "type": "string", "description": "The name identifier for a library. Used to reference the library in navigation." }, "docs.LibraryReferenceConfiguration": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "library": { "$ref": "#/definitions/docs.LibraryName", "description": "The name of the library to reference (must match a key in the `libraries` section)." }, "title": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Override the display title for this library reference." }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Override the URL slug for this library reference." } }, "required": [ "library" ], "additionalProperties": false, "description": "References a library defined in the `libraries` section.\nThe library's generated navigation will be injected at this point." }, "docs.ChangelogConfiguration": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "changelog": { "$ref": "#/definitions/docs.ChangelogFolderRelativePath" }, "title": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "hidden": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] } }, "required": [ "changelog" ], "additionalProperties": false }, "docs.TitleSource": { "type": "string", "enum": [ "frontmatter", "filename" ] }, "docs.FolderConfiguration": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "folder": { "type": "string", "description": "The relative path to a folder containing markdown files. Fern will automatically discover and add all markdown files from this folder to the navigation." }, "title": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The title to display for this folder section. If not provided, the folder name will be used." }, "title-source": { "oneOf": [ { "$ref": "#/definitions/docs.TitleSource" }, { "type": "null" } ], "description": "Determines how page titles are derived for files in this folder. Options are `frontmatter` (use the `title` field from the file's frontmatter) or `filename` (derive title from the file name). Defaults to `filename`." }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "hidden": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "skip-slug": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "collapsed": { "oneOf": [ { "$ref": "#/definitions/docs.CollapsedValue" }, { "type": "null" } ], "description": "Deprecated. Use `collapsible` and `collapsed-by-default` instead." }, "collapsible": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Whether the section can be expanded/collapsed by the user." }, "collapsed-by-default": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Whether the section starts collapsed. Only meaningful when `collapsible` is true. Defaults to false (starts open)." }, "availability": { "oneOf": [ { "$ref": "#/definitions/docs.Availability" }, { "type": "null" } ] } }, "required": [ "folder" ], "additionalProperties": false }, "docs.NavigationItem": { "anyOf": [ { "$ref": "#/definitions/docs.PageConfiguration" }, { "$ref": "#/definitions/docs.SectionConfiguration" }, { "$ref": "#/definitions/docs.ApiReferenceConfiguration" }, { "$ref": "#/definitions/docs.LibraryReferenceConfiguration" }, { "$ref": "#/definitions/docs.LinkConfiguration" }, { "$ref": "#/definitions/docs.ChangelogConfiguration" }, { "$ref": "#/definitions/docs.FolderConfiguration" } ] }, "docs.UntabbedNavigationConfig": { "type": "array", "items": { "$ref": "#/definitions/docs.NavigationItem" } }, "docs.TabId": { "type": "string" }, "docs.TabbedNavigationItemWithLayout": { "type": "object", "properties": { "tab": { "$ref": "#/definitions/docs.TabId" }, "layout": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.NavigationItem" } }, { "type": "null" } ], "description": "If `href` is set, `layout` must be null." } }, "required": [ "tab" ], "additionalProperties": false }, "docs.TabVariant": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "orphaned": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `orphaned` is set to `true`, the roles will not inherit from parents." }, "feature-flag": { "oneOf": [ { "$ref": "#/definitions/docs.FeatureFlagConfiguration" }, { "type": "null" } ] }, "title": { "type": "string" }, "subtitle": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "layout": { "type": "array", "items": { "$ref": "#/definitions/docs.NavigationItem" } }, "slug": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "skip-slug": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "hidden": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "default": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] } }, "required": [ "title", "layout" ], "additionalProperties": false }, "docs.TabbedNavigationItemWithVariants": { "type": "object", "properties": { "tab": { "$ref": "#/definitions/docs.TabId" }, "variants": { "type": "array", "items": { "$ref": "#/definitions/docs.TabVariant" } } }, "required": [ "tab", "variants" ], "additionalProperties": false }, "docs.TabbedNavigationItem": { "anyOf": [ { "$ref": "#/definitions/docs.TabbedNavigationItemWithLayout" }, { "$ref": "#/definitions/docs.TabbedNavigationItemWithVariants" } ] }, "docs.TabbedNavigationConfig": { "type": "array", "items": { "$ref": "#/definitions/docs.TabbedNavigationItem" } }, "docs.NavigationConfig": { "anyOf": [ { "$ref": "#/definitions/docs.UntabbedNavigationConfig" }, { "$ref": "#/definitions/docs.TabbedNavigationConfig" } ] }, "docs.NavbarGithubConfigWithOptions": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "url": { "type": "string" }, "target": { "oneOf": [ { "$ref": "#/definitions/docs.Target" }, { "type": "null" } ] } }, "required": [ "url" ], "additionalProperties": false }, "docs.NavbarGithubConfig": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/docs.NavbarGithubConfigWithOptions" } ] }, "docs.NavbarLinkConfig": { "type": "object", "properties": { "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "href": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The URL once you click on the button.\nExample: https://buildwithfern.com/contact" }, "target": { "oneOf": [ { "$ref": "#/definitions/docs.Target" }, { "type": "null" } ] }, "url": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Use `href` instead." }, "text": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Text inside the button." }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The icon to be used in the button. This icon will appear to the **left** of the text content.\nIcons can be in three formats:\n- **Font Awesome icons**: Use icon names like `fa-solid fa-rocket`. Pro and Brand Icons from Font Awesome are supported.\n- **Custom image files**: Use relative paths to image files (e.g., `./assets/icons/my-icon.svg` or `../assets/icons/my-icon.png`). Paths are relative to the `docs.yml` file.\n- **Inline SVG**: Provide an SVG string wrapped in quotes (e.g., `\"...\"`)." }, "rightIcon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The icon to be used in the button. This icon will appear to the **right** of the text content.\nIcons can be in three formats:\n- **Font Awesome icons**: Use icon names like `fa-solid fa-rocket`. Pro and Brand Icons from Font Awesome are supported.\n- **Custom image files**: Use relative paths to image files (e.g., `./assets/icons/my-icon.svg` or `../assets/icons/my-icon.png`). Paths are relative to the `docs.yml` file.\n- **Inline SVG**: Provide an SVG string wrapped in quotes (e.g., `\"...\"`).\n\nBy default, the `rightIcon` for a `filled` button is set to `arrow-right`." }, "rounded": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `true`, the border radius of the button will be fully rounded." } }, "additionalProperties": false }, "docs.NavbarLink": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "filled", "outlined", "minimal", "github", "dropdown", "primary", "secondary" ] } }, "oneOf": [ { "properties": { "type": { "const": "filled" }, "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "href": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The URL once you click on the button.\nExample: https://buildwithfern.com/contact" }, "target": { "oneOf": [ { "$ref": "#/definitions/docs.Target" }, { "type": "null" } ] }, "url": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Use `href` instead." }, "text": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Text inside the button." }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The icon to be used in the button. This icon will appear to the **left** of the text content.\nIcons can be in three formats:\n- **Font Awesome icons**: Use icon names like `fa-solid fa-rocket`. Pro and Brand Icons from Font Awesome are supported.\n- **Custom image files**: Use relative paths to image files (e.g., `./assets/icons/my-icon.svg` or `../assets/icons/my-icon.png`). Paths are relative to the `docs.yml` file.\n- **Inline SVG**: Provide an SVG string wrapped in quotes (e.g., `\"...\"`)." }, "rightIcon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The icon to be used in the button. This icon will appear to the **right** of the text content.\nIcons can be in three formats:\n- **Font Awesome icons**: Use icon names like `fa-solid fa-rocket`. Pro and Brand Icons from Font Awesome are supported.\n- **Custom image files**: Use relative paths to image files (e.g., `./assets/icons/my-icon.svg` or `../assets/icons/my-icon.png`). Paths are relative to the `docs.yml` file.\n- **Inline SVG**: Provide an SVG string wrapped in quotes (e.g., `\"...\"`).\n\nBy default, the `rightIcon` for a `filled` button is set to `arrow-right`." }, "rounded": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `true`, the border radius of the button will be fully rounded." } }, "required": [ "type" ] }, { "properties": { "type": { "const": "outlined" }, "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "href": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The URL once you click on the button.\nExample: https://buildwithfern.com/contact" }, "target": { "oneOf": [ { "$ref": "#/definitions/docs.Target" }, { "type": "null" } ] }, "url": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Use `href` instead." }, "text": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Text inside the button." }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The icon to be used in the button. This icon will appear to the **left** of the text content.\nIcons can be in three formats:\n- **Font Awesome icons**: Use icon names like `fa-solid fa-rocket`. Pro and Brand Icons from Font Awesome are supported.\n- **Custom image files**: Use relative paths to image files (e.g., `./assets/icons/my-icon.svg` or `../assets/icons/my-icon.png`). Paths are relative to the `docs.yml` file.\n- **Inline SVG**: Provide an SVG string wrapped in quotes (e.g., `\"...\"`)." }, "rightIcon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The icon to be used in the button. This icon will appear to the **right** of the text content.\nIcons can be in three formats:\n- **Font Awesome icons**: Use icon names like `fa-solid fa-rocket`. Pro and Brand Icons from Font Awesome are supported.\n- **Custom image files**: Use relative paths to image files (e.g., `./assets/icons/my-icon.svg` or `../assets/icons/my-icon.png`). Paths are relative to the `docs.yml` file.\n- **Inline SVG**: Provide an SVG string wrapped in quotes (e.g., `\"...\"`).\n\nBy default, the `rightIcon` for a `filled` button is set to `arrow-right`." }, "rounded": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `true`, the border radius of the button will be fully rounded." } }, "required": [ "type" ] }, { "properties": { "type": { "const": "minimal" }, "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "href": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The URL once you click on the button.\nExample: https://buildwithfern.com/contact" }, "target": { "oneOf": [ { "$ref": "#/definitions/docs.Target" }, { "type": "null" } ] }, "url": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Use `href` instead." }, "text": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Text inside the button." }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The icon to be used in the button. This icon will appear to the **left** of the text content.\nIcons can be in three formats:\n- **Font Awesome icons**: Use icon names like `fa-solid fa-rocket`. Pro and Brand Icons from Font Awesome are supported.\n- **Custom image files**: Use relative paths to image files (e.g., `./assets/icons/my-icon.svg` or `../assets/icons/my-icon.png`). Paths are relative to the `docs.yml` file.\n- **Inline SVG**: Provide an SVG string wrapped in quotes (e.g., `\"...\"`)." }, "rightIcon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The icon to be used in the button. This icon will appear to the **right** of the text content.\nIcons can be in three formats:\n- **Font Awesome icons**: Use icon names like `fa-solid fa-rocket`. Pro and Brand Icons from Font Awesome are supported.\n- **Custom image files**: Use relative paths to image files (e.g., `./assets/icons/my-icon.svg` or `../assets/icons/my-icon.png`). Paths are relative to the `docs.yml` file.\n- **Inline SVG**: Provide an SVG string wrapped in quotes (e.g., `\"...\"`).\n\nBy default, the `rightIcon` for a `filled` button is set to `arrow-right`." }, "rounded": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `true`, the border radius of the button will be fully rounded." } }, "required": [ "type" ] }, { "properties": { "type": { "const": "github" }, "value": { "$ref": "#/definitions/docs.NavbarGithubConfig" } }, "required": [ "type" ] }, { "properties": { "type": { "const": "dropdown" }, "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "links": { "type": "array", "items": { "$ref": "#/definitions/docs.NavbarLinkConfig" } }, "text": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "rightIcon": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "rounded": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] } }, "required": [ "type", "links" ] }, { "properties": { "type": { "const": "primary" }, "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "href": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The URL once you click on the button.\nExample: https://buildwithfern.com/contact" }, "target": { "oneOf": [ { "$ref": "#/definitions/docs.Target" }, { "type": "null" } ] }, "url": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Use `href` instead." }, "text": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Text inside the button." }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The icon to be used in the button. This icon will appear to the **left** of the text content.\nIcons can be in three formats:\n- **Font Awesome icons**: Use icon names like `fa-solid fa-rocket`. Pro and Brand Icons from Font Awesome are supported.\n- **Custom image files**: Use relative paths to image files (e.g., `./assets/icons/my-icon.svg` or `../assets/icons/my-icon.png`). Paths are relative to the `docs.yml` file.\n- **Inline SVG**: Provide an SVG string wrapped in quotes (e.g., `\"...\"`)." }, "rightIcon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The icon to be used in the button. This icon will appear to the **right** of the text content.\nIcons can be in three formats:\n- **Font Awesome icons**: Use icon names like `fa-solid fa-rocket`. Pro and Brand Icons from Font Awesome are supported.\n- **Custom image files**: Use relative paths to image files (e.g., `./assets/icons/my-icon.svg` or `../assets/icons/my-icon.png`). Paths are relative to the `docs.yml` file.\n- **Inline SVG**: Provide an SVG string wrapped in quotes (e.g., `\"...\"`).\n\nBy default, the `rightIcon` for a `filled` button is set to `arrow-right`." }, "rounded": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `true`, the border radius of the button will be fully rounded." } }, "required": [ "type" ] }, { "properties": { "type": { "const": "secondary" }, "viewers": { "oneOf": [ { "$ref": "#/definitions/docs.Role" }, { "type": "null" } ] }, "href": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The URL once you click on the button.\nExample: https://buildwithfern.com/contact" }, "target": { "oneOf": [ { "$ref": "#/definitions/docs.Target" }, { "type": "null" } ] }, "url": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Use `href` instead." }, "text": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Text inside the button." }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The icon to be used in the button. This icon will appear to the **left** of the text content.\nIcons can be in three formats:\n- **Font Awesome icons**: Use icon names like `fa-solid fa-rocket`. Pro and Brand Icons from Font Awesome are supported.\n- **Custom image files**: Use relative paths to image files (e.g., `./assets/icons/my-icon.svg` or `../assets/icons/my-icon.png`). Paths are relative to the `docs.yml` file.\n- **Inline SVG**: Provide an SVG string wrapped in quotes (e.g., `\"...\"`)." }, "rightIcon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The icon to be used in the button. This icon will appear to the **right** of the text content.\nIcons can be in three formats:\n- **Font Awesome icons**: Use icon names like `fa-solid fa-rocket`. Pro and Brand Icons from Font Awesome are supported.\n- **Custom image files**: Use relative paths to image files (e.g., `./assets/icons/my-icon.svg` or `../assets/icons/my-icon.png`). Paths are relative to the `docs.yml` file.\n- **Inline SVG**: Provide an SVG string wrapped in quotes (e.g., `\"...\"`).\n\nBy default, the `rightIcon` for a `filled` button is set to `arrow-right`." }, "rounded": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When `true`, the border radius of the button will be fully rounded." } }, "required": [ "type" ] } ] }, "docs.FooterLinksConfig": { "type": "object", "properties": { "github": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to your GitHub repository or organization." }, "twitter": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to your Twitter profile. Use `footer-links.x` for the new X branding." }, "x": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to your X (formerly Twitter) profile." }, "linkedin": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to your LinkedIn company page or profile." }, "youtube": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to your YouTube channel." }, "instagram": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to your Instagram profile." }, "facebook": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to your Facebook page." }, "discord": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to your Discord server invite." }, "slack": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to your Slack community or workspace." }, "hackernews": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to your Hacker News profile." }, "medium": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to your Medium publication or profile." }, "website": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to your main website or homepage." } }, "additionalProperties": false }, "docs.PageActionOption": { "type": "string", "enum": [ "copy-page", "view-as-markdown", "ask-ai", "chatgpt", "claude", "cursor", "claude-code", "vscode" ] }, "docs.CustomPageAction": { "type": "object", "properties": { "title": { "type": "string", "description": "The title of the custom action." }, "subtitle": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The subtitle/helper text of the custom action." }, "url": { "type": "string", "description": "The URL to navigate to. Use {slug} as a placeholder for the current page slug, {domain} as a placeholder for the current domain, and {url} as a placeholder for the current full URL." }, "icon": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Icon to display for the custom action. Can be a relative filepath, an image URL (starting with http://, https://, or /), or a Font Awesome icon name (e.g., \"fa-solid fa-star\" or \"star\")." }, "default": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Whether this custom action should be the default action." } }, "required": [ "title", "url" ], "additionalProperties": false, "description": "A custom page action that can be configured by the user." }, "docs.SkillsInstallCommand": { "anyOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ], "description": "A single install command, or a list of commands rendered one per line." }, "docs.SkillEntry": { "type": "object", "properties": { "name": { "type": "string", "description": "The skill identifier." }, "description": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Short description of what the skill does." }, "url": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Optional link to the skill's source." } }, "required": [ "name" ], "additionalProperties": false, "description": "A single agent skill surfaced in the \"Install skills\" modal. `name` is the skill identifier\n(e.g. `fern-docs`); `url` optionally links to its source (a path in the repo, a docs page, etc.)." }, "docs.SkillsPageActionConfig": { "type": "object", "properties": { "title": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Overrides the modal title." }, "description": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Overrides the modal description/blurb." }, "learn-more-url": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Optional \"Learn more\" link shown alongside the description." }, "repository": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Source repository (e.g. GitHub or GitLab) shown as a \"View source\" button." }, "install-command": { "oneOf": [ { "$ref": "#/definitions/docs.SkillsInstallCommand" }, { "type": "null" } ], "description": "Command(s) used to install the skills, rendered verbatim as a copyable block. Providing a\ncustom command disables the modal's per-skill selection. When omitted, the docs site\ngenerates `npx skills add https://` and per-skill selection appends\n`--skill ` flags. A list is rendered as one command per line (multi-step installs)." }, "skills": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.SkillEntry" } }, { "type": "null" } ], "description": "Skills displayed in the modal." } }, "additionalProperties": false, "description": "Configures the \"Install skills\" page action and its modal. Sites that ship agent skills\npoint at where those skills live and how to install them. If the docs site also serves a\n`/.well-known` skills manifest, the modal replaces the hand-listed `skills` array with the\nserved manifest; `title`, `description`, `learn-more-url`, `repository`, and\n`install-command` always come from this config." }, "docs.PageActionOptions": { "type": "object", "properties": { "copy-page": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When enabled, displays a button that allows users to copy the entire page content to their clipboard for easy sharing or reference.\n\n@default: true" }, "view-as-markdown": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When enabled, displays a button that allows users to view the raw Markdown source of the current page.\n\n@default: true" }, "ask-ai": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When enabled, displays an \"Ask AI\" button that allows users to ask questions about the page content using AI-powered assistance.\n\n@default: true" }, "chatgpt": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Controls the \"Open in ChatGPT\" button, which sends the page content to ChatGPT for further\nexploration and Q&A. Set to `false` to hide it.\n\n@default: true" }, "claude": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Controls the \"Open in Claude\" button, which sends the page content to Claude for further\nexploration and Q&A. Set to `false` to hide it.\n\n@default: true" }, "claude-code": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Controls the \"Connect to Claude Code\" button, which copies a `claude mcp add` command to the\nclipboard so users can register this docs site's MCP server with Claude Code. The button only\nrenders on docs sites that have Ask AI enabled; set to `false` to hide it on those sites.\n\n@default: true" }, "cursor": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Controls the \"Connect to Cursor\" button, which installs this docs site's MCP server in\nCursor via a deeplink. The button only renders on docs sites that have Ask AI enabled; set\nto `false` to hide it on those sites.\n\n@default: true" }, "mcp": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Controls whether the MCP server endpoint (`/_mcp/server`) is enabled for this docs site.\nWhen set to `false`, the endpoint returns 404, the MCP server URL is omitted from\n`llms.txt` and agent prompts, and the \"Connect to Claude Code\" / \"Connect to Cursor\"\nbuttons are hidden. Useful for authenticated docs sites where unauthenticated AI agents\ndiscovering the endpoint would cause confusion.\n\n@default: true" }, "vscode": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When enabled, displays an \"Open in VS Code\" button that allows users to open the page content in Visual Studio Code for editing and development.\n\n@default: false" }, "custom": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.CustomPageAction" } }, { "type": "null" } ], "description": "When enabled, displays a custom button that allows users to open the page content in a custom IDE for editing and development.\nThe value of this property should be the name of the custom IDE.\nExample: `cursor`" }, "skills": { "oneOf": [ { "$ref": "#/definitions/docs.SkillsPageActionConfig" }, { "type": "null" } ], "description": "Enables the \"Install skills\" page action and configures its modal. Presence of this key\nenables the action; omit it and the action is hidden. An empty object (`skills: {}`) is\nvalid and enables the action with all defaults — the right minimal config for sites that\nserve a `/.well-known` skills manifest, where the docs site generates the\n`npx skills add https://` command and fetches the live skill list itself." } }, "additionalProperties": false }, "docs.PageActionsConfig": { "type": "object", "properties": { "default": { "oneOf": [ { "$ref": "#/definitions/docs.PageActionOption" }, { "type": "null" } ], "description": "The default page action to display. Options: copy-page, view-as-markdown, ask-ai, chatgpt, claude, cursor, vscode." }, "options": { "oneOf": [ { "$ref": "#/definitions/docs.PageActionOptions" }, { "type": "null" } ] } }, "additionalProperties": false }, "docs.ExperimentalConfig": { "type": "object", "properties": { "mdx-components": { "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ], "description": "List of relative paths to folders or files that end in .{ts,tsx,js,jsx},\nand makes them available for use in MDX files." }, "disable-stream-toggle": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If `disable-stream-toggle` is set to true, the stream toggle will be disabled.\n\nThis behavior is unstable and may change in the future." }, "openapi-parser-v2": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "OpenAPI parser rewrite, now deprecated." }, "openapi-parser-v3": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "OpenAPI parser in alpha." }, "dynamic-snippets": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "By default, SDK snippets are static code examples that are displayed in your API Reference. Alternatively, you can use dynamic SDK snippets that allow users to modify parameters and see code examples update in real time.\n\nEnable dynamic snippets in `docs.yml`, then configure them by following the SDK snippets setup instructions." }, "ai-examples": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Enable AI-powered example enhancement for API documentation. When enabled, API examples will be enhanced with AI-generated content to provide more comprehensive and realistic examples.\n\nDEPRECATED: Use the top-level `ai-examples` property instead." }, "ai-example-style-instructions": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Custom styling instructions for AI-generated examples. When provided, these instructions will guide the AI in generating examples that match your preferred style, naming conventions, or domain-specific terminology. Limited to 500 characters.\n\nDEPRECATED: Use the top-level `ai-example-style-instructions` property instead." }, "exclude-apis": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Experimental flag to exclude API reference sections from documentation generation. When enabled, API reference content will be omitted from the generated documentation." }, "basepath-aware": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Deprecated: Use `multi-source: true` on the instance instead. When enabled, docs registration uses a basepath-aware S3 key format, allowing multiple independent doc sites to be hosted under the same custom domain with different basepaths." }, "external-sitemaps": { "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ], "description": "Experimental flag: a list of absolute URLs pointing to external sitemaps (`sitemap.xml`). Their pages are fetched and indexed in search alongside this site's documentation (tagged to the same domain), but are flagged as third-party so they rank below all first-party documentation." } }, "additionalProperties": false }, "docs.ProgrammingLanguage": { "type": "string", "enum": [ "typescript", "javascript", "python", "java", "go", "ruby", "csharp", "php", "swift", "rust", "nodets", "nodejs", "dotnet", "curl", "jvm", "ts", "js" ] }, "docs.Language": { "type": "string", "description": "A BCP 47 language tag identifying a docs locale. Common shorthand codes\nlike \"en\", \"es\", \"ja\" are accepted, as well as regional variants such as\n\"ja-JP\", \"pt-BR\", \"zh-Hans\", and \"zh-Hans-CN\". See RFC 5646 for the full\ngrammar." }, "docs.TranslationConfigObject": { "type": "object", "properties": { "lang": { "$ref": "#/definitions/docs.Language" }, "default": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Whether this language is the default. At most one entry should be marked as default." } }, "required": [ "lang" ], "additionalProperties": false }, "docs.TranslationConfig": { "anyOf": [ { "$ref": "#/definitions/docs.Language" }, { "$ref": "#/definitions/docs.TranslationConfigObject" } ], "description": "Translation configuration can be either a language code string or an object with additional options.\nWhen using a string, it's equivalent to `{ lang: }`." }, "docs.AIChatModel": { "type": "string", "enum": [ "claude-3.7", "claude-4", "command-a" ] }, "docs.AIChatLocation": { "type": "string", "enum": [ "docs", "slack", "discord" ] }, "docs.AIChatWebsiteDatasource": { "type": "object", "properties": { "url": { "type": "string", "description": "The URL of the website to index. Ask Fern will crawl and index the content from this URL." }, "title": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "An optional display name for this datasource. This helps users understand where the information is coming from when Ask Fern cites content from this source." } }, "required": [ "url" ], "additionalProperties": false }, "docs.AIChatDatasource": { "anyOf": [ { "$ref": "#/definitions/docs.AIChatWebsiteDatasource" } ] }, "docs.AIChatConfig": { "type": "object", "properties": { "model": { "oneOf": [ { "$ref": "#/definitions/docs.AIChatModel" }, { "type": "null" } ] }, "system-prompt": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "By default, Ask Fern uses system prompts to finetune AI search results. Add a custom prompt here to override it.\nSee Anthropic's prompting guide for ideas and examples." }, "location": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.AIChatLocation" } }, { "type": "null" } ], "description": "Specifies where Ask Fern will be available. Options:\n- `docs` enables Ask Fern on your documentation site\n- `slack` enables Ask Fern in Slack\n- `discord` enables Ask Fern in Discord\n\nMost users should enable Ask Fern for both `docs` and either `slack` or `discord`." }, "datasources": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.AIChatDatasource" } }, { "type": "null" } ], "description": "Additional content sources that Ask Fern should index and search." }, "mask-pii": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When enabled, personally identifiable information (PII) in user messages is masked before\nbeing sent to Ask Fern. Disabled by default." } }, "additionalProperties": false }, "docs.AiExamplesConfig": { "type": "object", "properties": { "enabled": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Enable AI-powered example enhancement for API documentation. When enabled, API examples will be enhanced with AI-generated content to provide more comprehensive and realistic examples." }, "style": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Custom styling instructions for AI-generated examples. When provided, these instructions will guide the AI in generating examples that match your preferred style, naming conventions, or domain-specific terminology. Limited to 500 characters." } }, "additionalProperties": false }, "docs.PageDescriptionSource": { "type": "string", "enum": [ "description", "subtitle" ] }, "docs.AgentsConfig": { "type": "object", "properties": { "page-directive": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Text to prepend to each page when it is served through agent endpoints." }, "page-description-source": { "oneOf": [ { "$ref": "#/definitions/docs.PageDescriptionSource" }, { "type": "null" } ], "description": "Controls which frontmatter field is preferred for one-line page descriptions\nin llms.txt. Defaults to \"description\". If the preferred field is not present\nin a page's frontmatter, falls back to other fields (description, subtitle,\nog:description, headline, excerpt)." }, "llms-txt": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Relative filepath to a custom `llms.txt` file that Fern should host at `/llms.txt`,\noverriding the auto-generated version. The file should follow the llmstxt.org specification." }, "llms-full-txt": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Relative filepath to a custom `llms-full.txt` file that Fern should host at `/llms-full.txt`,\noverriding the auto-generated version. The file should contain the full concatenated documentation content." }, "robots-txt": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Relative filepath to a custom `robots.txt` file that Fern should host at `/robots.txt`,\noverriding the auto-generated version. Fern automatically appends a rule to disallow\nits internal `/api/fern-docs/` routes so they are excluded from crawler indexing." } }, "additionalProperties": false }, "docs.TwitterCardSetting": { "type": "string", "enum": [ "summary", "summary_large_image", "app", "player" ] }, "docs.OgDynamicLogoColor": { "type": "string", "enum": [ "dark", "light" ] }, "docs.MetadataConfig": { "type": "object", "properties": { "og:site_name": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The name of your website for Open Graph tags." }, "og:title": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The title shown in social media previews." }, "og:description": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The description shown in social media previews." }, "og:url": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The canonical URL of your documentation." }, "og:image": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The image shown in social media previews. Recommended size is 1200x630 pixels." }, "og:image:width": { "oneOf": [ { "type": "number" }, { "type": "null" } ], "description": "The width of your Open Graph image in pixels." }, "og:image:height": { "oneOf": [ { "type": "number" }, { "type": "null" } ], "description": "The height of your Open Graph image in pixels." }, "og:locale": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The locale of your content (e.g., \"en_US\")." }, "og:logo": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "URL to your company logo." }, "twitter:title": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The title shown in Twitter Card previews." }, "twitter:description": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The description shown in Twitter Card previews." }, "twitter:handle": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Your company's Twitter handle." }, "twitter:image": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The image shown in Twitter Card previews." }, "twitter:site": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The Twitter handle for your website." }, "twitter:url": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "twitter:card": { "oneOf": [ { "$ref": "#/definitions/docs.TwitterCardSetting" }, { "type": "null" } ], "description": "The Twitter Card type. Options are `summary`, `summary_large_image`, `app`, or `player`." }, "og:dynamic": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When true, enables dynamic OG image generation for pages that don't have a custom og:image set." }, "og:dynamic:background-image": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "A custom background image for dynamically generated OG images. Can be a URL or a file path." }, "og:dynamic:text-color": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Override the text color for dynamically generated OG images. Accepts any valid CSS color value (e.g., \"#1a1a1a\")." }, "og:dynamic:background-color": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Override the background color for dynamically generated OG images. Accepts any valid CSS color value (e.g., \"#ffffff\")." }, "og:dynamic:logo-color": { "oneOf": [ { "$ref": "#/definitions/docs.OgDynamicLogoColor" }, { "type": "null" } ], "description": "Choose which logo variant from docs.yml to render in dynamically generated OG images. Defaults to `dark`." }, "og:dynamic:show-logo": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Toggle visibility of the logo in dynamically generated OG images. Defaults to true when og:dynamic is enabled." }, "og:dynamic:show-section": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Toggle visibility of the section title in dynamically generated OG images. Defaults to true when og:dynamic is enabled." }, "og:dynamic:show-description": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Toggle visibility of the page description in dynamically generated OG images. Defaults to true when og:dynamic is enabled." }, "og:dynamic:show-url": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Toggle visibility of the page URL in dynamically generated OG images. Defaults to true when og:dynamic is enabled." }, "og:dynamic:show-gradient": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Toggle visibility of the accent gradient overlay in dynamically generated OG images. Defaults to true when og:dynamic is enabled." }, "canonical-host": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The host of your documentation website. This will be used to set the canonical URL for metadata tags and documents like the sitemap.\nDefaults to the URL defined in the `instances` configuration." } }, "additionalProperties": false, "description": "The `metadata` object allows you to customize the appearance of your docs site in search engines and social media.\nThese settings are applied globally, but can be overridden on a per-page basis using frontmatter." }, "docs.RedirectConfig": { "type": "object", "properties": { "source": { "type": "string", "description": "The path you want to redirect from." }, "destination": { "type": "string", "description": "The path you want to route to. Can be an internal path (`/new-path`) or an external URL (`https://example.com`).\nExternal URLs must include the full address, including `https`." }, "permanent": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "By default, uses the 308 status code to instructs clients and search engines to cache the redirect forever. Set to `false` only if you need a temporary redirect using the 307 status code, which won't be cached.\n\n@default: true" } }, "required": [ "source", "destination" ], "additionalProperties": false, "description": "The `redirects` object allows you to redirect traffic from one path to another. You can redirect exact paths or use dynamic patterns with regex parameters like `:slug` to handle bulk redirects. You can redirect to internal paths within your site or external URLs.\n\n```yaml\nredirects:\n - source: \"/old-path\"\n destination: \"/new-path\"\n```\n\nBoth source and destination paths support regex. See https://github.com/pillarjs/path-to-regexp" }, "docs.CheckRuleSeverity": { "type": "string", "enum": [ "warn", "error" ] }, "docs.CheckRulesConfig": { "type": "object", "properties": { "example-validation": { "oneOf": [ { "$ref": "#/definitions/docs.CheckRuleSeverity" }, { "type": "null" } ], "description": "Severity for OpenAPI example validation. Default is warn." }, "broken-links": { "oneOf": [ { "$ref": "#/definitions/docs.CheckRuleSeverity" }, { "type": "null" } ], "description": "Severity for broken link detection. Defaults to error for broken internal links and warn for malformed URLs." }, "no-non-component-refs": { "oneOf": [ { "$ref": "#/definitions/docs.CheckRuleSeverity" }, { "type": "null" } ], "description": "Severity for non-component OpenAPI reference validation. Default is error." }, "valid-local-references": { "oneOf": [ { "$ref": "#/definitions/docs.CheckRuleSeverity" }, { "type": "null" } ], "description": "Severity for local OpenAPI reference validation. Default is warn." }, "no-circular-redirects": { "oneOf": [ { "$ref": "#/definitions/docs.CheckRuleSeverity" }, { "type": "null" } ], "description": "Severity for circular redirect validation. Default is error." }, "valid-docs-endpoints": { "oneOf": [ { "$ref": "#/definitions/docs.CheckRuleSeverity" }, { "type": "null" } ], "description": "Severity for docs endpoint URL validation. Default is warn." }, "missing-redirects": { "oneOf": [ { "$ref": "#/definitions/docs.CheckRuleSeverity" }, { "type": "null" } ], "description": "Severity for detecting previously published URLs that disappeared without an explicit redirect. Default is warn." }, "valid-changelog-slug": { "oneOf": [ { "$ref": "#/definitions/docs.CheckRuleSeverity" }, { "type": "null" } ], "description": "Severity for validating that each changelog's effective URL slug is one of the allowlisted values served as an RSS/Atom/JSON feed. Default is error." } }, "additionalProperties": false }, "docs.CheckConfig": { "type": "object", "properties": { "rules": { "oneOf": [ { "$ref": "#/definitions/docs.CheckRulesConfig" }, { "type": "null" } ] } }, "additionalProperties": false, "description": "Configure the severity of validation rules run by `fern check`.\nEach rule can be set to `warn` (non-blocking) or `error` (blocking)." }, "docs.LogoConfiguration": { "type": "object", "properties": { "dark": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Path to your dark mode logo file, relative to the docs root. SVG format is recommended for optimal quality.\nExample: `assets/images/logo-dark.svg`" }, "light": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Path to your light mode logo file, relative to the docs root. SVG format is recommended for optimal quality.\nExample: `assets/images/logo-light.svg`" }, "height": { "oneOf": [ { "type": "number" }, { "type": "null" } ] }, "href": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The URL that users will be directed to when clicking the logo. Typically your company's homepage or app." }, "right-text": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Text to display to the right of the logo image. This is useful for adding a tagline or product name next to your logo.\nExample: `Docs`" } }, "additionalProperties": false }, "docs.BackgroundImageThemedConfig": { "type": "object", "properties": { "dark": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Relative filepath to the dark-mode background image." }, "light": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Relative filepath to the light-mode background image." } }, "additionalProperties": false }, "docs.BackgroundImageConfiguration": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/docs.BackgroundImageThemedConfig" } ], "description": "This background image is used to customize the appearance of your docs site." }, "docs.ColorThemedConfig": { "type": "object", "properties": { "dark": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "light": { "oneOf": [ { "type": "string" }, { "type": "null" } ] } }, "additionalProperties": false }, "docs.ColorConfig": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/docs.ColorThemedConfig" } ] }, "docs.ColorsConfiguration": { "type": "object", "properties": { "accent-primary": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "The primary brand color used for interactive elements like links, buttons, and highlighted text.\nConfigure separate colors for light and dark modes to ensure proper contrast and visibility.\n\n@default: #818CF8" }, "accentPrimary": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Use `accent-primary` instead." }, "background": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "The main background color for all documentation pages. Choose colors that provide good contrast with text\nand complement your brand colors. Dark mode colors should reduce eye strain.\n\n@default:\n dark: #111111\n light: #F9F9F9\n\nIf not set, there will be also be a vertical gradient from the top using the accent primary color with 5% opacity." }, "border": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Used for dividing lines, borders around elements, and visual separators. Choose subtle colors that create\nclear boundaries without being too prominent.\n\n@default:\n dark: black/12%\n white: white/13%" }, "sidebar-background": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Background color for the navigation sidebar. When specified, includes a 1px border on the right side.\nIf omitted, the sidebar uses a transparent background without a border." }, "header-background": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Background color for the top navigation header. When specified, includes a 1px solid border on the bottom.\nIf omitted, the header uses a transparent background with a subtle gradient border." }, "card-background": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Background color for cards, code blocks, and other contained elements. Should be slightly different from the\nmain background to create visual hierarchy while maintaining readability.\n\n@default:\n dark: white/3.5%\n light: white/70%" }, "accent-1": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Override for accent scale step 1. This is the lightest accent color, typically used for subtle backgrounds.\nBy default, this is automatically calculated from the accent-primary color." }, "accent-2": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Override for accent scale step 2. A very light accent color for backgrounds.\nBy default, this is automatically calculated from the accent-primary color." }, "accent-3": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Override for accent scale step 3. A light accent color for UI element backgrounds.\nBy default, this is automatically calculated from the accent-primary color." }, "accent-4": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Override for accent scale step 4. Used for hovered UI element backgrounds.\nBy default, this is automatically calculated from the accent-primary color." }, "accent-5": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Override for accent scale step 5. Used for active/selected UI element backgrounds.\nBy default, this is automatically calculated from the accent-primary color." }, "accent-6": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Override for accent scale step 6. Used for subtle borders and separators.\nBy default, this is automatically calculated from the accent-primary color." }, "accent-7": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Override for accent scale step 7. Used for UI element borders and focus rings.\nBy default, this is automatically calculated from the accent-primary color." }, "accent-8": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Override for accent scale step 8. Used for hovered UI element borders.\nBy default, this is automatically calculated from the accent-primary color." }, "accent-9": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Override for accent scale step 9. The solid accent color, used for solid backgrounds like buttons.\nBy default, this is automatically calculated from the accent-primary color." }, "accent-10": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Override for accent scale step 10. Used for hovered solid backgrounds.\nBy default, this is automatically calculated from the accent-primary color." }, "accent-11": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Override for accent scale step 11. Used for low-contrast text.\nBy default, this is automatically calculated from the accent-primary color." }, "accent-12": { "oneOf": [ { "$ref": "#/definitions/docs.ColorConfig" }, { "type": "null" } ], "description": "Override for accent scale step 12. The darkest accent color, used for high-contrast text.\nBy default, this is automatically calculated from the accent-primary color." } }, "additionalProperties": false }, "docs.FontWeight": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "docs.FontStyle": { "type": "string", "enum": [ "normal", "italic" ] }, "docs.FontConfigVariant": { "type": "object", "properties": { "path": { "type": "string" }, "weight": { "oneOf": [ { "$ref": "#/definitions/docs.FontWeight" }, { "type": "null" } ], "description": "@default: `100 900`." }, "style": { "oneOf": [ { "$ref": "#/definitions/docs.FontStyle" }, { "type": "null" } ], "description": "@default: `normal`." } }, "required": [ "path" ], "additionalProperties": false }, "docs.FontConfigPath": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/docs.FontConfigVariant" } ] }, "docs.FontDisplay": { "type": "string", "enum": [ "auto", "block", "swap", "fallback", "optional" ] }, "docs.FontConfig": { "type": "object", "properties": { "name": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The name of the font. Defaults to a generated name that will be used to reference your custom font in the eventually injected CSS." }, "path": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The path to your font file, relative to your docs folder. Use this when you have a single font file.\nFor multiple font files (like separate files for bold, italic etc), use `paths` instead." }, "weight": { "oneOf": [ { "$ref": "#/definitions/docs.FontWeight" }, { "type": "null" } ], "description": "The weight of the font. Can be a number (400, 700) or a range for variable fonts (400 700).\nCommon values: 400 (normal), 700 (bold).\n\n@default: `100 900`." }, "style": { "oneOf": [ { "$ref": "#/definitions/docs.FontStyle" }, { "type": "null" } ], "description": "The font style, either \"normal\" or \"italic\". Defaults to \"normal\" if not specified.\n\n@default: `normal`." }, "paths": { "oneOf": [ { "type": "array", "items": { "$ref": "#/definitions/docs.FontConfigPath" } }, { "type": "null" } ], "description": "A list of font files for particular weights. Each element in the list includes a `path`, `weight`, and `style` property." }, "display": { "oneOf": [ { "$ref": "#/definitions/docs.FontDisplay" }, { "type": "null" } ], "description": "@default: `swap`." }, "fallback": { "oneOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ], "description": "Define fallback fonts in case the custom font fails to load." }, "font-variation-settings": { "oneOf": [ { "type": "string" }, { "type": "null" } ] } }, "additionalProperties": false }, "docs.DocsTypographyConfig": { "type": "object", "properties": { "headingsFont": { "oneOf": [ { "$ref": "#/definitions/docs.FontConfig" }, { "type": "null" } ], "description": "The font used for headings, titles, and other prominent text elements. Can be the same as your body font\nif you prefer a unified look. Supports multiple weights for different heading levels." }, "bodyFont": { "oneOf": [ { "$ref": "#/definitions/docs.FontConfig" }, { "type": "null" } ], "description": "The font used for all body text including paragraphs, lists, and general content.\nFor optimal performance, use WOFF2 format." }, "codeFont": { "oneOf": [ { "$ref": "#/definitions/docs.FontConfig" }, { "type": "null" } ], "description": "The font used for code blocks and inline code. Monospace fonts are recommended for better code readability.\nPopular choices include JetBrains Mono, Fira Code, and Source Code Pro." } }, "additionalProperties": false }, "docs.SearchbarPlacement": { "type": "string", "oneOf": [ { "const": "header" }, { "const": "header-tabs", "description": "The searchbar will be placed in the header, but on the tabs row. If the tabs row is hidden, the searchbar will be placed in the header instead.\nThis is a good option if you want to keep the searchbar visible, but save space in the header for more navbar links." }, { "const": "sidebar" } ] }, "docs.TabsPlacement": { "type": "string", "enum": [ "header", "sidebar" ] }, "docs.SwitcherPlacement": { "type": "string", "enum": [ "header", "sidebar" ] }, "docs.ContentAlignment": { "type": "string", "enum": [ "center", "left" ] }, "docs.HeaderPosition": { "type": "string", "enum": [ "fixed", "static" ] }, "docs.ChangelogLayout": { "type": "string", "enum": [ "timeline", "classic" ] }, "docs.ApiReferenceLayout": { "type": "string", "enum": [ "indented", "cards" ] }, "docs.LayoutConfig": { "type": "object", "properties": { "page-width": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Sets the maximum width of the docs layout, including the sidebar and content.\n\n@default: 88rem (1408px)\n\nValid options are:\n- `{number}rem`\n- `{number}px`\n- `full` (100% of the viewport width)" }, "content-width": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Sets the maximum width of the markdown article content.\n\n@default: 44rem (704px)\n\nValid options are:\n- `{number}rem`\n- `{number}px`" }, "sidebar-width": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Sets the width of the sidebar in desktop mode\n\n@default: 18rem (288px)\n\nValid options are:\n- `{number}rem`\n- `{number}px`" }, "header-height": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Sets the height of the header\n\n@default: 4rem (64px)\n\nValid options are:\n- `{number}rem`\n- `{number}px`" }, "searchbar-placement": { "oneOf": [ { "$ref": "#/definitions/docs.SearchbarPlacement" }, { "type": "null" } ], "description": "Sets the placement of the searchbar\n\n@default: `sidebar`\n\nNote: this setting is ignored when `disable-header` is set to true." }, "tabs-placement": { "oneOf": [ { "$ref": "#/definitions/docs.TabsPlacement" }, { "type": "null" } ], "description": "Set the placement of the tabs\n\n@default: `sidebar`\n\nNote: this setting is ignored when `disable-header` is set to true." }, "switcher-placement": { "oneOf": [ { "$ref": "#/definitions/docs.SwitcherPlacement" }, { "type": "null" } ], "description": "Set the placement of the version and language switcher\n\n@default: `header`\n\nNote: this setting is ignored when `disable-header` is set to true." }, "content-alignment": { "oneOf": [ { "$ref": "#/definitions/docs.ContentAlignment" }, { "type": "null" } ], "description": "Set the alignment of the mardown content.\n\n@default: `center`\n\nSide effects:\n- When the alignment is set to `center`, the \"On this page\" (ToC) will be aligned to the right of the page.\n- When the alignment is set to `left`, the content will be aligned next to the right of the markdown content." }, "header-position": { "oneOf": [ { "$ref": "#/definitions/docs.HeaderPosition" }, { "type": "null" } ], "description": "If `header-position` is set to `fixed`, the header will be fixed to the top of the viewport.\nIf `header-position` is set to `absolute`, the header will be absolute and will scroll with the content.\n\n@default: `fixed`" }, "disable-header": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If `disable-header` is set to true, the header will not be rendered. Instead, the logo will be rendered as part of the sidebar,\nand a 1px border will separate the sidebar from the content." }, "hide-nav-links": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If `hide-nav-links` is set to true, the navbar links will not be rendered. This can be overridden for a specific page using the frontmatter." }, "hide-feedback": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If `hide-feedback` is set to true, the feedback button will not be rendered. This can be overridden for a specific page using the frontmatter." }, "mobile-toc": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If `mobile-toc` is set to true, a sticky collapsible table of contents bar will be shown on mobile viewports for guide and overview layout pages." }, "changelog-layout": { "oneOf": [ { "$ref": "#/definitions/docs.ChangelogLayout" }, { "type": "null" } ], "description": "Sets which layout to use for changelog pages.\n\n@default: `timeline`\n\n- `timeline` renders the searchable timeline-of-cards layout.\n- `classic` renders the legacy stacked-entries layout with a per-page table of contents." }, "api-reference-layout": { "oneOf": [ { "$ref": "#/definitions/docs.ApiReferenceLayout" }, { "type": "null" } ], "description": "Sets how nested object fields are rendered in the API reference.\n\n@default: `indented`\n\n- `indented` renders each nested level as an indented branch with a connector line and a color-coded path breadcrumb.\n- `cards` renders each nested level as a bordered card." }, "show-nav-availability-badges": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If `show-nav-availability-badges` is set to true, availability badges (Beta, Deprecated, etc.)\nare rendered inline next to navigation items in the sidebar. Defaults to false. The page-header\navailability badge is unaffected by this setting." } }, "additionalProperties": false }, "docs.SearchSettingsConfig": { "type": "object", "properties": { "prioritize-current-product": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If set to true, search results from the current product/version are\nboosted in Algolia's ranking (via `optionalFilters`) without excluding\nresults from other products/versions.\n\n@default: false" }, "default-filter-by-current-product": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If set to true, the current product is automatically selected as a\nfacet filter, so only results from the current product are shown by\ndefault. Equivalent to the legacy `settings.default-search-filters`\nsetting, which is preserved as an alias for backwards compatibility.\n\n@default: false" } }, "additionalProperties": false }, "docs.HttpSnippetLanguage": { "type": "string", "enum": [ "curl", "csharp", "go", "java", "javascript", "php", "python", "ruby", "swift", "typescript" ] }, "docs.HttpSnippetsConfig": { "anyOf": [ { "type": "boolean" }, { "type": "array", "items": { "$ref": "#/definitions/docs.HttpSnippetLanguage" } } ] }, "docs.WebSocketOneofDisplay": { "type": "string", "enum": [ "flat", "grouped" ] }, "docs.DocsSettingsConfig": { "type": "object", "properties": { "search-text": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "The text to display in the searchbar.\n\n@default: Search" }, "disable-search": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If set to true, the searchbar will be disabled. Use this if you want to use a custom search solution.\n\n@default: false" }, "dark-mode-code": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If set to true, the code blocks will be displayed in dark mode, regardless of the selected theme.\n\n@default: false" }, "default-search-filters": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "By default (`false`), search will display results for pages across all products and versions.\nIf set to true, search will display results for pages within the current product and version.\n\nPreserved for backwards compatibility. Equivalent to\n`search.default-filter-by-current-product`.\n\n@default: false" }, "search": { "oneOf": [ { "$ref": "#/definitions/docs.SearchSettingsConfig" }, { "type": "null" } ], "description": "Controls product-aware search behavior. See `SearchSettingsConfig` for\nindividual options." }, "http-snippets": { "oneOf": [ { "$ref": "#/definitions/docs.HttpSnippetsConfig" }, { "type": "null" } ], "description": "Controls the display of HTTP snippets in the API Reference. HTTP snippets are enabled by default for all languages.\n- Set to `false` to disable HTTP snippets completely\n- Provide a list of languages to enable snippets for specific languages only\n\n@default: true" }, "hide-404-page": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If set to true, when a user navigates to a page that does not exist, they will be redirected to the home page.\nBy default, a 404 page will be displayed.\n\n@default: false" }, "use-javascript-as-typescript": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If set to true, the TypeScript snippets will be displayed as JavaScript snippets in the API Reference.\n\n@default: false" }, "disable-explorer-proxy": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If set to true, the API Explorer will bypass the proxy when sending requests directly to your API.\n\nWhen this feature is enabled, your API must have Cross-Origin Resource Sharing (CORS) enabled to allow requests from the documentation domain.\n\n@default: false" }, "disable-environment-editing": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "If set to true, the base URL (environment) shown in the endpoint header on API reference\ndocs pages will no longer be editable. Users will still be able to switch between configured\nenvironments via the dropdown, but will not be able to double-click and type in a custom\nURL. This does not affect the API Playground.\n\n@default: false" }, "disable-analytics": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ] }, "language": { "oneOf": [ { "$ref": "#/definitions/docs.Language" }, { "type": "null" } ] }, "folder-title-source": { "oneOf": [ { "$ref": "#/definitions/docs.TitleSource" }, { "type": "null" } ], "description": "Sets the default title source for all folder navigations. When set, this value is used as the\ndefault `title-source` for any folder that does not explicitly specify its own `title-source`.\nOptions are `frontmatter` (use the `title` field from the file's frontmatter) or `filename`\n(derive title from the file name)." }, "substitute-env-vars": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When true, substitutes ${ENV_VAR} expressions using environment variables across all files in the docs bundle,\nincluding markdown/MDX content. This is useful for injecting dynamic values like API keys or URLs.\nUse \\$\\{VAR\\} to escape and output literal ${VAR} without substitution.\n\n@default: false" }, "websocket-oneof-display": { "oneOf": [ { "$ref": "#/definitions/docs.WebSocketOneofDisplay" }, { "type": "null" } ], "description": "Controls how WebSocket messages with oneOf bodies are displayed in the API Reference.\n- `flat` (default): Each variant in the oneOf is shown as a separate top-level entry.\n- `grouped`: Messages are shown as a single parent entry with nested variants.\n\n@default: flat" } }, "additionalProperties": false }, "docs.SidebarThemeConfig": { "type": "string", "enum": [ "default", "minimal" ] }, "docs.BodyThemeConfig": { "type": "string", "enum": [ "default", "canvas" ] }, "docs.TabsThemeStyle": { "type": "string", "enum": [ "default", "bubble" ] }, "docs.TabsAlignment": { "type": "string", "enum": [ "left", "center" ] }, "docs.TabsThemeObjectConfig": { "type": "object", "properties": { "style": { "oneOf": [ { "$ref": "#/definitions/docs.TabsThemeStyle" }, { "type": "null" } ] }, "alignment": { "oneOf": [ { "$ref": "#/definitions/docs.TabsAlignment" }, { "type": "null" } ] }, "placement": { "oneOf": [ { "$ref": "#/definitions/docs.TabsPlacement" }, { "type": "null" } ] } }, "additionalProperties": false }, "docs.TabsThemeConfig": { "anyOf": [ { "$ref": "#/definitions/docs.TabsThemeStyle" }, { "$ref": "#/definitions/docs.TabsThemeObjectConfig" } ] }, "docs.PageActionsThemeConfig": { "type": "string", "enum": [ "default", "toolbar" ] }, "docs.FooterNavThemeConfig": { "type": "string", "enum": [ "default", "minimal" ] }, "docs.LanguageSwitcherThemeConfig": { "type": "string", "enum": [ "default", "minimal" ] }, "docs.ProductSwitcherThemeConfig": { "type": "string", "enum": [ "default", "toggle", "tabs" ] }, "docs.ThemeConfig": { "type": "object", "properties": { "sidebar": { "oneOf": [ { "$ref": "#/definitions/docs.SidebarThemeConfig" }, { "type": "null" } ] }, "body": { "oneOf": [ { "$ref": "#/definitions/docs.BodyThemeConfig" }, { "type": "null" } ] }, "tabs": { "oneOf": [ { "$ref": "#/definitions/docs.TabsThemeConfig" }, { "type": "null" } ] }, "page-actions": { "oneOf": [ { "$ref": "#/definitions/docs.PageActionsThemeConfig" }, { "type": "null" } ] }, "footer-nav": { "oneOf": [ { "$ref": "#/definitions/docs.FooterNavThemeConfig" }, { "type": "null" } ] }, "language-switcher": { "oneOf": [ { "$ref": "#/definitions/docs.LanguageSwitcherThemeConfig" }, { "type": "null" } ] }, "product-switcher": { "oneOf": [ { "$ref": "#/definitions/docs.ProductSwitcherThemeConfig" }, { "type": "null" } ] } }, "additionalProperties": false }, "docs.IntegrationsConfig": { "type": "object", "properties": { "intercom": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }, "context7": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Relative filepath to a `context7.json` file that Fern should host at `/context7.json`.\nFern only checks that the file exists and is valid JSON, then passes it through as-is." } }, "additionalProperties": false }, "docs.CssConfig": { "anyOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ], "description": "The `css` object allows you to customize the appearance of your docs site by injecting custom CSS, i.e.\n\n```yaml\ncss: \"path/to/css/file.css\"\n```\n\nor, multiple files:\n\n```yaml\ncss:\n - \"path/to/css/file.css\"\n - \"path/to/another/css/file.css\"\n```" }, "docs.JsScriptStrategy": { "type": "string", "enum": [ "beforeInteractive", "afterInteractive", "lazyOnload" ] }, "docs.JsRemoteConfig": { "type": "object", "properties": { "url": { "type": "string" }, "strategy": { "oneOf": [ { "$ref": "#/definitions/docs.JsScriptStrategy" }, { "type": "null" } ] }, "disable-sri": { "oneOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "When true, skip computing a Subresource Integrity (SRI) hash for this\nremote script. The script is rendered without an `integrity` attribute.\nUseful for scripts whose contents change (e.g. rolling CDN builds) that\nwould otherwise fail integrity verification." } }, "required": [ "url" ], "additionalProperties": false }, "docs.JsFileConfigSettings": { "type": "object", "properties": { "path": { "type": "string" }, "strategy": { "oneOf": [ { "$ref": "#/definitions/docs.JsScriptStrategy" }, { "type": "null" } ] } }, "required": [ "path" ], "additionalProperties": false }, "docs.JsFileConfig": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/docs.JsFileConfigSettings" } ] }, "docs.JsConfigOptions": { "anyOf": [ { "$ref": "#/definitions/docs.JsRemoteConfig" }, { "$ref": "#/definitions/docs.JsFileConfig" } ] }, "docs.JsConfig": { "anyOf": [ { "$ref": "#/definitions/docs.JsConfigOptions" }, { "type": "array", "items": { "$ref": "#/definitions/docs.JsConfigOptions" } } ], "description": "The `js` object allows you to customize the behavior of your docs site by injecting custom JavaScript, i.e.\n\n```yaml\njs: \"path/to/js/file.js\"\n```\n\nor, multiple files:\n\n```yaml\njs:\n - \"path/to/js/file.js\"\n - \"path/to/another/js/file.js\"\n```\n\nor remote js:\n\n```yaml\njs:\n url: \"https://example.com/path/to/js/file.js\"\n strategy: \"afterInteractive\"\n```\n\nor, mixed:\n\n```yaml\njs:\n - \"path/to/js/file.js\"\n - path: \"path/to/another/js/file.js\"\n strategy: \"beforeInteractive\"\n - url: \"https://example.com/path/to/js/file.js\"\n```" } } }