> This page is for SDKs, version Legacy.
> For other versions, use one of these documentation indexes:
> - Current (default): https://buildwithfern.com/learn/sdks/current/llms.txt
> - Legacy: https://buildwithfern.com/learn/sdks/legacy/llms.txt

> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt.

# Customize README

> Customize your SDK README with Fern's generators.yml configuration. Add custom sections, control example styles, and organize endpoints by feature.

> **You're viewing the legacy SDK docs**
>
> These pages cover SDK generation configured with `generators.yml`. New projects use `sdk-config.yml`, so see [the Current version of this page](/learn/sdks/deep-dives/readme) for up-to-date guidance. To move an existing project, follow the [SDK Config migration guide](/learn/sdks/legacy/generators/migration-guides/sdk-config), which walks through `fern sdk migrate`, and review the [`sdk-config.yml` reference](/learn/sdks/reference/sdk-config).

Each SDK includes a `README.md` file in its root directory that provides an overview of the SDK and instructions for working with the associated API.

By default, Fern [generates the README automatically](./sdk-user-features) with usage examples and API details. For a complete example of a generated SDK README, see [Intercom's Python SDK](https://github.com/intercom/python-intercom/blob/3aac991a92cefe34cf437f8f5ca46c97c04c1a6c/README.md).

Although each SDK has its own README, the content can be configured globally through the `readme` section in the `generators.yml` file.

## Configuration options

**`generators.yml`**

```yaml title="generators.yml" maxLines=10
readme:
  bannerLink: "https://example.com/banner"
  introduction: "Welcome to our API"
  apiReferenceLink: "https://docs.example.com"
  apiName: "Example Product"
  exampleStyle: "minimal"
  disabledSections:
    - "contributing"
  defaultEndpoint:
    method: "POST"
    path: "/users"
    stream: false
  customSections:
    - title: "Custom Section"
      language: "java"
      content: |
        This is a custom section. Latest package info is {{ group }}:{{ artifact }}:{{ version }}.
    - title: "Custom Section"
      language: "typescript"
      content: |
        Custom section for {{ packageName }}
    - title: "Another Custom Section"
      language: "typescript"
      content: |
        A second custom section for {{ packageName }}
  features:
    authentication:
      - method: "POST"
        path: "/auth/login"
      - "GET /auth/profile"
    users:
      - method: "GET"
        path: "/users"
      - method: "POST"
        path: "/users"
```

**`bannerLink`** `string`

URL for a banner image or link that appears at the top of the README.

---

**`introduction`** `string`

Custom introduction text that appears at the beginning of the README.

---

**`apiReferenceLink`** `string`

URL to your external API documentation or reference guide.

---

**`apiName`** `string`

Name of the API that appears in the README. Will appear as `Your Api Name SDK` or `Your Api Name API` throughout the README. Defaults to organization name if not set.

---

**`exampleStyle`** `'minimal' | 'comprehensive'` — default: comprehensive

Controls whether usage examples show only required parameters (`minimal`) or all parameters (`comprehensive`). Currently only supported for Java SDKs. [File an issue](https://github.com/fern-api/fern/issues) to request additional languages.

---

**`disabledSections`** `list of strings`

Sections to disable in the README. Supported values: `"contributing"`.

---

**`features`** `list of objects`

Organizes endpoints into named feature sections within the README. Each feature creates a dedicated section with example code snippets for the specified endpoints.

---

#### Endpoint configuration

Specifies which endpoint's code snippet to showcase as the primary example in the README.

**`defaultEndpoint.method`** `string` — required

HTTP method of the default endpoint (e.g., `GET`, `POST`, `PUT`, `DELETE`).

---

**`defaultEndpoint.path`** `string` — required

Endpoint path for the default example (e.g., `/users`, `/auth/login`).

---

**`defaultEndpoint.stream`** `boolean` — default: false

Whether the endpoint is a streaming endpoint. Defaults to `false`.

---

#### Custom sections

Define a custom section in the generated README for a specific SDK.

**`customSections.title`** `string` — required

The title of the custom section as it will appear in the README.

---

**`customSections.language`** `'java' | 'typescript'` — required

The target SDK language for this section. The custom section will only appear in README files generated for the specified language.

---

**`customSections.content`** `string` — required

The Markdown content of the custom section. You can use template variables in the format `{{ variable }}` that will be dynamically replaced with values specific to each SDK language when the README is generated.

Available template variables by language:

| Language   | Variable      | Description                                                                                                                                                                             |
| ---------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| TypeScript | `packageName` | Name of your package, as specified in the [`package-name` field](/learn/sdks/legacy/generators/typescript/configuration#package-name)                                                   |
| Python     | `packageName` | Name of your package, as specified in the [`package_name` field](/learn/sdks/legacy/generators/python/configuration#package_name)                                                       |
| Go         | `owner`       | The owner of your Go module                                                                                                                                                             |
| Go         | `repo`        | The [repository](/learn/sdks/legacy/generators/go/publishing#configure-output-location) where your Go module is published                                                               |
| Go         | `version`     | SDK version                                                                                                                                                                             |
| Java       | `group`       | Maven `groupId` [from `coordinate` field](/learn/sdks/legacy/generators/java/publishing#configure-maven-coordinate)                                                                     |
| Java       | `artifact`    | Maven `artifactId` [from `coordinate` field](/learn/sdks/legacy/generators/java/publishing#configure-maven-coordinate)                                                                  |
| Java       | `version`     | SDK version                                                                                                                                                                             |
| C#/.NET    | `packageName` | Name of your package, as specified in the [`package-id` field](/learn/sdks/legacy/generators/csharp/configuration#package-id)                                                           |
| PHP        | `packageName` | Name of your package, as specified in the [`package-name` field](/learn/sdks/legacy/generators/php/configuration#packagename)                                                           |
| Ruby       | `packageName` | Name of your package, as specified in the [`package-name` field](/learn/sdks/legacy/generators/ruby/configuration)                                                                      |
| Swift      | `gitUrl`      | The [URL](/learn/sdks/legacy/generators/swift/publishing#verify-package-availability) where your Swift package is published. For example, `https://github.com/fern-api/basic-swift-sdk` |
| Swift      | `minVersion`  | SDK version                                                                                                                                                                             |

---

## Additional customization

To go beyond the available configuration options, you can [manually edit the `README.md` file](/learn/sdks/legacy/overview/custom-code). Then, add it to the `.fernignore` file to prevent it from being overwritten during regeneration.