diff --git a/fern/docs.yml b/fern/docs.yml
index 69c4d529bd..25850155d5 100644
--- a/fern/docs.yml
+++ b/fern/docs.yml
@@ -697,6 +697,8 @@ redirects:
destination: /learn/api-definitions/grpc/overview
- source: /learn/grpc-definition/:slug*
destination: /learn/api-definitions/grpc/:slug*
+ - source: /learn/api-definitions/protobuf
+ destination: /learn/api-definitions/grpc/overview
# FernDef (specifics before catchall — comparison-with-open-api was shadowed)
- source: /learn/api-definition/fern/comparison-with-open-api
diff --git a/fern/products/api-def/ferndef/api-yml/global-configuration.mdx b/fern/products/api-def/ferndef/api-yml/global-configuration.mdx
index 7d1c1bbef1..3b11febb8e 100644
--- a/fern/products/api-def/ferndef/api-yml/global-configuration.mdx
+++ b/fern/products/api-def/ferndef/api-yml/global-configuration.mdx
@@ -21,7 +21,7 @@ headers:
```
-When you define global headers in your `api.yml`, you must [include them in your endpoint examples](/api-definitions/ferndef/examples#examples-with-headers).
+When you define global headers in your `api.yml`, you must [include them in your endpoint examples](/learn/api-definitions/ferndef/examples#examples-with-headers).
## Global path parameters
diff --git a/fern/products/api-def/ferndef/auth.mdx b/fern/products/api-def/ferndef/auth.mdx
index 1d1a1e9d5a..add3f91105 100644
--- a/fern/products/api-def/ferndef/auth.mdx
+++ b/fern/products/api-def/ferndef/auth.mdx
@@ -247,7 +247,7 @@ service:
response: TokenResponse
```
-If your OAuth server is hosted at a different URL than your main API, you can use [multi-URL environments](/api-definitions/ferndef/api-yml/environments#multiple-urls-per-environment) to specify separate base URLs for authentication and API calls.
+If your OAuth server is hosted at a different URL than your main API, you can use [multi-URL environments](/learn/api-definitions/ferndef/api-yml/environments#multiple-urls-per-environment) to specify separate base URLs for authentication and API calls.
With this, all of the OAuth logic happens automatically in the generated SDKs. As long as you configure these settings, your
client will automatically retrieve an access token and refresh it as needed.
diff --git a/fern/products/api-def/ferndef/endpoints.mdx b/fern/products/api-def/ferndef/endpoints.mdx
index 90e4b4df12..52395fc844 100644
--- a/fern/products/api-def/ferndef/endpoints.mdx
+++ b/fern/products/api-def/ferndef/endpoints.mdx
@@ -33,7 +33,7 @@ Each service defines:
### Section display name
-By default, section names in your API Reference come from service file names (e.g., `user.yml` becomes "User"). To override the display name of a section, [use the `section` property in your `docs.yml`](/docs/api-references/customize-api-reference-layout#renaming-sections).
+By default, section names in your API Reference come from service file names (e.g., `user.yml` becomes "User"). To override the display name of a section, [use the `section` property in your `docs.yml`](/learn/docs/api-references/customize-api-reference-layout#renaming-sections).
### SDK method names
diff --git a/fern/products/api-def/ferndef/examples.mdx b/fern/products/api-def/ferndef/examples.mdx
index fe8dca6b72..928c5ad273 100644
--- a/fern/products/api-def/ferndef/examples.mdx
+++ b/fern/products/api-def/ferndef/examples.mdx
@@ -321,7 +321,7 @@ errors:
### Examples with headers
-When you have [global headers defined in your `api.yml`](/api-definitions/ferndef/api-yml/global-headers#global-headers), you must include them in your examples:
+When you have [global headers defined in your `api.yml`](/learn/api-definitions/ferndef/api-yml/global-headers#global-headers), you must include them in your examples:
```yml {15-16}
service:
diff --git a/fern/products/api-def/ferndef/export-openapi.mdx b/fern/products/api-def/ferndef/export-openapi.mdx
index 8adae6c3d1..52b3698989 100644
--- a/fern/products/api-def/ferndef/export-openapi.mdx
+++ b/fern/products/api-def/ferndef/export-openapi.mdx
@@ -7,16 +7,24 @@ noindex: true
-To prevent lock-in to the Fern Definition format, you can export your API definition to OpenAPI 3.1 at any time [using the `fern export` command](/cli-api-reference/cli-reference/commands#fern-export).
+To prevent lock-in to the Fern Definition format, you can export your API definition to OpenAPI 3.1 at any time [using the `fern export` command](/learn/cli-api-reference/cli-reference/commands#fern-export).
-If you have multiple APIs defined in your `fern/apis/` folder, use `--api` to specify which API to export.
+The path argument is the **output file** to write. Use a `.yml` or `.json` extension to choose the format of the generated spec.
+
+
+```bash
+# Write the exported spec as YAML
+fern export path/to/openapi.yml
-
- ```bash
- fern export path/to/openapi.yml
- fern export path/to/openapi.json
+# ...or as JSON
+fern export path/to/openapi.json
+```
+
+
+If you have multiple APIs defined in your `fern/apis/` folder, use `--api` to specify which API to export.
- # Specify API to export
- fern export --api public-api path/to/openapi.yml
- ```
-
\ No newline at end of file
+
+```bash
+fern export --api public-api path/to/openapi.yml
+```
+
\ No newline at end of file
diff --git a/fern/products/api-def/ferndef/webhooks.mdx b/fern/products/api-def/ferndef/webhooks.mdx
index 8c26059d03..3eda5e8d4f 100644
--- a/fern/products/api-def/ferndef/webhooks.mdx
+++ b/fern/products/api-def/ferndef/webhooks.mdx
@@ -87,7 +87,7 @@ navigation:
- subpackage_api.newPlantWebhook # Format: subpackage_{name-of-api}.{webhook-event-name}
```
-For more information on how to configure your webhook reference in `docs.yml`, see [Generate your webhook reference](/docs/api-references/generate-webhook-ref).
+For more information on how to configure your webhook reference in `docs.yml`, see [Generate your webhook reference](/learn/docs/api-references/generate-webhook-ref).
## SDK signature verification
diff --git a/fern/products/api-def/grpc/overview.mdx b/fern/products/api-def/grpc/overview.mdx
index aa488f9e96..171a4e3834 100644
--- a/fern/products/api-def/grpc/overview.mdx
+++ b/fern/products/api-def/grpc/overview.mdx
@@ -202,7 +202,7 @@ fern/
```
-Create a `generators.yml` file in your fern directory and add a reference to your gRPC proto files. See [gRPC generators.yml reference](/api-definitions/grpc/generators-yml-reference) for complete configuration options.
+Create a `generators.yml` file in your fern directory and add a reference to your gRPC proto files. See [gRPC generators.yml reference](/learn/api-definitions/grpc/generators-yml-reference) for complete configuration options.
```yaml title="generators.yml"
# Your API definition
diff --git a/fern/products/api-def/openapi/automation.mdx b/fern/products/api-def/openapi/automation.mdx
index 4bc80cf057..12baeaf86f 100644
--- a/fern/products/api-def/openapi/automation.mdx
+++ b/fern/products/api-def/openapi/automation.mdx
@@ -20,7 +20,7 @@ Automatically pull your latest OpenAPI spec from a publicly available URL into y
```
- Create `.github/workflows/sync-openapi.yml` in your repository. This action uses [`fern api update`](/cli-api-reference/cli-reference/commands#fern-api-update) to pull the latest version of your OpenAPI spec from the `origin` field in your `generators.yml` file.
+ Create `.github/workflows/sync-openapi.yml` in your repository. This action uses [`fern api update`](/learn/cli-api-reference/cli-reference/commands#fern-api-update) to pull the latest version of your OpenAPI spec from the `origin` field in your `generators.yml` file.
```yml title=".github/workflows/sync-openapi.yml"
name: Sync OpenAPI Specs # can be customized
diff --git a/fern/products/api-def/openapi/extensions/examples.mdx b/fern/products/api-def/openapi/extensions/examples.mdx
index 3f915df5fb..b91794d77d 100644
--- a/fern/products/api-def/openapi/extensions/examples.mdx
+++ b/fern/products/api-def/openapi/extensions/examples.mdx
@@ -20,7 +20,7 @@ The `request` and `response` values use different shapes:
- `response` requires a nested `body` key containing the response body properties.
- Examples must include any headers declared with the [`x-fern-global-headers` extension](/api-definitions/openapi/extensions/global-headers). Place them under `headers` alongside `path-parameters` and `request`.
+ Examples must include any headers declared with the [`x-fern-global-headers` extension](/learn/api-definitions/openapi/extensions/global-headers). Place them under `headers` alongside `path-parameters` and `request`.
An endpoint with path parameters:
diff --git a/fern/products/api-def/openapi/extensions/global-headers.mdx b/fern/products/api-def/openapi/extensions/global-headers.mdx
index d684a1b423..8871edb6a3 100644
--- a/fern/products/api-def/openapi/extensions/global-headers.mdx
+++ b/fern/products/api-def/openapi/extensions/global-headers.mdx
@@ -30,7 +30,7 @@ x-fern-global-headers:
```
- When you define global headers using `x-fern-global-headers`, you must [include them in your `x-fern-examples`](/api-definitions/openapi/extensions/request-response-examples).
+ When you define global headers using `x-fern-global-headers`, you must [include them in your `x-fern-examples`](/learn/api-definitions/openapi/extensions/request-response-examples).
### Default values
diff --git a/fern/products/api-def/openapi/overview.mdx b/fern/products/api-def/openapi/overview.mdx
index 880fdbe6c9..7632d02cae 100644
--- a/fern/products/api-def/openapi/overview.mdx
+++ b/fern/products/api-def/openapi/overview.mdx
@@ -106,8 +106,8 @@ components:
Follow these best practices to ensure your OpenAPI specification generates high-quality SDKs and documentation:
-- **Organize with proper project structure.** Follow the instructions at [Project structure](/api-definitions/overview/project-structure) to clearly organize the directories that contain your definition and other related files.
-- **Add `operationId` to endpoints.** Include a clear `operationId` for each endpoint to control the function names generated in your SDKs. (Or use [extensions to customize group and method names](/api-definitions/openapi/extensions/method-names).)
+- **Organize with proper project structure.** Follow the instructions at [Project structure](/learn/api-definitions/overview/project-structure) to clearly organize the directories that contain your definition and other related files.
+- **Add `operationId` to endpoints.** Include a clear `operationId` for each endpoint to control the function names generated in your SDKs. (Or use [extensions to customize group and method names](/learn/api-definitions/openapi/extensions/method-names).)
- **Reference schemas instead of inlining.** Define reusable schemas in the `components/schemas` section and reference them with `$ref`. This promotes consistency, reduces duplication, and makes maintenance easier.
```yaml title="openapi.yml" {8, 14, 17-25}
@@ -137,7 +137,7 @@ Follow these best practices to ensure your OpenAPI specification generates high-
enum: [available, pending, sold]
```
-- **Use overlays and Fern extensions for customization.** Customize your specification using Fern [extensions](/api-definitions/openapi/extensions/overview) housed in an [overlay file](/api-definitions/openapi/overlays). This lets you modify generation behavior without changing your core OpenAPI definition.
+- **Use overlays and Fern extensions for customization.** Customize your specification using Fern [extensions](/learn/api-definitions/openapi/extensions/overview) housed in an [overlay file](/learn/api-definitions/openapi/overlays). This lets you modify generation behavior without changing your core OpenAPI definition.
Once your OpenAPI spec follows these practices, you're ready to set up your fern folder.
diff --git a/fern/products/api-def/openapi/webhooks.mdx b/fern/products/api-def/openapi/webhooks.mdx
index 2aef5ec0d3..a874ce9d5c 100644
--- a/fern/products/api-def/openapi/webhooks.mdx
+++ b/fern/products/api-def/openapi/webhooks.mdx
@@ -124,7 +124,7 @@ navigation:
- subpackage_plants.newPlantWebhook # subpackage_{tag}.{webhook-event-name}
```
-For more information on how to configure your webhook reference in `docs.yml`, see [Generate your webhook reference](/docs/api-references/generate-webhook-ref).
+For more information on how to configure your webhook reference in `docs.yml`, see [Generate your webhook reference](/learn/docs/api-references/generate-webhook-ref).
## SDK signature verification
diff --git a/fern/products/api-def/pages/asyncapi-empty.mdx b/fern/products/api-def/pages/asyncapi-empty.mdx
index a56ad602d3..0ad721d94d 100644
--- a/fern/products/api-def/pages/asyncapi-empty.mdx
+++ b/fern/products/api-def/pages/asyncapi-empty.mdx
@@ -4,4 +4,4 @@ description: This is an empty page used to redirect to the AsyncAPI Definition p
---
-This page is empty. Please visit the [AsyncAPI Definition](/api-definitions/asyncapi/overview) page for more information.
\ No newline at end of file
+This page is empty. Please visit the [AsyncAPI Definition](/learn/api-definitions/asyncapi/overview) page for more information.
\ No newline at end of file
diff --git a/fern/products/api-def/pages/ferndef-empty.mdx b/fern/products/api-def/pages/ferndef-empty.mdx
index 64df46958e..caa4042a40 100644
--- a/fern/products/api-def/pages/ferndef-empty.mdx
+++ b/fern/products/api-def/pages/ferndef-empty.mdx
@@ -4,4 +4,4 @@ description: This is an empty page used to redirect to the Fern Definition pages
---
-This page is empty. Please visit the [Fern Definition](/api-definitions/ferndef/overview) page for more information.
\ No newline at end of file
+This page is empty. Please visit the [Fern Definition](/learn/api-definitions/ferndef/overview) page for more information.
\ No newline at end of file
diff --git a/fern/products/api-def/pages/grpc-empty.mdx b/fern/products/api-def/pages/grpc-empty.mdx
index 9b946b7524..2a6e15c06c 100644
--- a/fern/products/api-def/pages/grpc-empty.mdx
+++ b/fern/products/api-def/pages/grpc-empty.mdx
@@ -4,4 +4,4 @@ description: This is an empty page used to redirect to the gRPC Definition pages
---
-This page is empty. Please visit the [gRPC Definition](/api-definitions/grpc/overview) page for more information.
\ No newline at end of file
+This page is empty. Please visit the [gRPC Definition](/learn/api-definitions/grpc/overview) page for more information.
\ No newline at end of file
diff --git a/fern/products/api-def/pages/openapi-empty.mdx b/fern/products/api-def/pages/openapi-empty.mdx
index a943a88052..444f611d3a 100644
--- a/fern/products/api-def/pages/openapi-empty.mdx
+++ b/fern/products/api-def/pages/openapi-empty.mdx
@@ -4,4 +4,4 @@ description: This is an empty page used to redirect to the OpenAPI Definition pa
---
-This page is empty. Please visit the [OpenAPI Definition](/api-definitions/openapi/overview) page for more information.
\ No newline at end of file
+This page is empty. Please visit the [OpenAPI Definition](/learn/api-definitions/openapi/overview) page for more information.
\ No newline at end of file
diff --git a/fern/products/api-def/pages/openrpc-empty.mdx b/fern/products/api-def/pages/openrpc-empty.mdx
index b89f574008..d286131e06 100644
--- a/fern/products/api-def/pages/openrpc-empty.mdx
+++ b/fern/products/api-def/pages/openrpc-empty.mdx
@@ -4,4 +4,4 @@ description: This is an empty page used to redirect to the OpenRPC Definition pa
---
-This page is empty. Please visit the [OpenRPC Definition](/api-definitions/openrpc/overview) page for more information.
\ No newline at end of file
+This page is empty. Please visit the [OpenRPC Definition](/learn/api-definitions/openrpc/overview) page for more information.
\ No newline at end of file
diff --git a/fern/products/api-def/pages/overrides.mdx b/fern/products/api-def/pages/overrides.mdx
index 47d7cd0cba..c42e98ffb9 100644
--- a/fern/products/api-def/pages/overrides.mdx
+++ b/fern/products/api-def/pages/overrides.mdx
@@ -22,7 +22,7 @@ Overrides are available for OpenAPI, AsyncAPI, and OpenRPC specifications.
-[Create an `overrides.yml` file](/cli-api-reference/cli-reference/commands#fern-write-overrides) in the folder that contains your API definition:
+[Create an `overrides.yml` file](/learn/cli-api-reference/cli-reference/commands#fern-write-overrides) in the folder that contains your API definition:
```bash {6}
fern/
diff --git a/fern/products/api-def/pages/project-structure.mdx b/fern/products/api-def/pages/project-structure.mdx
index 69e9f78b9c..59bf19e4b2 100644
--- a/fern/products/api-def/pages/project-structure.mdx
+++ b/fern/products/api-def/pages/project-structure.mdx
@@ -7,7 +7,7 @@ description: Describes the Fern folder structure
Configuring fern starts with the `fern` folder, which contains your API definitions,
SDK generators, and your CLI version.
-Fern recommends a multi-repository structure with your fern folder in a source repository (containing your API definitions and generation configuration) and [each generated SDK in its own separate repository](/sdks/overview/project-structure).
+Fern recommends a multi-repository structure with your fern folder in a source repository (containing your API definitions and generation configuration) and [each generated SDK in its own separate repository](/learn/sdks/overview/project-structure).
## Directory structure
@@ -41,7 +41,7 @@ The `fern.config.json` file stores your organization name and the Fern CLI versi
```
- When working with a locally installed CLI, set `version` to `"*"`. See [Install Fern CLI locally](/cli-api-reference/cli-reference/overview#install-fern-cli-locally) for details.
+ When working with a locally installed CLI, set `version` to `"*"`. See [Install Fern CLI locally](/learn/cli-api-reference/cli-reference/overview#install-fern-cli-locally) for details.
### `generators.yml`
@@ -54,18 +54,18 @@ api:
- openapi: ./openapi/openapi.yml
```
-For SDK generation, `generators.yml` is required. Add a `groups` section to configure which SDKs to generate. See the [SDKs project structure](/sdks/overview/project-structure#generatorsyml) for details.
+For SDK generation, `generators.yml` is required. Add a `groups` section to configure which SDKs to generate. See the [SDKs project structure](/learn/sdks/overview/project-structure#generatorsyml) for details.
### API definition file
-For [OpenAPI](/api-definitions/openapi/overview), [AsyncAPI](/api-definitions/asyncapi/overview), [OpenRPC](/api-definitions/openrpc/overview), and [gRPC](/api-definitions/grpc/overview), you'll have a single self-contained specification file.
+For [OpenAPI](/learn/api-definitions/openapi/overview), [AsyncAPI](/learn/api-definitions/asyncapi/overview), [OpenRPC](/learn/api-definitions/openrpc/overview), and [gRPC](/learn/api-definitions/grpc/overview), you'll have a single self-contained specification file.
## Where to store your API definition
There are four common ways to manage your API definition:
- **Commit directly into your Fern repository (recommended).** Check your API definition file into the same repository that contains your Fern configuration. This is the simplest approach if you don't maintain the definition elsewhere.
-- **Sync from a source code repository.** Store your API definition in the same repo as your API source code and sync updates into your Fern repository. You can automate this with the [`fern api update`](/cli-api-reference/cli-reference/commands#fern-api-update) CLI command or the [sync-openapi GitHub Action](/learn/api-definitions/openapi/sync-your-open-api-specification).
+- **Sync from a source code repository.** Store your API definition in the same repo as your API source code and sync updates into your Fern repository. You can automate this with the [`fern api update`](/learn/cli-api-reference/cli-reference/commands#fern-api-update) CLI command or the [sync-openapi GitHub Action](/learn/api-definitions/openapi/sync-your-open-api-specification).
- **Host at a public URL.** Serve the definition from a publicly accessible endpoint and configure the [`origin`](/learn/sdks/reference/generators-yml#openapi) field in `generators.yml` so Fern can fetch it. This is useful when you want a single canonical definition that multiple consumers can reference.
- **Reference from a remote git repository.** Point [`openapi`](/learn/sdks/reference/generators-yml#openapi), [`asyncapi`](/learn/sdks/reference/generators-yml#asyncapi), or proto [`root`](/learn/sdks/reference/generators-yml#root) to a file in an external git repository using the `git` sub-object. The CLI shallow-clones the repository at generation time, using your local git credential configuration. This is useful when spec files live in a private repo you don't want to copy.
diff --git a/fern/products/api-def/pages/what-is-an-api-definition.mdx b/fern/products/api-def/pages/what-is-an-api-definition.mdx
index b150b025b1..184d49719a 100644
--- a/fern/products/api-def/pages/what-is-an-api-definition.mdx
+++ b/fern/products/api-def/pages/what-is-an-api-definition.mdx
@@ -273,28 +273,28 @@ you can regenerate these artifacts to ensure they are always up-to-date.
Client libraries in multiple languages that automatically stay in sync with your API.
Interactive API docs with code examples and live testing capabilities.
}
- href="/docs/integrations/postman"
+ href="/learn/docs/integrations/postman"
>
Ready-to-use collection with pre-filled example requests and responses.
}
- href="/api-definitions/openapi/frameworks/fastapi"
+ href="/learn/api-definitions/openapi/frameworks/fastapi"
>
Pydantic models for FastAPI or controllers for your Spring Boot application.
diff --git a/fern/products/cli-api-reference/pages/commands.mdx b/fern/products/cli-api-reference/pages/commands.mdx
index fca845fbb4..be13bd1b3d 100644
--- a/fern/products/cli-api-reference/pages/commands.mdx
+++ b/fern/products/cli-api-reference/pages/commands.mdx
@@ -155,10 +155,14 @@ hideOnThisPage: true
Use `fern export` to generate an OpenAPI spec for your API. This is useful when you've defined your API in a format other than OpenAPI (such as the [Fern Definition](/learn/api-definitions/ferndef/overview)) and need to export it for integration with other tools or services.
+ The path argument is the **output file** to write. Use a `.yml` or `.json` extension to choose the format of the generated spec.
```bash
+ # Write the exported spec as YAML
fern export [--api ] path/to/openapi.yml
+
+ # ...or as JSON
fern export [--api ] path/to/openapi.json
```
@@ -167,10 +171,19 @@ hideOnThisPage: true
Use `--api` to specify which API to export when you have multiple APIs defined in your `fern/apis/` folder.
-
+
```bash
fern export --api public-api path/to/openapi.yml
- fern export --api public-api path/to/openapi.json
+ ```
+
+
+ ### indent
+
+ Use `--indent` to set the indentation size, in spaces, of the generated spec.
+
+
+ ```bash
+ fern export --indent 4 path/to/openapi.yml
```
@@ -1037,7 +1050,7 @@ hideOnThisPage: true
Pulls the latest OpenAPI spec from the specified `origin` in `generators.yml` and
- updates the local spec. Alternatively, you can [automate this process by setting up a GitHub Action](/api-definitions/openapi/sync-your-open-api-specification).
+ updates the local spec. Alternatively, you can [automate this process by setting up a GitHub Action](/learn/api-definitions/openapi/sync-your-open-api-specification).
```bash
diff --git a/fern/products/docs/pages/api-references/customize-api-ref.mdx b/fern/products/docs/pages/api-references/customize-api-ref.mdx
index 8d646b99fc..1384e11034 100644
--- a/fern/products/docs/pages/api-references/customize-api-ref.mdx
+++ b/fern/products/docs/pages/api-references/customize-api-ref.mdx
@@ -123,7 +123,7 @@ navigation:
```
- You can alternatively customize tag display names directly in your spec (or overlays file) using the [`x-displayName` extension](/api-definitions/openapi/extensions/tag-display-names).
+ You can alternatively customize tag display names directly in your spec (or overlays file) using the [`x-displayName` extension](/learn/api-definitions/openapi/extensions/tag-display-names).
### Flattening sections
diff --git a/fern/products/docs/pages/api-references/http-snippets.mdx b/fern/products/docs/pages/api-references/http-snippets.mdx
index 517091f673..52188d4a9a 100644
--- a/fern/products/docs/pages/api-references/http-snippets.mdx
+++ b/fern/products/docs/pages/api-references/http-snippets.mdx
@@ -67,4 +67,4 @@ settings:
```
-This removes all HTTP snippet languages except cURL from the selector. cURL is always displayed and can't be removed via `docs.yml` configuration. To hide cURL, [use custom CSS](/docs/customization/custom-css-js#custom-css).
+This removes all HTTP snippet languages except cURL from the selector. cURL is always displayed and can't be removed via `docs.yml` configuration. To hide cURL, [use custom CSS](/learn/docs/customization/custom-css-js#custom-css).
diff --git a/fern/products/docs/pages/component-library/default-components/badges.mdx b/fern/products/docs/pages/component-library/default-components/badges.mdx
index 2cf3a3ae45..7486b0b9c6 100644
--- a/fern/products/docs/pages/component-library/default-components/badges.mdx
+++ b/fern/products/docs/pages/component-library/default-components/badges.mdx
@@ -4,7 +4,7 @@ description: Display small labels for status, versions, and metadata inline with
---
-Use the `` component to display small pieces of information, such as status indicators, categories, versions, or release dates. To display longer notes, use [callouts](/docs/writing-content/components/callouts).
+Use the `` component to display small pieces of information, such as status indicators, categories, versions, or release dates. To display longer notes, use [callouts](/learn/docs/writing-content/components/callouts).
## Usage
diff --git a/fern/products/docs/pages/component-library/default-components/callouts.mdx b/fern/products/docs/pages/component-library/default-components/callouts.mdx
index b4a91f0103..490a6b1f4e 100644
--- a/fern/products/docs/pages/component-library/default-components/callouts.mdx
+++ b/fern/products/docs/pages/component-library/default-components/callouts.mdx
@@ -6,7 +6,7 @@ description: Learn how to use the Callout component to add warnings, tips, notes
The `` component highlights important information, warnings, or tips in your documentation. Use callouts to emphasize critical details that readers shouldn't miss, such as breaking changes, prerequisites, or helpful best practices.
-To display very short pieces of information like status indicators and version numbers, use [badges](/docs/writing-content/components/badges).
+To display very short pieces of information like status indicators and version numbers, use [badges](/learn/docs/writing-content/components/badges).
## Usage
diff --git a/fern/products/docs/pages/component-library/default-components/code-blocks.mdx b/fern/products/docs/pages/component-library/default-components/code-blocks.mdx
index 7c3c3cfa07..443643e807 100644
--- a/fern/products/docs/pages/component-library/default-components/code-blocks.mdx
+++ b/fern/products/docs/pages/component-library/default-components/code-blocks.mdx
@@ -548,7 +548,7 @@ Code blocks with the [same language](#supported-languages) automatically synchro
- Code blocks automatically synchronize with [tabs in that same language](/docs/writing-content/components/tabs#language-synchronization).
+ Code blocks automatically synchronize with [tabs in that same language](/learn/docs/writing-content/components/tabs#language-synchronization).
diff --git a/fern/products/docs/pages/component-library/default-components/files.mdx b/fern/products/docs/pages/component-library/default-components/files.mdx
index 59992570b2..2b47bcd924 100644
--- a/fern/products/docs/pages/component-library/default-components/files.mdx
+++ b/fern/products/docs/pages/component-library/default-components/files.mdx
@@ -101,10 +101,10 @@ Add the `href` property to make files or folders clickable. This is useful for l
-
-
-
-
+
+
+
+
diff --git a/fern/products/docs/pages/component-library/default-components/overview.mdx b/fern/products/docs/pages/component-library/default-components/overview.mdx
index 99e21bca62..9940f7068a 100644
--- a/fern/products/docs/pages/component-library/default-components/overview.mdx
+++ b/fern/products/docs/pages/component-library/default-components/overview.mdx
@@ -10,84 +10,84 @@ Fern includes 27 built-in components for creating interactive documentation. Sel
Expandable sections for FAQs and collapsible content
Linkable anchors for paragraphs, tables, and other content
Sticky container for content positioned to the right of the page
Small labels for status, versions, and metadata
Interactive button component with multiple variants and intents
Highlighted boxes for important information, warnings, and tips
Visually distinct box with optional icons and links
Code examples with syntax highlighting and interactive features
Make text copyable with a click-to-copy button
Download PDFs and other assets
Endpoint request snippets from your API Reference
Endpoint response snippets from your API Reference
@@ -101,98 +101,98 @@ Fern includes 27 built-in components for creating interactive documentation. Sel
Display interactive file tree structures with expandable folders
Container for images with optional captions and backgrounds
Font Awesome icons for visual elements
Show or hide content based on instance, product, version, or user role
Visual hierarchy with indentation and guide lines for nested content
API parameter documentation with consistent formatting
Copyable AI prompts that open in Cursor, Claude, or ChatGPT
Interactive request builder for testing API endpoints
Display any type definition from your API Reference
Sequenced instructions with automatic numbering and anchor links
Display data in rows and columns with optional sticky headers
Tabbed interface for organizing related content
Additional information displayed on hover
Display different content based on version selection
diff --git a/fern/products/docs/pages/component-library/default-components/tabs.mdx b/fern/products/docs/pages/component-library/default-components/tabs.mdx
index a3036b5673..d09eb03830 100644
--- a/fern/products/docs/pages/component-library/default-components/tabs.mdx
+++ b/fern/products/docs/pages/component-library/default-components/tabs.mdx
@@ -107,7 +107,7 @@ Tabs with the [same language](/learn/docs/writing-content/components/code-blocks
- Language-enabled tabs automatically synchronize with [code blocks in that same language](/docs/writing-content/components/code-blocks#language-synchronization).
+ Language-enabled tabs automatically synchronize with [code blocks in that same language](/learn/docs/writing-content/components/code-blocks#language-synchronization).
diff --git a/fern/products/docs/pages/customization/announcement-banner.mdx b/fern/products/docs/pages/customization/announcement-banner.mdx
index c0d1d15b62..f0a620bb0d 100644
--- a/fern/products/docs/pages/customization/announcement-banner.mdx
+++ b/fern/products/docs/pages/customization/announcement-banner.mdx
@@ -18,7 +18,7 @@ announcement:
message: "🚀 New feature: Announcements are available! (Learn more) 🚀"
```
-The announcement message supports Markdown and HTML. You can include links, images, and other formatting, including [custom CSS](/docs/customization/custom-css-js#custom-css).
+The announcement message supports Markdown and HTML. You can include links, images, and other formatting, including [custom CSS](/learn/docs/customization/custom-css-js#custom-css).
## Configuring announcements at multiple levels
diff --git a/fern/products/docs/pages/customization/custom-css-js.mdx b/fern/products/docs/pages/customization/custom-css-js.mdx
index 1b9f1ef665..12b69150f2 100644
--- a/fern/products/docs/pages/customization/custom-css-js.mdx
+++ b/fern/products/docs/pages/customization/custom-css-js.mdx
@@ -12,7 +12,7 @@ This page covers CSS and JavaScript customization:
For server-rendered reusable elements in your MDX content, see [Custom React components](/learn/docs/customization/custom-react-components). To replace Fern's default header or footer, see [Custom header and footer](/learn/docs/customization/header-and-footer).
-You can also [customize many things directly in your `docs.yml` file](/docs/configuration/site-level-settings), including colors, typography, navbar links, layout, analytics, and metadata. Try these built-in options first before adding custom code.
+You can also [customize many things directly in your `docs.yml` file](/learn/docs/configuration/site-level-settings), including colors, typography, navbar links, layout, analytics, and metadata. Try these built-in options first before adding custom code.
## Custom CSS
@@ -426,7 +426,7 @@ js:
### Common use cases
- **Third-party integrations:** For tools not natively supported in `docs.yml`, add analytics, session recording, support widgets, or tag managers by pasting their embed snippets into your custom JS file. See [Integrating third-party tools](/learn/docs/integrations/overview#connect-other-integrations-via-custom-javascript) for supported tools and examples.
-- **Custom search:** Implement custom search (also requires [your Algolia credentials](/docs/customization/search))
+- **Custom search:** Implement custom search (also requires [your Algolia credentials](/learn/docs/customization/search))
- **Scripts and widgets:** Insert any client-side scripts or embeddable widgets
\ No newline at end of file
diff --git a/fern/products/docs/pages/customization/custom-header-footer.mdx b/fern/products/docs/pages/customization/custom-header-footer.mdx
index eb79723db2..0ddd648725 100644
--- a/fern/products/docs/pages/customization/custom-header-footer.mdx
+++ b/fern/products/docs/pages/customization/custom-header-footer.mdx
@@ -94,14 +94,14 @@ The following components are available on the `Fern` prop:
| Component | Description |
| --- | --- |
-| `` | Your site [logo](/docs/configuration/site-level-settings#logo-configuration) as configured in `docs.yml`. Links to the homepage. You can target this component with `document.querySelector('#fern-header [data-fern-logo]')`. |
-| `` | The [search](/docs/customization/search) bar, including the AI search trigger if enabled. |
-| `` | Dropdown to switch between [products](/docs/configuration/products). |
-| `` | Dropdown to switch between [versions](/docs/configuration/versions). |
-| `` | Dropdown to switch the active [SDK language](/docs/configuration/site-level-settings#default-language). |
-| `` | The [navigation links](/docs/configuration/site-level-settings#navbar-links-configuration) configured under `navbar-links` in `docs.yml`. |
-| `` | The login/signup button for [authenticated docs](/docs/authentication/overview). |
-| `` | Toggle between [light and dark mode](/docs/configuration/site-level-settings#theme-configuration). |
+| `` | Your site [logo](/learn/docs/configuration/site-level-settings#logo-configuration) as configured in `docs.yml`. Links to the homepage. You can target this component with `document.querySelector('#fern-header [data-fern-logo]')`. |
+| `` | The [search](/learn/docs/customization/search) bar, including the AI search trigger if enabled. |
+| `` | Dropdown to switch between [products](/learn/docs/configuration/products). |
+| `` | Dropdown to switch between [versions](/learn/docs/configuration/versions). |
+| `` | Dropdown to switch the active [SDK language](/learn/docs/configuration/site-level-settings#default-language). |
+| `` | The [navigation links](/learn/docs/configuration/site-level-settings#navbar-links-configuration) configured under `navbar-links` in `docs.yml`. |
+| `` | The login/signup button for [authenticated docs](/learn/docs/authentication/overview). |
+| `` | Toggle between [light and dark mode](/learn/docs/configuration/site-level-settings#theme-configuration). |
| `` | Fern's built-in mobile sidebar toggle button. Shows a hamburger/close icon and opens the dismissible sidebar. Only visible on mobile viewports. |
diff --git a/fern/products/docs/pages/getting-started/project-structure.mdx b/fern/products/docs/pages/getting-started/project-structure.mdx
index 315611be89..0f99c28af0 100644
--- a/fern/products/docs/pages/getting-started/project-structure.mdx
+++ b/fern/products/docs/pages/getting-started/project-structure.mdx
@@ -65,7 +65,7 @@ The `docs.yml` file is the heart of your Fern documentation site. This configura
Fern treats `.yml` and `.yaml` extensions identically. This applies to all YAML files in a Fern project, including `docs.yml`, `generators.yml`, and API specification files.
-For complete configuration options, see the [`docs.yml` reference](/docs/configuration/site-level-settings).
+For complete configuration options, see the [`docs.yml` reference](/learn/docs/configuration/site-level-settings).
```yml
@@ -123,9 +123,9 @@ css: styles.css
## API definitions and `generators.yml`
-To generate [API Reference](/docs/api-references/generate-api-ref) documentation, you need to provide your API definition. OpenAPI and AsyncAPI specs require a `generators.yml` file with an `api.specs` section. You can optionally add a `groups` section for SDK generation.
+To generate [API Reference](/learn/docs/api-references/generate-api-ref) documentation, you need to provide your API definition. OpenAPI and AsyncAPI specs require a `generators.yml` file with an `api.specs` section. You can optionally add a `groups` section for SDK generation.
-Using Fern for both API Reference docs and SDKs? You'll use `docs.yml` for your documentation settings and `generators.yml` to configure [SDK code snippets](/docs/api-references/sdk-snippets) in your API Reference.
+Using Fern for both API Reference docs and SDKs? You'll use `docs.yml` for your documentation settings and `generators.yml` to configure [SDK code snippets](/learn/docs/api-references/sdk-snippets) in your API Reference.
@@ -191,7 +191,7 @@ The `fern.config.json` file stores your organization name and the Fern CLI versi
```
- When working with a locally installed CLI, set `version` to `"*"`. See [Install Fern CLI locally](/cli-api-reference/cli-reference/overview#install-fern-cli-locally) for details.
+ When working with a locally installed CLI, set `version` to `"*"`. See [Install Fern CLI locally](/learn/cli-api-reference/cli-reference/overview#install-fern-cli-locally) for details.
diff --git a/fern/products/docs/pages/getting-started/quickstart.mdx b/fern/products/docs/pages/getting-started/quickstart.mdx
index 26f1366ad3..ac371c1c15 100644
--- a/fern/products/docs/pages/getting-started/quickstart.mdx
+++ b/fern/products/docs/pages/getting-started/quickstart.mdx
@@ -291,7 +291,7 @@ Build and publish a docs site with Fern. Follow the [Docs quickstart](https://bu
- Before publishing, [preview your changes](/docs/preview-publish/preview-changes) in your local development environment or generate shareable preview links.
+ Before publishing, [preview your changes](/learn/docs/preview-publish/preview-changes) in your local development environment or generate shareable preview links.
@@ -337,7 +337,7 @@ Build and publish a docs site with Fern. Follow the [Docs quickstart](https://bu
fern generate --docs --no-prompt
```
- **Authentication**: The CLI checks for a `FERN_TOKEN` environment variable first, then falls back to a cached credential from `fern login`. Running `fern login` once caches the credential locally, so subsequent `fern generate --docs` runs won't prompt for login again. There is no `fern whoami` command. In GitHub Actions, store the API key as a repository secret named `FERN_TOKEN`. See [publishing your docs](/learn/docs/getting-started/publishing-your-docs.md) for full CI workflow examples.
+ **Authentication**: The CLI checks for a `FERN_TOKEN` environment variable first, then falls back to a cached credential from `fern login`. Running `fern login` once caches the credential locally, so subsequent `fern generate --docs` runs won't prompt for login again. There is no `fern whoami` command. In GitHub Actions, store the API key as a repository secret named `FERN_TOKEN`. See [publishing your docs](/learn/docs/preview-publish/publishing-your-docs) for full CI workflow examples.
@@ -407,7 +407,7 @@ Fern Docs compiles MDX content and YAML configuration into a hosted static site
### Configuration file roles
- **`fern.config.json`**: Identifies your organization and pins the CLI version. Required in every Fern project.
-- **`docs.yml`**: Central manifest for the entire site — navigation structure, tabs, branding (colors, logo, favicon, typography), hosting instances, custom domains, navbar links, footer, integrations, redirects, RBAC roles, and AI agent settings. [Full reference](/learn/docs/configuration/site-level-settings.md).
+- **`docs.yml`**: Central manifest for the entire site — navigation structure, tabs, branding (colors, logo, favicon, typography), hosting instances, custom domains, navbar links, footer, integrations, redirects, RBAC roles, and AI agent settings. [Full reference](/learn/docs/configuration/site-level-settings).
- **`generators.yml`**: Points the CLI to your API spec files via the `api.specs` section. Also configures SDK generation.
### Common pitfalls
@@ -425,5 +425,5 @@ instances:
- url: your-org.docs.buildwithfern.com
```
-This is enough to publish (the CLI will build an empty site). In practice, most teams add `navigation` to define the sidebar, plus basic branding — these are shown in the [Customize your docs](#customize-your-docs) step above. The full list of available fields is in the [site-level settings reference](/learn/docs/configuration/site-level-settings.md).
+This is enough to publish (the CLI will build an empty site). In practice, most teams add `navigation` to define the sidebar, plus basic branding — these are shown in the [Customize your docs](#customize-your-docs) step above. The full list of available fields is in the [site-level settings reference](/learn/docs/configuration/site-level-settings).
diff --git a/fern/products/docs/pages/integrations/overview.mdx b/fern/products/docs/pages/integrations/overview.mdx
index 7cd3d03a16..1a6f74fdd6 100644
--- a/fern/products/docs/pages/integrations/overview.mdx
+++ b/fern/products/docs/pages/integrations/overview.mdx
@@ -13,7 +13,7 @@ Fern's [built-in web analytics](/learn/dashboard/metrics/web-analytics) reports
}
iconSize={12}
@@ -21,7 +21,7 @@ Fern's [built-in web analytics](/learn/dashboard/metrics/web-analytics) reports
}
iconSize={12}
@@ -29,7 +29,7 @@ Fern's [built-in web analytics](/learn/dashboard/metrics/web-analytics) reports
@@ -39,7 +39,7 @@ Fern's [built-in web analytics](/learn/dashboard/metrics/web-analytics) reports
}
iconSize={12}
@@ -53,7 +53,7 @@ Fern's [built-in web analytics](/learn/dashboard/metrics/web-analytics) reports
}
iconSize={12}
@@ -61,7 +61,7 @@ Fern's [built-in web analytics](/learn/dashboard/metrics/web-analytics) reports
}
iconSize={12}
@@ -75,7 +75,7 @@ Fern's [built-in web analytics](/learn/dashboard/metrics/web-analytics) reports
}
iconSize={12}
@@ -83,7 +83,7 @@ Fern's [built-in web analytics](/learn/dashboard/metrics/web-analytics) reports
}
iconSize={12}
@@ -133,7 +133,7 @@ If you use GitHub Workflows to trigger docs generation, the environment variable
-You can integrate third-party tools that Fern doesn't natively support in `docs.yml` using [custom JavaScript](/docs/customization/custom-css-js#custom-javascript), as long as they support HTML tag-based installation. This works with tools like:
+You can integrate third-party tools that Fern doesn't natively support in `docs.yml` using [custom JavaScript](/learn/docs/customization/custom-css-js#custom-javascript), as long as they support HTML tag-based installation. This works with tools like:
- **Analytics:** Amplitude, Heap, Plausible
- **Session recording:** Hotjar, LogRocket, Microsoft Clarity
diff --git a/fern/products/docs/pages/navigation/frontmatter.mdx b/fern/products/docs/pages/navigation/frontmatter.mdx
index 08393ddee7..d46d355fa5 100644
--- a/fern/products/docs/pages/navigation/frontmatter.mdx
+++ b/fern/products/docs/pages/navigation/frontmatter.mdx
@@ -8,7 +8,7 @@ description: Use frontmatter to set a variety of page properties and metadata.
You can optionally use frontmatter to set each page's title, slug override, meta description, a URL to suggest edits to the page, and its OpenGraph image. You can also use frontmatter to disable certain page elements like the table of contents, on-page feedback, and page actions.
- For advanced styling and functionality customizations beyond frontmatter options, see [custom CSS and JavaScript](/docs/customization/custom-css-js).
+ For advanced styling and functionality customizations beyond frontmatter options, see [custom CSS and JavaScript](/learn/docs/customization/custom-css-js).
## Frontmatter syntax
@@ -378,7 +378,7 @@ This is useful when you want to set availability for individual pages without mo
## Changelog tags
- For [changelog pages](/docs/configuration/changelogs) only. Tags allow users to filter changelog entries by specific categories. Define tags as an array of strings in the frontmatter.
+ For [changelog pages](/learn/docs/configuration/changelogs) only. Tags allow users to filter changelog entries by specific categories. Define tags as an array of strings in the frontmatter.
diff --git a/fern/products/docs/pages/navigation/products.mdx b/fern/products/docs/pages/navigation/products.mdx
index 958795c3dd..a0efbb61a0 100644
--- a/fern/products/docs/pages/navigation/products.mdx
+++ b/fern/products/docs/pages/navigation/products.mdx
@@ -274,7 +274,7 @@ If your product-specific `.yml` files for **versioned products** includes a `nav
### Add instance audiences
-Control which versions and/or products appear in each [documentation instance](/docs/configuration/site-level-settings#instances-configuration) by tagging them with audiences. This enables separate sites for different user groups (e.g., internal developers, beta testers, public customers).
+Control which versions and/or products appear in each [documentation instance](/learn/docs/configuration/site-level-settings#instances-configuration) by tagging them with audiences. This enables separate sites for different user groups (e.g., internal developers, beta testers, public customers).
Content is filtered based on audience tags:
@@ -317,7 +317,7 @@ products:
-Instance audiences work alongside [API Reference audiences](/docs/api-references/audiences), which filter endpoints and schemas within your API documentation. You can use both features together:
+Instance audiences work alongside [API Reference audiences](/learn/docs/api-references/audiences), which filter endpoints and schemas within your API documentation. You can use both features together:
- **Instance audiences** - Control which products and versions appear in each instance
- **API Reference audiences** - Control which endpoints and schemas appear within API References
diff --git a/fern/products/docs/pages/navigation/site-level-settings.mdx b/fern/products/docs/pages/navigation/site-level-settings.mdx
index c3699b8ef7..f6b7604622 100644
--- a/fern/products/docs/pages/navigation/site-level-settings.mdx
+++ b/fern/products/docs/pages/navigation/site-level-settings.mdx
@@ -6,7 +6,7 @@ max-toc-depth: 2
---
-The `docs.yml` file is your primary tool for customizing colors, typography, layout, analytics, and more across your documentation site. Start here for most customization needs before considering [custom CSS and JavaScript](/docs/customization/custom-css-js) for advanced use cases.
+The `docs.yml` file is your primary tool for customizing colors, typography, layout, analytics, and more across your documentation site. Start here for most customization needs before considering [custom CSS and JavaScript](/learn/docs/customization/custom-css-js) for advanced use cases.
### YAML Schema Validation
@@ -155,7 +155,7 @@ instances:
Specify which audiences this instance serves (e.g., internal developers, beta testers, public customers).
- You 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. Learn more about configuring instance audiences for [products and/or versions](/docs/configuration/products#add-instance-audiences).
+ You 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. Learn more about configuring instance audiences for [products and/or versions](/learn/docs/configuration/products#add-instance-audiences).
@@ -779,7 +779,7 @@ settings:
- Controls the display of [HTTP snippets in the API Reference](/docs/api-references/http-snippets). HTTP snippets are enabled by default for all languages.
+ Controls the display of [HTTP snippets in the API Reference](/learn/docs/api-references/http-snippets). HTTP snippets are enabled by default for all languages.
- Set to `false` to disable HTTP snippets completely
- Provide a list of languages to enable snippets for specific languages only
@@ -1048,7 +1048,7 @@ landing-page:
Configure site-wide Open Graph and Twitter Card metadata to control how your documentation appears in social media previews and search results.
- [Use the `keywords` property in a page's frontmatter](/docs/configuration/page-level-settings#seo-metadata).
+ [Use the `keywords` property in a page's frontmatter](/learn/docs/configuration/page-level-settings#seo-metadata).
@@ -1337,7 +1337,7 @@ experimental:
```
- Controls dynamic SDK snippets that allow users to modify parameters and see code examples update in real time. Dynamic snippets are enabled by default and supported across all languages. Follow the [SDK snippets setup instructions](/docs/api-references/sdk-snippets) to configure. Set to false to use static SDK snippets instead.
+ Controls dynamic SDK snippets that allow users to modify parameters and see code examples update in real time. Dynamic snippets are enabled by default and supported across all languages. Follow the [SDK snippets setup instructions](/learn/docs/api-references/sdk-snippets) to configure. Set to false to use static SDK snippets instead.
diff --git a/fern/products/docs/pages/navigation/versions.mdx b/fern/products/docs/pages/navigation/versions.mdx
index 307f452398..84c5e1e651 100644
--- a/fern/products/docs/pages/navigation/versions.mdx
+++ b/fern/products/docs/pages/navigation/versions.mdx
@@ -45,7 +45,7 @@ Version-specific `yml` files:
-You can also have [multiple products, some versioned and some unversioned](/docs/configuration/products).
+You can also have [multiple products, some versioned and some unversioned](/learn/docs/configuration/products).
@@ -146,7 +146,7 @@ In this example, setting `slug: v3` produces URLs like `/docs/v3/getting-started
-Control which versions appear in each [documentation instance](/docs/configuration/site-level-settings#instances-configuration) by tagging them with audiences. This enables separate sites for different user groups (e.g., internal developers, beta testers, public customers).
+Control which versions appear in each [documentation instance](/learn/docs/configuration/site-level-settings#instances-configuration) by tagging them with audiences. This enables separate sites for different user groups (e.g., internal developers, beta testers, public customers).
Content is filtered based on audience tags:
diff --git a/fern/products/docs/pages/preview-publish/publishing-your-docs.mdx b/fern/products/docs/pages/preview-publish/publishing-your-docs.mdx
index 1d4fcc7add..9c0badd4fc 100644
--- a/fern/products/docs/pages/preview-publish/publishing-your-docs.mdx
+++ b/fern/products/docs/pages/preview-publish/publishing-your-docs.mdx
@@ -182,11 +182,11 @@ To deploy to production, go to the **Actions** tab in your GitHub repository, se
## Hosting
-When you publish your docs, Fern takes care of hosting them for you. You can also [publish your docs to a custom domain](/docs/preview-publish/setting-up-your-domain).
+When you publish your docs, Fern takes care of hosting them for you. You can also [publish your docs to a custom domain](/learn/docs/preview-publish/setting-up-your-domain).
### Self-hosting your docs
-If you need access to your docs offline or would like to host your docs on your own server, Fern [offers that option as well](/docs/self-hosted/overview). Self-hosted docs have limited access to certain features (including Ask Fern and analytics).
+If you need access to your docs offline or would like to host your docs on your own server, Fern [offers that option as well](/learn/docs/self-hosted/overview). Self-hosted docs have limited access to certain features (including Ask Fern and analytics).
## Unpublishing your docs
diff --git a/fern/products/docs/pages/seo/redirects.mdx b/fern/products/docs/pages/seo/redirects.mdx
index 328b895c69..37789cf1c4 100644
--- a/fern/products/docs/pages/seo/redirects.mdx
+++ b/fern/products/docs/pages/seo/redirects.mdx
@@ -73,7 +73,7 @@ redirects:
destination: / # Don't do this
```
-Instead, [enable automatic homepage redirects in your `docs.yml`](/docs/configuration/site-level-settings#settings-configuration) to send broken links to your homepage rather than showing a 404 page:
+Instead, [enable automatic homepage redirects in your `docs.yml`](/learn/docs/configuration/site-level-settings#settings-configuration) to send broken links to your homepage rather than showing a 404 page:
```yaml title="docs.yml"
settings:
@@ -83,7 +83,7 @@ settings:
-If you have [versions](/docs/configuration/versions) configured, your default version uses unversioned paths (`/docs/getting-started`), while other versions use versioned paths (`/docs/v2/getting-started`). Fern automatically handles version routing by redirecting broken versioned links to the default version and managing canonical URLs.
+If you have [versions](/learn/docs/configuration/versions) configured, your default version uses unversioned paths (`/docs/getting-started`), while other versions use versioned paths (`/docs/v2/getting-started`). Fern automatically handles version routing by redirecting broken versioned links to the default version and managing canonical URLs.
Avoid redirecting from unversioned to versioned URLs:
diff --git a/fern/products/docs/snippets/default-version.mdx b/fern/products/docs/snippets/default-version.mdx
index 2b29dc79e7..1da0f2953b 100644
--- a/fern/products/docs/snippets/default-version.mdx
+++ b/fern/products/docs/snippets/default-version.mdx
@@ -2,5 +2,5 @@
Versions appear in a dropdown on your site in the order listed in `docs.yml`. The first version in your `versions` list is the default version and uses unversioned paths like `example.com/getting-started`. Other versions use versioned paths like `example.com/v2/getting-started`.
- Fern automatically handles version routing by [redirecting](/docs/seo/redirects) broken versioned links to the default version. Canonical URLs point to the unversioned path to consolidate SEO signals. To override this for version-specific pages, see [SEO metadata](/learn/docs/seo/setting-seo-metadata#canonical-url).
+ Fern automatically handles version routing by [redirecting](/learn/docs/seo/redirects) broken versioned links to the default version. Canonical URLs point to the unversioned path to consolidate SEO signals. To override this for version-specific pages, see [SEO metadata](/learn/docs/seo/setting-seo-metadata#canonical-url).
diff --git a/fern/products/home/pages/welcome.mdx b/fern/products/home/pages/welcome.mdx
index d2df33fa04..c7d982f404 100644
--- a/fern/products/home/pages/welcome.mdx
+++ b/fern/products/home/pages/welcome.mdx
@@ -31,7 +31,7 @@ layout: custom
{/* SDKs Card */}
-
+
-
+
{/* Python */}
-
+
{/* Go */}
-
+
{/* Java */}
-
+
{/* C# */}
-
+
{/* PHP */}
-
+
{/* Ruby */}
-
+
{/* Swift */}
-
+
{/* Rust */}
-
+
@@ -384,23 +384,23 @@ layout: custom
Generate client libraries in multiple languages.
-Get started with: [TypeScript](/sdks/generators/typescript/quickstart), [Python](/sdks/generators/python/quickstart), [Go](/sdks/generators/go/quickstart), [Java](/sdks/generators/java/quickstart), [C#](/sdks/generators/csharp/quickstart), [PHP](/sdks/generators/php/quickstart), [Ruby](/learn/sdks/generators/ruby/quickstart), [Swift](/sdks/generators/swift/quickstart), [Rust](/sdks/generators/rust/quickstart)
+Get started with: [TypeScript](/learn/sdks/generators/typescript/quickstart), [Python](/learn/sdks/generators/python/quickstart), [Go](/learn/sdks/generators/go/quickstart), [Java](/learn/sdks/generators/java/quickstart), [C#](/learn/sdks/generators/csharp/quickstart), [PHP](/learn/sdks/generators/php/quickstart), [Ruby](/learn/sdks/generators/ruby/quickstart), [Swift](/learn/sdks/generators/swift/quickstart), [Rust](/learn/sdks/generators/rust/quickstart)
-- [Introduction](/sdks/overview/introduction)
-- [Quickstart](/sdks/overview/quickstart)
+- [Introduction](/learn/sdks/overview/introduction)
+- [Quickstart](/learn/sdks/overview/quickstart)
- [Customers](https://buildwithfern.com/showcase)
## Docs
A beautiful, interactive documentation website.
-- [Introduction](/docs/getting-started/capabilities)
-- [Quickstart](/docs/getting-started/quickstart)
-- [AI features](/docs/ai-features/overview)
-- [Fern Editor](/docs/writing-content/fern-editor)
-- [Bring your own API spec](/docs/api-references/generate-api-ref)
-- [Gate docs by role](/docs/authentication/features/rbac)
-- [Self-host your docs](/docs/self-hosted/overview)
+- [Introduction](/learn/docs/getting-started/capabilities)
+- [Quickstart](/learn/docs/getting-started/quickstart)
+- [AI features](/learn/docs/ai-features/overview)
+- [Fern Editor](/learn/docs/writing-content/fern-editor)
+- [Bring your own API spec](/learn/docs/api-references/generate-api-ref)
+- [Gate docs by role](/learn/docs/authentication/features/rbac)
+- [Self-host your docs](/learn/docs/self-hosted/overview)
- [Customers](https://buildwithfern.com/showcase#docs-customers.alldocs-features)
## Ask Fern
@@ -415,14 +415,14 @@ AI search to find answers in your documentation instantly.
Select one or more specs to generate SDKs and Docs.
-- [OpenAPI](/api-definitions/openapi/overview)
-- [AsyncAPI](/api-definitions/asyncapi/overview)
-- [OpenRPC](/api-definitions/openrpc/overview)
-- [gRPC](/api-definitions/grpc/overview)
+- [OpenAPI](/learn/api-definitions/openapi/overview)
+- [AsyncAPI](/learn/api-definitions/asyncapi/overview)
+- [OpenRPC](/learn/api-definitions/openrpc/overview)
+- [gRPC](/learn/api-definitions/grpc/overview)
## Community
-- [Changelog](/docs/changelog): See the most recent product updates.
+- [Changelog](/learn/docs/changelog): See the most recent product updates.
- [GitHub](https://github.com/fern-api/fern): Follow progress and contribute to the codebase.
- [X](https://x.com/buildwithfern): Get updates on the Fern platform.
diff --git a/fern/products/sdks/capabilities.mdx b/fern/products/sdks/capabilities.mdx
index ffb52c3973..537dc756f8 100644
--- a/fern/products/sdks/capabilities.mdx
+++ b/fern/products/sdks/capabilities.mdx
@@ -26,7 +26,7 @@ layout: overview
-
+
Fine-tune SDK resources and method names
@@ -39,7 +39,7 @@ layout: overview
-
+
Fail fast if payloads diverge from your schema
@@ -51,7 +51,7 @@ layout: overview
-
+
Fern SDKs include support for discriminated unions
@@ -95,7 +95,7 @@ layout: overview
-
+
Paginate through API responses easily with offset, cursor, and link-based pagination.
@@ -108,7 +108,7 @@ layout: overview
-
+
Fern supports OAuth as a first class citizen
@@ -121,7 +121,7 @@ layout: overview
-
+
Automatically retry failed requests with exponential backoff
@@ -147,7 +147,7 @@ layout: overview
-
+
Built-in protection against duplicate submissions
@@ -173,7 +173,7 @@ layout: overview
-
+
Auto-generated and handwritten tests to ensure your SDK works in production
@@ -186,7 +186,7 @@ layout: overview
-
+
No longer depend on manually written code snippets
@@ -199,7 +199,7 @@ layout: overview
-
+
Extend the generated SDK to provide additional functionality
@@ -212,7 +212,7 @@ layout: overview
-
+
Multiple API definitions. One SDK.
@@ -225,7 +225,7 @@ layout: overview
-
+
Generate typed WebSocket clients with connection management and reconnection
@@ -246,22 +246,22 @@ Fern SDKs include the following capabilities:
- **Strongly typed**: Move fast and break nothing with type safety.
- **IDE support**: Rich autocomplete and inline documentation in your editor. [Learn more](/learn/sdks/deep-dives/sdk-user-features#ide-support-and-intellisense)
-- **Idiomatic method names**: Fine-tune SDK resources and method names. [Learn more](/sdks/deep-dives/customize-method-names)
-- **Schema validation**: Fail fast if payloads diverge from your schema. [Learn more](/sdks/deep-dives/testing#mock-server-tests)
-- **Discriminated unions**: Support for discriminated unions. [Learn more](/api-definitions/ferndef/types#discriminated-unions)
+- **Idiomatic method names**: Fine-tune SDK resources and method names. [Learn more](/learn/sdks/deep-dives/customize-method-names)
+- **Schema validation**: Fail fast if payloads diverge from your schema. [Learn more](/learn/sdks/deep-dives/testing#mock-server-tests)
+- **Discriminated unions**: Support for discriminated unions. [Learn more](/learn/api-definitions/ferndef/types#discriminated-unions)
- **Multipart form data**: SDKs that handle multipart form data.
- **Forward compatibility**: SDKs that are fault-tolerant as your API evolves.
- **Automated releases**: Automatically detects API changes, regenerates SDKs, and publishes to registries. [Learn more](/learn/sdks/overview/autorelease)
-- **Auto-pagination**: Paginate through API responses using offset, cursor, and link-based pagination. [Learn more](/sdks/deep-dives/auto-pagination)
-- **OAuth token refresh**: First-class OAuth support. [Learn more](/sdks/reference/generators-yml#oauth)
-- **Retries with backoff**: Automatically retry failed requests with exponential backoff. [Learn more](/sdks/deep-dives/retries-with-backoff)
+- **Auto-pagination**: Paginate through API responses using offset, cursor, and link-based pagination. [Learn more](/learn/sdks/deep-dives/auto-pagination)
+- **OAuth token refresh**: First-class OAuth support. [Learn more](/learn/sdks/reference/generators-yml#oauth)
+- **Retries with backoff**: Automatically retry failed requests with exponential backoff. [Learn more](/learn/sdks/deep-dives/retries-with-backoff)
- **Webhook signature verification**: Verify the signature of incoming webhook requests. [Learn more](/learn/sdks/deep-dives/webhook-signature-verification)
-- **Idempotency headers**: Built-in protection against duplicate submissions. [Learn more](/sdks/deep-dives/idempotency)
+- **Idempotency headers**: Built-in protection against duplicate submissions. [Learn more](/learn/sdks/deep-dives/idempotency)
- **Server-sent events**: Stream JSON data from your server to your client, with opt-in access to [SSE metadata](/learn/sdks/deep-dives/sse-metadata) (event ID, event type, retry) and [automatic reconnection](/learn/sdks/deep-dives/sse-metadata#automatic-reconnection) for resumable endpoints. [Learn more](/learn/sdks/deep-dives/sse-metadata)
-- **Testing**: Auto-generated and handwritten tests for your SDK. [Learn more](/sdks/deep-dives/testing)
-- **Code snippets**: No longer depend on manually written code snippets. [Learn more](/docs/api-references/sdk-snippets)
-- **Augment with custom code**: Extend the generated SDK with additional functionality. [Learn more](/sdks/overview/custom-code)
-- **Merging multiple APIs**: Multiple API definitions, one SDK. [Learn more](/api-definitions/overview/project-structure#multiple-apis)
-- **WebSockets**: Generate typed WebSocket clients with connection management and reconnection. [Learn more](/sdks/deep-dives/websocket-clients)
+- **Testing**: Auto-generated and handwritten tests for your SDK. [Learn more](/learn/sdks/deep-dives/testing)
+- **Code snippets**: No longer depend on manually written code snippets. [Learn more](/learn/docs/api-references/sdk-snippets)
+- **Augment with custom code**: Extend the generated SDK with additional functionality. [Learn more](/learn/sdks/overview/custom-code)
+- **Merging multiple APIs**: Multiple API definitions, one SDK. [Learn more](/learn/api-definitions/overview/project-structure#multiple-apis)
+- **WebSockets**: Generate typed WebSocket clients with connection management and reconnection. [Learn more](/learn/sdks/deep-dives/websocket-clients)
diff --git a/fern/products/sdks/custom-code.mdx b/fern/products/sdks/custom-code.mdx
index 5e076c1581..f27e618ab3 100644
--- a/fern/products/sdks/custom-code.mdx
+++ b/fern/products/sdks/custom-code.mdx
@@ -94,11 +94,11 @@ To disable Replay, set `replay.enabled: false` at the top level of `generators.y
Each SDK generator has its own conventions for adding custom code: how to extend the generated client, where helpers go, how to declare dependencies. See the guide for your language:
- } href="/sdks/generators/typescript/custom-code" />
- } href="/sdks/generators/python/custom-code" />
+ } href="/learn/sdks/generators/typescript/custom-code" />
+ } href="/learn/sdks/generators/python/custom-code" />
} href="/learn/sdks/generators/go/custom-code" />
} href="/learn/sdks/generators/java/custom-code" />
- } href="/sdks/generators/csharp/custom-code" />
- } href="/sdks/generators/php/custom-code" />
- } href="/sdks/generators/ruby/custom-code" />
+ } href="/learn/sdks/generators/csharp/custom-code" />
+ } href="/learn/sdks/generators/php/custom-code" />
+ } href="/learn/sdks/generators/ruby/custom-code" />
diff --git a/fern/products/sdks/deep-dives/dynamic-authentication.mdx b/fern/products/sdks/deep-dives/dynamic-authentication.mdx
index b4a4c45c43..8bdc264e61 100644
--- a/fern/products/sdks/deep-dives/dynamic-authentication.mdx
+++ b/fern/products/sdks/deep-dives/dynamic-authentication.mdx
@@ -11,10 +11,10 @@ Your API may require dynamic authentication where credentials need to be generat
Each language has its own recommended approach for implementing dynamic authentication:
-
+
Use custom fetcher middleware to inject authentication logic in a single place for all requests. Supports JWT signing, OAuth token refresh, and more.
-
+
Use method overrides to inject authentication logic for each API call. Supports JWT signing, OAuth token refresh, and more.
@@ -52,6 +52,6 @@ When implementing dynamic authentication, keep these language-agnostic considera
## See also
-- [Adding custom code](/sdks/overview/custom-code) - Learn more about extending generated SDKs
-- [TypeScript custom code](/sdks/generators/typescript/custom-code) - TypeScript-specific customization guide
-- [Python custom code](/sdks/generators/python/custom-code) - Python-specific customization guide
+- [Adding custom code](/learn/sdks/overview/custom-code) - Learn more about extending generated SDKs
+- [TypeScript custom code](/learn/sdks/generators/typescript/custom-code) - TypeScript-specific customization guide
+- [Python custom code](/learn/sdks/generators/python/custom-code) - Python-specific customization guide
diff --git a/fern/products/sdks/deep-dives/generated-sdk.mdx b/fern/products/sdks/deep-dives/generated-sdk.mdx
index f440e3a059..ca163f78e9 100644
--- a/fern/products/sdks/deep-dives/generated-sdk.mdx
+++ b/fern/products/sdks/deep-dives/generated-sdk.mdx
@@ -76,7 +76,7 @@ Your SDK users can configure individual requests using language-specific options
| Option | Description | Availability |
|--------|-------------|--------------|
| Timeouts | Configure request timeouts (default: 30 seconds for [C#](/learn/sdks/generators/csharp/configuration#default-timeout-in-milliseconds) and PHP, 60 seconds for all other languages) | All languages |
-| [Retries](/sdks/deep-dives/retries-with-backoff) | Configure maximum retries (default: 2 with exponential backoff for 408, 429, and 5xx responses) | All languages except Ruby and Swift |
+| [Retries](/learn/sdks/deep-dives/retries-with-backoff) | Configure maximum retries (default: 2 with exponential backoff for 408, 429, and 5xx responses) | All languages except Ruby and Swift |
| Custom HTTP client | Override the default HTTP client for unsupported environments or custom requirements | TypeScript, Python, Java, PHP, and Swift |
| [aiohttp transport](/learn/sdks/generators/python/aiohttp-support) | Opt into `aiohttp` as the async HTTP transport to resolve DNS concurrency bottlenecks | Python only |
| Custom headers | Send additional headers with any request | TypeScript, Java, and Swift |
diff --git a/fern/products/sdks/deep-dives/self-hosted.mdx b/fern/products/sdks/deep-dives/self-hosted.mdx
index 609423a85c..08c931ef20 100644
--- a/fern/products/sdks/deep-dives/self-hosted.mdx
+++ b/fern/products/sdks/deep-dives/self-hosted.mdx
@@ -7,7 +7,7 @@ description: Fern supports self-hosting SDK generation so that you can run SDK g
-Fern SDK generation [runs on Fern's infrastructure by default](/sdks/overview/how-it-works). Self-hosting allows you to run SDK generation on your own infrastructure. Use self-hosting if your organization:
+Fern SDK generation [runs on Fern's infrastructure by default](/learn/sdks/overview/how-it-works). Self-hosting allows you to run SDK generation on your own infrastructure. Use self-hosting if your organization:
- Operates without internet access
- Has strict compliance or security requirements
@@ -33,8 +33,8 @@ Each machine that runs `fern generate --local` needs:
This page assumes that you have:
-* An initialized `fern` folder. See [Set up the `fern` folder](/sdks/overview/quickstart).
-* SDK generators configured in `generators.yml`. See language-specific quickstarts: [TypeScript](/sdks/generators/typescript/quickstart), [Python](/sdks/generators/python/quickstart), [Go](/sdks/generators/go/quickstart), [Java](/sdks/generators/java/quickstart), etc.
+* An initialized `fern` folder. See [Set up the `fern` folder](/learn/sdks/overview/quickstart).
+* SDK generators configured in `generators.yml`. See language-specific quickstarts: [TypeScript](/learn/sdks/generators/typescript/quickstart), [Python](/learn/sdks/generators/python/quickstart), [Go](/learn/sdks/generators/go/quickstart), [Java](/learn/sdks/generators/java/quickstart), etc.
Self-hosted SDK generation allows you to output to your local file system or push directly to a GitHub repository you control. Follow these steps to set up and run local generation:
diff --git a/fern/products/sdks/generators/csharp/quickstart.mdx b/fern/products/sdks/generators/csharp/quickstart.mdx
index b1ff74e55e..0988ab7a17 100644
--- a/fern/products/sdks/generators/csharp/quickstart.mdx
+++ b/fern/products/sdks/generators/csharp/quickstart.mdx
@@ -59,7 +59,7 @@ fern generate --group csharp-sdk
```
- If you have multiple APIs, use the [`--api` flag](/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
+ If you have multiple APIs, use the [`--api` flag](/learn/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
```bash
fern generate --group csharp-sdk --api your-api-name
diff --git a/fern/products/sdks/generators/go/configuration.mdx b/fern/products/sdks/generators/go/configuration.mdx
index e480de85fa..d82d4fc39d 100644
--- a/fern/products/sdks/generators/go/configuration.mdx
+++ b/fern/products/sdks/generators/go/configuration.mdx
@@ -59,7 +59,7 @@ When enabled, the generated SDK sends a single structured `User-Agent` header of
-Generates [mock server (wire) tests](/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends the correct HTTP requests and correctly handles responses per the API spec. When enabled, Docker is required as a runtime dependency to run the generated tests.
+Generates [mock server (wire) tests](/learn/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends the correct HTTP requests and correctly handles responses per the API spec. When enabled, Docker is required as a runtime dependency to run the generated tests.
diff --git a/fern/products/sdks/generators/go/quickstart.mdx b/fern/products/sdks/generators/go/quickstart.mdx
index f9a6154a17..4cf5fd1534 100644
--- a/fern/products/sdks/generators/go/quickstart.mdx
+++ b/fern/products/sdks/generators/go/quickstart.mdx
@@ -59,7 +59,7 @@ fern generate --group go-sdk
```
- If you have multiple APIs, use the [`--api` flag](/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
+ If you have multiple APIs, use the [`--api` flag](/learn/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
```bash
fern generate --group go-sdk --api your-api-name
diff --git a/fern/products/sdks/generators/java/configuration.mdx b/fern/products/sdks/generators/java/configuration.mdx
index 1e8cb8e54f..7a914032f6 100644
--- a/fern/products/sdks/generators/java/configuration.mdx
+++ b/fern/products/sdks/generators/java/configuration.mdx
@@ -79,7 +79,7 @@ When enabled, generates public constructors for model types.
-When enabled, generates [mock server (wire) tests](/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends and receives HTTP requests as expected.
+When enabled, generates [mock server (wire) tests](/learn/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends and receives HTTP requests as expected.
diff --git a/fern/products/sdks/generators/java/publishing-to-maven-central.mdx b/fern/products/sdks/generators/java/publishing-to-maven-central.mdx
index c7df0ff56c..d7352786ef 100644
--- a/fern/products/sdks/generators/java/publishing-to-maven-central.mdx
+++ b/fern/products/sdks/generators/java/publishing-to-maven-central.mdx
@@ -16,7 +16,7 @@ page, you'll have a versioned package published on Maven Central.
## Configure Maven Central publication
-You'll need to update your `generators.yml` file to configure the output location, target repository, and publishing mode. Your `generators.yml` [should live in your source repository](/sdks/overview/project-structure) (or on your local machine), not the repository that contains your Java SDK code.
+You'll need to update your `generators.yml` file to configure the output location, target repository, and publishing mode. Your `generators.yml` [should live in your source repository](/learn/sdks/overview/project-structure) (or on your local machine), not the repository that contains your Java SDK code.
diff --git a/fern/products/sdks/generators/java/quickstart.mdx b/fern/products/sdks/generators/java/quickstart.mdx
index 31427dd822..82af101ba3 100644
--- a/fern/products/sdks/generators/java/quickstart.mdx
+++ b/fern/products/sdks/generators/java/quickstart.mdx
@@ -59,7 +59,7 @@ fern generate --group java-sdk
```
- If you have multiple APIs, use the [`--api` flag](/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
+ If you have multiple APIs, use the [`--api` flag](/learn/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
```bash
fern generate --group java-sdk --api your-api-name
diff --git a/fern/products/sdks/generators/php/configuration.mdx b/fern/products/sdks/generators/php/configuration.mdx
index b330555d07..16b425ef76 100644
--- a/fern/products/sdks/generators/php/configuration.mdx
+++ b/fern/products/sdks/generators/php/configuration.mdx
@@ -31,7 +31,7 @@ Allows customization of the generated `composer.json` file contents. You can spe
-When enabled, generates [mock server (wire) tests](/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends and receives HTTP requests as expected.
+When enabled, generates [mock server (wire) tests](/learn/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends and receives HTTP requests as expected.
diff --git a/fern/products/sdks/generators/php/quickstart.mdx b/fern/products/sdks/generators/php/quickstart.mdx
index 70a9838580..f251a200d7 100644
--- a/fern/products/sdks/generators/php/quickstart.mdx
+++ b/fern/products/sdks/generators/php/quickstart.mdx
@@ -59,7 +59,7 @@ fern generate --group php-sdk
```
- If you have multiple APIs, use the [`--api` flag](/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
+ If you have multiple APIs, use the [`--api` flag](/learn/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
```bash
fern generate --group php-sdk --api your-api-name
diff --git a/fern/products/sdks/generators/python/configuration.mdx b/fern/products/sdks/generators/python/configuration.mdx
index ab2ed0a281..12040ca7df 100644
--- a/fern/products/sdks/generators/python/configuration.mdx
+++ b/fern/products/sdks/generators/python/configuration.mdx
@@ -70,7 +70,7 @@ The default number of retries for failed requests in the generated SDK. Set to `
-When enabled, generates [mock server (wire) tests](/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends and receives HTTP requests as expected.
+When enabled, generates [mock server (wire) tests](/learn/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends and receives HTTP requests as expected.
diff --git a/fern/products/sdks/generators/python/dynamic-authentication.mdx b/fern/products/sdks/generators/python/dynamic-authentication.mdx
index b821705192..4810341f87 100644
--- a/fern/products/sdks/generators/python/dynamic-authentication.mdx
+++ b/fern/products/sdks/generators/python/dynamic-authentication.mdx
@@ -145,5 +145,5 @@ This same pattern works for other dynamic authentication scenarios:
## See also
-- [Adding custom code](/sdks/generators/python/custom-code) - Python-specific customization guide
-- [Python configuration](/sdks/generators/python/configuration) - Full list of configuration options
+- [Adding custom code](/learn/sdks/generators/python/custom-code) - Python-specific customization guide
+- [Python configuration](/learn/sdks/generators/python/configuration) - Full list of configuration options
diff --git a/fern/products/sdks/generators/python/publishing-to-pypi.mdx b/fern/products/sdks/generators/python/publishing-to-pypi.mdx
index 9c08507c67..1f6de7383d 100644
--- a/fern/products/sdks/generators/python/publishing-to-pypi.mdx
+++ b/fern/products/sdks/generators/python/publishing-to-pypi.mdx
@@ -33,7 +33,7 @@ Default to OIDC authentication unless the user has a specific reason to use toke
## Configure SDK package settings
-Update your `generators.yml` file to configure the package name, output location, and client naming for PyPI publishing. Your `generators.yml` [should live in your source repository](/sdks/overview/project-structure) (or on your local machine), not the repository that contains your Python SDK code.
+Update your `generators.yml` file to configure the package name, output location, and client naming for PyPI publishing. Your `generators.yml` [should live in your source repository](/learn/sdks/overview/project-structure) (or on your local machine), not the repository that contains your Python SDK code.
diff --git a/fern/products/sdks/generators/python/quickstart.mdx b/fern/products/sdks/generators/python/quickstart.mdx
index 3bb852b730..6cb2c9b9f8 100644
--- a/fern/products/sdks/generators/python/quickstart.mdx
+++ b/fern/products/sdks/generators/python/quickstart.mdx
@@ -55,7 +55,7 @@ fern generate --group python-sdk
```
- If you have multiple APIs, use the [`--api` flag](/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
+ If you have multiple APIs, use the [`--api` flag](/learn/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
```bash
fern generate --group python-sdk --api your-api-name
diff --git a/fern/products/sdks/generators/ruby/configuration.mdx b/fern/products/sdks/generators/ruby/configuration.mdx
index 5367712ed8..4a155245e3 100644
--- a/fern/products/sdks/generators/ruby/configuration.mdx
+++ b/fern/products/sdks/generators/ruby/configuration.mdx
@@ -51,7 +51,7 @@ The content supports template variables like `{{ packageName }}` that are replac
-When enabled, generates [mock server (wire) tests](/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends and receives HTTP requests as expected.
+When enabled, generates [mock server (wire) tests](/learn/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends and receives HTTP requests as expected.
diff --git a/fern/products/sdks/generators/ruby/quickstart.mdx b/fern/products/sdks/generators/ruby/quickstart.mdx
index 9e9edac83c..f1b5709a0b 100644
--- a/fern/products/sdks/generators/ruby/quickstart.mdx
+++ b/fern/products/sdks/generators/ruby/quickstart.mdx
@@ -59,7 +59,7 @@ fern generate --group ruby-sdk
```
- If you have multiple APIs, use the [`--api` flag](/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
+ If you have multiple APIs, use the [`--api` flag](/learn/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
```bash
fern generate --group ruby-sdk --api your-api-name
diff --git a/fern/products/sdks/generators/swift/configuration.mdx b/fern/products/sdks/generators/swift/configuration.mdx
index 20b8c352c7..a084922c45 100644
--- a/fern/products/sdks/generators/swift/configuration.mdx
+++ b/fern/products/sdks/generators/swift/configuration.mdx
@@ -37,7 +37,7 @@ The default number of retries for failed requests. When not set, the generated S
-Generates [mock server (wire) tests](/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends the correct HTTP requests and correctly handles responses per the API spec.
+Generates [mock server (wire) tests](/learn/sdks/deep-dives/testing#mock-server-tests) to verify that the SDK sends the correct HTTP requests and correctly handles responses per the API spec.
diff --git a/fern/products/sdks/generators/typescript/configuration.mdx b/fern/products/sdks/generators/typescript/configuration.mdx
index 1627630dae..7bf47bb8c6 100644
--- a/fern/products/sdks/generators/typescript/configuration.mdx
+++ b/fern/products/sdks/generators/typescript/configuration.mdx
@@ -21,7 +21,7 @@ groups:
Allow fields that are not defined in object schemas. This only applies to serde.
-See [TypeScript serde layer](/sdks/generators/typescript/serde-layer) for more information.
+See [TypeScript serde layer](/learn/sdks/generators/typescript/serde-layer) for more information.
@@ -391,7 +391,7 @@ Controls whether the serde layer is enabled for serialization/deserialization.
When `noSerdeLayer: false`, the generated client includes custom serialization code that transforms property names to camelCase, validates requests/responses at runtime, and supports complex types.
-See [TypeScript serde layer](/sdks/generators/typescript/serde-layer) for detailed guidance on when to enable this option.
+See [TypeScript serde layer](/learn/sdks/generators/typescript/serde-layer) for detailed guidance on when to enable this option.
@@ -440,7 +440,7 @@ config:
email: developers@acmecorp.com
```
-You can also use `packageJson.exports` to register custom subpath exports (e.g. `import { myHelper } from "@acme/sdk/helper"`). The generator only auto-generates export entries for your API definition, so custom files need to be added manually—otherwise Node.js won't resolve subpath imports for them. See [Adding custom code](/sdks/generators/typescript/custom-code) for details.
+You can also use `packageJson.exports` to register custom subpath exports (e.g. `import { myHelper } from "@acme/sdk/helper"`). The generator only auto-generates export entries for your API definition, so custom files need to be added manually—otherwise Node.js won't resolve subpath imports for them. See [Adding custom code](/learn/sdks/generators/typescript/custom-code) for details.
@@ -536,7 +536,7 @@ The default is `web`.
When `useBigInt` is set to `true`, a customized JSON serializer & deserializer is used that will preserve the precision of `bigint`'s, as opposed to the native `JSON.stringify` and `JSON.parse` function which converts `bigint`'s to number's losing precision.
When combining `useBigInt` with our serialization layer (`noSerdeLayer: false`), both the request and response properties that are marked as `long` and `bigint` in OpenAPI/Fern spec, will consistently be `bigint`'s.
-However, when disabling the serialization layer (`noSerdeLayer: true`), they will be typed as `number | bigint`. See [TypeScript serde layer](/sdks/generators/typescript/serde-layer) for more information.
+However, when disabling the serialization layer (`noSerdeLayer: true`), they will be typed as `number | bigint`. See [TypeScript serde layer](/learn/sdks/generators/typescript/serde-layer) for more information.
Here's an overview of what to expect from the generated types when combining `useBigInt` and `noSerdeLayer` with the following Fern definition:
diff --git a/fern/products/sdks/generators/typescript/custom-code.mdx b/fern/products/sdks/generators/typescript/custom-code.mdx
index 2bf6815d87..c355fb35c6 100644
--- a/fern/products/sdks/generators/typescript/custom-code.mdx
+++ b/fern/products/sdks/generators/typescript/custom-code.mdx
@@ -45,7 +45,7 @@ To get started adding custom code:
-By default, the TypeScript generator only auto-generates `exports` entries in `package.json` for your API definition. If you want consumers to import your custom file via a dedicated subpath (e.g. `import { myHelper } from "@acme/sdk/helper"`), you must register it manually using [`packageJson.exports`](/sdks/generators/typescript/configuration#packagejson) in `generators.yml`:
+By default, the TypeScript generator only auto-generates `exports` entries in `package.json` for your API definition. If you want consumers to import your custom file via a dedicated subpath (e.g. `import { myHelper } from "@acme/sdk/helper"`), you must register it manually using [`packageJson.exports`](/learn/sdks/generators/typescript/configuration#packagejson) in `generators.yml`:
```yaml {5-14} title="generators.yml"
- name: fern-typescript-sdk
@@ -137,7 +137,7 @@ The export key (e.g., `"./helper"`) determines the import path your users will u
-To add packages that your custom code requires, use the [`extraDependencies`](/sdks/generators/typescript/configuration#extraDependencies) and [`extraDevDependencies`](/sdks/generators/typescript/configuration#extraDevDependencies) options in your `generators.yml`.
+To add packages that your custom code requires, use the [`extraDependencies`](/learn/sdks/generators/typescript/configuration#extraDependencies) and [`extraDevDependencies`](/learn/sdks/generators/typescript/configuration#extraDevDependencies) options in your `generators.yml`.
```yaml {4-7} title="generators.yml"
- name: fern-typescript-sdk
diff --git a/fern/products/sdks/generators/typescript/dynamic-authentication.mdx b/fern/products/sdks/generators/typescript/dynamic-authentication.mdx
index 3e43eec295..46ca09ac3d 100644
--- a/fern/products/sdks/generators/typescript/dynamic-authentication.mdx
+++ b/fern/products/sdks/generators/typescript/dynamic-authentication.mdx
@@ -46,7 +46,7 @@ Add the `jsonwebtoken` dependency using the `packageJson` config option so it ge
"@types/jsonwebtoken": "^9.0.0"
```
-See the [TypeScript configuration page](/sdks/generators/typescript/configuration#packagejson) for all available packageJson options.
+See the [TypeScript configuration page](/learn/sdks/generators/typescript/configuration#packagejson) for all available packageJson options.
### Create a custom fetcher with JWT signing
@@ -204,5 +204,5 @@ This same pattern works for other dynamic authentication scenarios:
## See also
-- [Adding custom code](/sdks/generators/typescript/custom-code) - TypeScript-specific customization guide
-- [TypeScript configuration](/sdks/generators/typescript/configuration) - Full list of configuration options
+- [Adding custom code](/learn/sdks/generators/typescript/custom-code) - TypeScript-specific customization guide
+- [TypeScript configuration](/learn/sdks/generators/typescript/configuration) - Full list of configuration options
diff --git a/fern/products/sdks/generators/typescript/publishing-to-npm.mdx b/fern/products/sdks/generators/typescript/publishing-to-npm.mdx
index 520a624eb5..08f1543b7d 100644
--- a/fern/products/sdks/generators/typescript/publishing-to-npm.mdx
+++ b/fern/products/sdks/generators/typescript/publishing-to-npm.mdx
@@ -33,7 +33,7 @@ Default to OIDC authentication unless the user has a specific reason to use toke
## Configure SDK package settings
-Update your `generators.yml` file to configure the package name, output location, and client naming for npm publishing. Your `generators.yml` [should live in your source repository](/sdks/overview/project-structure) (or on your local machine), not the repository that contains your TypeScript SDK code.
+Update your `generators.yml` file to configure the package name, output location, and client naming for npm publishing. Your `generators.yml` [should live in your source repository](/learn/sdks/overview/project-structure) (or on your local machine), not the repository that contains your TypeScript SDK code.
diff --git a/fern/products/sdks/generators/typescript/quickstart.mdx b/fern/products/sdks/generators/typescript/quickstart.mdx
index 904f088d8d..3e28b66fd2 100644
--- a/fern/products/sdks/generators/typescript/quickstart.mdx
+++ b/fern/products/sdks/generators/typescript/quickstart.mdx
@@ -58,7 +58,7 @@ fern generate --group ts-sdk
```
- If you have multiple APIs, use the [`--api` flag](/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
+ If you have multiple APIs, use the [`--api` flag](/learn/cli-api-reference/cli-reference/commands#api) to specify the API you want to generate:
```bash
fern generate --group ts-sdk --api your-api-name
diff --git a/fern/products/sdks/generators/typescript/serde-layer.mdx b/fern/products/sdks/generators/typescript/serde-layer.mdx
index 5fd6f1a406..ea562583f0 100644
--- a/fern/products/sdks/generators/typescript/serde-layer.mdx
+++ b/fern/products/sdks/generators/typescript/serde-layer.mdx
@@ -49,5 +49,5 @@ groups:
useBigInt: true # Preserve precision for large numbers
```
-For the complete list of all TypeScript configuration options, go to [TypeScript configuration](/sdks/generators/typescript/configuration).
+For the complete list of all TypeScript configuration options, go to [TypeScript configuration](/learn/sdks/generators/typescript/configuration).
diff --git a/fern/products/sdks/how-it-works.mdx b/fern/products/sdks/how-it-works.mdx
index b36d7a0c4e..81038b0cb2 100644
--- a/fern/products/sdks/how-it-works.mdx
+++ b/fern/products/sdks/how-it-works.mdx
@@ -6,7 +6,7 @@ description: Understand Fern's SDK generation process. Cloud-based workflow tran
Fern combines your API specifications with generator configurations and custom code to produce SDKs in multiple languages. By default, SDK generation runs on Fern's managed cloud infrastructure.
-Alternatively, [you can run SDK generation on your own infrastructure](/sdks/deep-dives/self-hosted) to meet specific security or compliance requirements.
+Alternatively, [you can run SDK generation on your own infrastructure](/learn/sdks/deep-dives/self-hosted) to meet specific security or compliance requirements.
## Cloud generation workflow
diff --git a/fern/products/sdks/introduction.mdx b/fern/products/sdks/introduction.mdx
index a81d53d4c7..57ca62637b 100644
--- a/fern/products/sdks/introduction.mdx
+++ b/fern/products/sdks/introduction.mdx
@@ -16,7 +16,7 @@ description: Build multi-language SDKs with Fern's generator platform. Support T
{/* */}