---
title: "Configuration"
description: "Every option defineConfig and the Nimbus integration accept."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.klounge.kr/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuration

Nimbus is configured in `astro.config.ts`. `defineConfig` (re-exported as `defineNimbusConfig`) types the site config; the `nimbus()` integration takes that config plus build-time options.

```ts title="astro.config.ts"
import { defineConfig } from "astro/config";
import nimbus, {
  defineConfig as defineNimbusConfig,
} from "@cloudflare/nimbus-docs";

const config = defineNimbusConfig({
  site: "https://docs.example.com",
  title: "Acme",
  description: "Build with Acme.",
  github: "https://github.com/acme/docs",
  editPattern: "https://github.com/acme/docs/edit/main/{path}",
  sidebar: { items: [/* … */] },
});

export default defineConfig({
  integrations: [nimbus(config, {/* options */})],
});
```

## Site config

| Field                            | Type              | Notes                                                                         |
| -------------------------------- | ----------------- | ----------------------------------------------------------------------------- |
| `site`                           | string            | **Required.** Canonical site URL. Bridged to Astro's `site`.                  |
| `title`                          | string            | **Required.** Site title and metadata fallback.                               |
| `description`                    | string            | Default meta description.                                                     |
| `locale`                         | string            | Document language (e.g. `"en"`).                                              |
| `homeLabel`                      | string            | Label for the "Home" breadcrumb.                                              |
| `github`                         | string \| null    | Repo URL for the header link; `null` hides it.                                |
| `editPattern`                    | string \| null    | Edit-link pattern; `{path}` is the page path.                                 |
| `socialImage` / `socialImageAlt` | string            | OG fallback image and alt. See [Metadata and SEO](/ai/metadata-and-seo).      |
| `head`                           | array             | Site-wide `<head>` elements.                                                  |
| `sidebar`                        | object            | Rail config — see [Sidebar](/navigation/sidebar).                             |
| `features`                       | object            | `sidebar` / `tableOfContents` kill switches. See [Layouts](/styling/layouts). |
| `search`                         | object \| `false` | Search backend. See [Search](/navigation/search).                             |
| `versions`                       | object            | Versioning manifest — each version is its own content collection.             |
| `rendering`                      | object            | Build or request rendering policy for canonical content collection routes.    |

### Rendering policy

`rendering` controls canonical content collection routes: the catch-all routes Nimbus uses for docs, API references, and other registered collections. It does not change custom files under `src/pages/`.

| Mode | Behavior | Deployment requirement |
| --- | --- | --- |
| `"build"` | Prerenders the route during `astro build`. This is the default. | Any static or server deployment. |
| `"request"` | Renders the route when a visitor requests it. | Astro server output with a Nimbus-supported adapter. |

Omitting `rendering` is equivalent to `rendering: { default: "build" }`.

#### Enable request rendering

Request rendering requires three things: `output: "server"` in the Astro config, an adapter supported by Nimbus, and at least one collection set to `"request"` in the Nimbus config. Provider-specific setup is listed below.

Set the default when most or all canonical collection routes should render on request:

```ts
const nimbusConfig = defineNimbusConfig({
  // ...
  rendering: {
default: "request",
  },
});
```

Run the production build after changing output mode or rendering policy. It is the authoritative check that the selected adapter supports Nimbus request rendering.

#### Mix build and request rendering

`rendering.default` applies to every registered collection with a canonical catch-all route. `rendering.collections` overrides that mode by Astro collection name, not by URL or version.

Render most collections on request but keep an archive prerendered:

```ts
rendering: {
  default: "request",
  collections: {
archived: "build",
  },
},
```

Or keep the site static except for one collection:

```ts
rendering: {
  default: "build",
  collections: {
api: "request",
  },
},
```

Every override must name a registered collection with its own canonical catch-all route. Nimbus fails the build for unknown collection names rather than silently ignoring them.

Request-rendered routes are still added to the sitemap and Pagefind search index during the production build. Nimbus uses the content source to create those build-time discovery files; no extra sitemap or search configuration is required.

##### Cloudflare

Cloudflare is currently the supported provider for request-rendered Nimbus collection routes. Choose **Server** and **Cloudflare** when creating a new site. For an existing site, run the adapter installer from the project root:

```sh
npx add adapter-cloudflare
pnpm dlx add adapter-cloudflare
yarn dlx add adapter-cloudflare
bunx add adapter-cloudflare
```

The installer wires `@astrojs/cloudflare` and sets Astro to server output. It creates `wrangler.jsonc` when none exists or replaces an unchanged Nimbus static configuration. Customized Wrangler files and alternate JSON or TOML configurations are preserved with manual guidance.

When the active Nimbus config has no rendering policy, the installer adds `rendering: { default: "request" }`. Existing policies are preserved. If an imported or ambiguous Nimbus config cannot be edited safely, the installer completes the adapter setup and prints instructions for generating a coding-agent recipe. Generate that recipe with:

```sh
npx add adapter-cloudflare --print
pnpm dlx add adapter-cloudflare --print
yarn dlx add adapter-cloudflare --print
bunx add adapter-cloudflare --print
```

Pass the printed recipe to your coding agent to finish the project-specific configuration.

The resulting Astro configuration includes the rendering policy, server output, and adapter:

```ts title="astro.config.ts"
import cloudflare from "@astrojs/cloudflare";
import { defineConfig } from "astro/config";
import nimbus, {
  defineConfig as defineNimbusConfig,
} from "@cloudflare/nimbus-docs";

const nimbusConfig = defineNimbusConfig({
  site: "https://docs.example.com",
  title: "Acme",
  rendering: {
default: "request",
  },
});

export default defineConfig({
  output: "server",
  adapter: cloudflare({ prerenderEnvironment: "node" }),
  integrations: [nimbus(nimbusConfig)],
});
```

Cloudflare deployments also require a server-compatible `wrangler.jsonc`. Run `pnpm build` after setup to verify the adapter and Wrangler configuration together.

See [Server adapters](/cli#server-adapters) for installer behavior and safety checks.

## Integration options

The second argument to `nimbus()` controls build behavior:

| Option               | Default                 | Notes                                                                                                                                                                                                                                                  |
| -------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `validateMdx`        | `true`                  | PascalCase tag validation. `false` to skip; object to override paths. See [Markdown and MDX](/writing/markdown-and-mdx).                                                                                                                               |
| `admonitions`        | `true`                  | Native Sätteri MDX directives → `<Aside>`; object adds `typeAliases`, `contentDirs`, and `skip`. Set `false` when using an incompatible custom processor.                                                                                                                                        |
| `markdown`           | Sätteri processor       | Configure authored Markdown processing and generated Markdown customization.                                                                                                                                                                          |
| `sitemap`            | enabled when `site` set | `false` to disable.                                                                                                                                                                                                                                    |
| `mdx`                | —                       | Options forwarded to Astro's MDX integration. Their behavior remains processor-owned.                                                                                                                                                                                                        |
| `icons`              | `true`                  | Built-in icon system. `true` auto-detects `@iconify-json/*` packages (Phosphor, Material Icons, etc.) and local `src/icons/*.svg`. `false` to disable. Object for explicit config (`iconDir`, `include`, `svgoOptions`). See [Icon](/components/icon). |
| `rules`              | `off` (opt-in)          | Authoring-lint severities — each rule is off until you enable it. See [Linting](/writing/linting).                                                                                                                                                     |
| `collections`        | —                       | Per-collection lint overrides.                                                                                                                                                                                                                         |

```ts
nimbus(config, {
  validateMdx: true,
  rules: { "nimbus/single-h1": "error", "nimbus/bare-url": "warn" },
});
```

### Customize generated Markdown

Use `markdown.componentMap` to define how project-specific MDX components appear in generated Markdown. Use `markdown.partialResolver` when `<Render>` attributes map to a custom partial ID:

```ts title="astro.config.ts"
nimbus(config, {
  markdown: {
componentMap: {
  ProductName: {
    revision: "product-name-v1",
    render: ({ children }) => children,
  },
},
partialResolver: {
  revision: "product-partials-v1",
  resolve: ({ file, product }) =>
    product ? `${product}/${file}` : file,
},
  },
});
```

`<ProductName>Acme</ProductName>` becomes `Acme` in clean Markdown. Nimbus normalizes static authored `href` values before a transform runs, so validate and render those values directly. The transform also receives the active `base` for destinations it constructs itself.

Each transform requires a non-empty `revision`. Increment it whenever its output changes so Nimbus invalidates the generated Markdown cache.

Request-rendered HTML consumes prepared entries and headings. Generating alternate Markdown/MDX versions, `llms.txt` indexes, `llms-full.txt`, reusable-snippet expansion, and syntax highlighting remains build-time work. Their endpoints can prerender or serve those payloads on request. Run a production build after changing these options; development mode does not validate the final Worker bundle.

Source: https://docs.klounge.kr/configuration/index.mdx
