This is what an AI/RAG pipeline sees when it indexes this page — the same output served at https://camelmind-docs.vercel.app/api/llms/getting-started/navigation.Back to doc

Rendered doc

Configure Site Navigation

Configure site navigation in nav.yml using label, slug, file, roles, dropdown, noDropdown, section, and children.

CamelMind uses a single file—nav/nav.yml—to define your site's navigation.

Unlike other documentation frameworks, CamelMind does not generate navigation or URLs from your folder structure. Instead, nav.yml is the source of truth for:

  • Which pages appear in the sidebar
  • The order they appear in
  • The URL of every page
  • Which users can access each page

This gives you complete control over your documentation without having to move or rename files.


How nav.yml defines page navigation

A navigation entry defines each page in your site.

yaml
nav:
  - label: "Getting Started"
    dropdown: true
    items:
      - label: "Overview"
        slug: /getting-started/overview
        file: content/getting-started/overview.mdx
        roles: []

      - label: "Installation"
        slug: /getting-started/installation
        file: content/getting-started/installation.mdx
        roles: []

Each entry connects a public URL to an MDX file.

URL
   ↓
/getting-started/overview

nav.yml
   ↓
content/getting-started/overview.mdx

Navigation entry fields: label, slug, file, and roles

Every page includes four fields.

FieldRequiredDescription
labelYesDisplay name shown in the sidebar and navigation.
slugYesThe public URL for the page.
fileYesPath to the MDX file.
rolesYesRoles allowed to access the page. Use [] for public pages.

How file location affects page URLs

The location of a file has no effect on its URL.

For example:

yaml
- label: Overview
  slug: /overview
  file: content/archive/v2/introduction.mdx
  roles: []

Your server serves the page at /overview even though the file lives deep inside your project. This makes it easy to reorganize your content without changing links.


How to reuse one MDX page in multiple navigation paths

A single MDX file can appear in multiple places throughout your documentation.

yaml
- label: User Guide
  slug: /guides/user-guide
  file: content/shared/user-guide.mdx
  roles: []

- label: Administrator Guide
  slug: /admin/user-guide
  file: content/shared/user-guide.mdx
  roles: [admin]

This is useful when different audiences need access to the same content through different navigation paths.


Create top-level navigation groups with dropdown

Use dropdown: true on a top-level nav.yml entry to create a navigation group in the top navigation.

yaml
nav:
  - label: Platform
    dropdown: true
    items:
      - label: Architecture
        slug: /platform/architecture
        file: content/platform/architecture.mdx
        roles: []

      - label: Security
        slug: /platform/security
        file: content/platform/security.mdx
        roles: []

Opening any page in the group automatically displays the corresponding sidebar.

Tip

Think of each top-level group as a section of your documentation, such as Getting Started, Guides, or Reference.


How noDropdown changes top navigation behavior

Set noDropdown: true on a navigation group to render the group as a direct top-navigation link instead of a dropdown menu. The group's items still define the sidebar navigation for pages in that section.


How to create sidebar categories with section

Use the section field to group navigation entries under an all-caps category heading in the sidebar.

yaml
items:
  - label: "Getting Started"
    slug: /getting-started/overview
    file: content/getting-started/overview.mdx
    roles: []
    section:
      - label: "Installation"
        slug: /getting-started/installation
        file: content/getting-started/installation.mdx
        roles: []

      - label: "Project Structure"
        slug: /getting-started/project-structure
        file: content/getting-started/project-structure.mdx
        roles: []

The sidebar displays the parent entry (Getting Started) as an all-caps section header, listing its section items beneath it. The parent entry is also a real documentation page. It must define its own slug, file, and roles, and typically serves as an overview or landing page for that section.


How to create collapsible sidebar groups with children

Use children to create a collapsible sidebar row. Unlike section, children does not create an all-caps category heading.

yaml
- label: "Deployment"
  slug: /guides/deployment
  file: content/guides/deployment.mdx
  roles: []
  children:
    - label: "Docker"
      slug: /guides/deployment/docker
      file: content/guides/deployment/docker.mdx
      roles: []

    - label: "Vercel"
      slug: /guides/deployment/vercel
      file: content/guides/deployment/vercel.mdx
      roles: []

Unlike section, children does not add an all-caps category label—the parent entry itself becomes a clickable row with a chevron that expands to reveal its children. children can also nest inside children for additional levels of indentation.


Complete nav.yml schema examples

yaml
nav:
  # ============================================================================
  # Top-level navigation
  # ============================================================================
  # A top-level entry without `dropdown: true` renders as a direct link in the
  # top navigation.
  #
  # Result:
  # Top Nav
  # ├── Home
  #
  - label: "Home"
    slug: /home
    file: content/home.mdx
    roles: []

  # ============================================================================
  # Navigation group
  # ============================================================================
  # Setting `dropdown: true` creates a navigation group.
  #
  # Since `noDropdown` is not enabled, this renders as a dropdown menu in the
  # top navigation. Each item below appears in the dropdown.
  #
  # Result:
  # Top Nav
  # ├── Guides ▼
  # │    ├── Getting Started
  # │    └── Deployment
  #
  - label: "Guides"
    dropdown: true
    items:

      # ------------------------------------------------------------------------
      # Section page
      # ------------------------------------------------------------------------
      # This is BOTH:
      #
      # • A page (users can visit it)
      # • A section header in the sidebar
      #
      # Because it contains a `section`, CamelMind renders this entry as an
      # ALL-CAPS section heading in the sidebar.
      #
      # Result:
      #
      # GETTING STARTED
      #   Installation
      #   Configuration
      #
      # Unlike a display-only category, this entry must define:
      #
      # • slug
      # • file
      # • roles
      #
      # It is typically used as an overview page for the section.
      #
      - label: "Getting Started"
        slug: /guides/getting-started/overview
        file: content/guides/getting-started/overview.mdx
        roles: []

        section:

          # Standard page within the section.
          # Renders as a normal sidebar link.
          - label: "Installation"
            slug: /guides/getting-started/installation
            file: content/guides/getting-started/installation.mdx
            roles: []

          # Sidebar group
          #
          # Because this entry contains `children`, it becomes a collapsible
          # group instead of a simple link.
          #
          # Result:
          #
          # Configuration ▼
          #   Environment Variables
          #   Feature Flags
          #
          - label: "Configuration"
            slug: /guides/getting-started/configuration
            file: content/guides/getting-started/configuration.mdx
            roles: []

            children:

              # Child pages are nested beneath their parent.
              - label: "Environment Variables"
                slug: /guides/getting-started/configuration/env-vars
                file: content/guides/getting-started/configuration/env-vars.mdx
                roles: []

              - label: "Feature Flags"
                slug: /guides/getting-started/configuration/feature-flags
                file: content/guides/getting-started/configuration/feature-flags.mdx
                roles: []

      # ------------------------------------------------------------------------
      # Sidebar group (without a section)
      # ------------------------------------------------------------------------
      # This entry contains `children` but no `section`.
      #
      # Unlike "Getting Started", it does NOT create an ALL-CAPS section
      # heading. Instead, this page itself becomes the collapsible sidebar row.
      #
      # Result:
      #
      # Deployment ▼
      #   Docker
      #   Vercel
      #
      - label: "Deployment"
        slug: /guides/deployment
        file: content/guides/deployment.mdx
        roles: []

        children:
          - label: "Docker"
            slug: /guides/deployment/docker
            file: content/guides/deployment/docker.mdx
            roles: []

          - label: "Vercel"
            slug: /guides/deployment/vercel
            file: content/guides/deployment/vercel.mdx
            roles: []

  # ============================================================================
  # Direct top-level link
  # ============================================================================
  # `dropdown: true` normally creates a dropdown menu.
  #
  # Setting `noDropdown: true` changes the behavior so this renders as a direct
  # top navigation link instead.
  #
  # The link uses this entry's own `slug`, while the `items` are still available
  # to build the sidebar for pages within this section.
  #
  # Result:
  #
  # Top Nav
  # ├── Reference
  #
  - label: "Reference"
    dropdown: true
    noDropdown: true
    slug: /reference/overview

    items:
      - label: "API"
        slug: /reference/api
        file: content/reference/api.mdx
        roles: []

How to restrict navigation pages with roles

Use the roles field in a nav.yml entry to control which users can view and access a page. Use roles: [] for a public page.

RolesAccess
[]Public
["admin"]Administrators only
["vendor","admin"]Vendors or administrators

Pages that users do not have permission to access are:

  • Hidden from navigation
  • Blocked from direct URL access

See Authentication & RBAC for configuration details.

What the AI sees

1> For a complete documentation index, see /llms.txt. To read any public page as Markdown, append .md to the URL.
2 
3CamelMind uses a single file—`nav/nav.yml`—to define your site's navigation.
4 
5Unlike other documentation frameworks, CamelMind does **not** generate navigation or URLs from your folder structure. Instead, `nav.yml` is the source of truth for:
6 
7- Which pages appear in the sidebar
8- The order they appear in
9- The URL of every page
10- Which users can access each page
11 
12This gives you complete control over your documentation without having to move or rename files.
13 
14---
15 
16## How nav.yml defines page navigation
17 
18A navigation entry defines each page in your site.
19 
20```yaml
21nav:
22 - label: "Getting Started"
23 dropdown: true
24 items:
25 - label: "Overview"
26 slug: /getting-started/overview
27 file: content/getting-started/overview.mdx
28 roles: []
29 
30 - label: "Installation"
31 slug: /getting-started/installation
32 file: content/getting-started/installation.mdx
33 roles: []
34```
35 
36Each entry connects a public URL to an MDX file.
37 
38```
39URL
40 ↓
41/getting-started/overview
42 
43nav.yml
44 ↓
45content/getting-started/overview.mdx
46```
47 
48---
49 
50## Navigation entry fields: label, slug, file, and roles
51 
52Every page includes four fields.
53 
54| Field | Required | Description |
55| --- | --- | --- |
56| `label` | Yes | Display name shown in the sidebar and navigation. |
57| `slug` | Yes | The public URL for the page. |
58| `file` | Yes | Path to the MDX file. |
59| `roles` | Yes | Roles allowed to access the page. Use `[]` for public pages. |
60 
61---
62 
63## How file location affects page URLs
64 
65The location of a file has **no effect** on its URL.
66 
67For example:
68 
69```yaml
70- label: Overview
71 slug: /overview
72 file: content/archive/v2/introduction.mdx
73 roles: []
74```
75 
76Your server serves the page at `/overview` even though the file lives deep inside your project. This makes it easy to reorganize your content without changing links.
77 
78---
79 
80## How to reuse one MDX page in multiple navigation paths
81 
82A single MDX file can appear in multiple places throughout your documentation.
83 
84```yaml
85- label: User Guide
86 slug: /guides/user-guide
87 file: content/shared/user-guide.mdx
88 roles: []
89 
90- label: Administrator Guide
91 slug: /admin/user-guide
92 file: content/shared/user-guide.mdx
93 roles: [admin]
94```
95 
96This is useful when different audiences need access to the same content through different navigation paths.
97 
98---
99 
100## Create top-level navigation groups with dropdown
101 
102Use `dropdown: true` on a top-level `nav.yml` entry to create a navigation group in the top navigation.
103 
104```yaml
105nav:
106 - label: Platform
107 dropdown: true
108 items:
109 - label: Architecture
110 slug: /platform/architecture
111 file: content/platform/architecture.mdx
112 roles: []
113 
114 - label: Security
115 slug: /platform/security
116 file: content/platform/security.mdx
117 roles: []
118```
119 
120Opening any page in the group automatically displays the corresponding sidebar.
121 
122<Callout type="tip">
123 
124Think of each top-level group as a section of your documentation, such as **Getting Started**, **Guides**, or **Reference**.
125 
126</Callout>
127 
128---
129 
130## How noDropdown changes top navigation behavior
131 
132Set `noDropdown: true` on a navigation group to render the group as a direct top-navigation link instead of a dropdown menu. The group's `items` still define the sidebar navigation for pages in that section.
133 
134---
135 
136## How to create sidebar categories with section
137 
138Use the `section` field to group navigation entries under an all-caps category heading in the sidebar.
139 
140```yaml
141items:
142 - label: "Getting Started"
143 slug: /getting-started/overview
144 file: content/getting-started/overview.mdx
145 roles: []
146 section:
147 - label: "Installation"
148 slug: /getting-started/installation
149 file: content/getting-started/installation.mdx
150 roles: []
151 
152 - label: "Project Structure"
153 slug: /getting-started/project-structure
154 file: content/getting-started/project-structure.mdx
155 roles: []
156```
157 
158The sidebar displays the parent entry (`Getting Started`) as an all-caps section header, listing its `section` items beneath it. The parent entry is also a real documentation page. It must define its own `slug`, `file`, and `roles`, and typically serves as an overview or landing page for that section.
159 
160---
161 
162## How to create collapsible sidebar groups with children
163 
164Use `children` to create a collapsible sidebar row. Unlike section, `children` does not create an all-caps category heading.
165 
166```yaml
167- label: "Deployment"
168 slug: /guides/deployment
169 file: content/guides/deployment.mdx
170 roles: []
171 children:
172 - label: "Docker"
173 slug: /guides/deployment/docker
174 file: content/guides/deployment/docker.mdx
175 roles: []
176 
177 - label: "Vercel"
178 slug: /guides/deployment/vercel
179 file: content/guides/deployment/vercel.mdx
180 roles: []
181```
182 
183Unlike `section`, `children` does not add an all-caps category label—the parent entry itself becomes a clickable row with a chevron that expands to reveal its children. `children` can also nest inside `children` for additional levels of indentation.
184 
185---
186 
187## Complete nav.yml schema examples
188 
189=== "Example: every field in one nav.yml"
190 
191```yaml
192nav:
193 # ============================================================================
194 # Top-level navigation
195 # ============================================================================
196 # A top-level entry without `dropdown: true` renders as a direct link in the
197 # top navigation.
198 #
199 # Result:
200 # Top Nav
201 # ├── Home
202 #
203 - label: "Home"
204 slug: /home
205 file: content/home.mdx
206 roles: []
207 
208 # ============================================================================
209 # Navigation group
210 # ============================================================================
211 # Setting `dropdown: true` creates a navigation group.
212 #
213 # Since `noDropdown` is not enabled, this renders as a dropdown menu in the
214 # top navigation. Each item below appears in the dropdown.
215 #
216 # Result:
217 # Top Nav
218 # ├── Guides ▼
219 # │ ├── Getting Started
220 # │ └── Deployment
221 #
222 - label: "Guides"
223 dropdown: true
224 items:
225 
226 # ------------------------------------------------------------------------
227 # Section page
228 # ------------------------------------------------------------------------
229 # This is BOTH:
230 #
231 # • A page (users can visit it)
232 # • A section header in the sidebar
233 #
234 # Because it contains a `section`, CamelMind renders this entry as an
235 # ALL-CAPS section heading in the sidebar.
236 #
237 # Result:
238 #
239 # GETTING STARTED
240 # Installation
241 # Configuration
242 #
243 # Unlike a display-only category, this entry must define:
244 #
245 # • slug
246 # • file
247 # • roles
248 #
249 # It is typically used as an overview page for the section.
250 #
251 - label: "Getting Started"
252 slug: /guides/getting-started/overview
253 file: content/guides/getting-started/overview.mdx
254 roles: []
255 
256 section:
257 
258 # Standard page within the section.
259 # Renders as a normal sidebar link.
260 - label: "Installation"
261 slug: /guides/getting-started/installation
262 file: content/guides/getting-started/installation.mdx
263 roles: []
264 
265 # Sidebar group
266 #
267 # Because this entry contains `children`, it becomes a collapsible
268 # group instead of a simple link.
269 #
270 # Result:
271 #
272 # Configuration ▼
273 # Environment Variables
274 # Feature Flags
275 #
276 - label: "Configuration"
277 slug: /guides/getting-started/configuration
278 file: content/guides/getting-started/configuration.mdx
279 roles: []
280 
281 children:
282 
283 # Child pages are nested beneath their parent.
284 - label: "Environment Variables"
285 slug: /guides/getting-started/configuration/env-vars
286 file: content/guides/getting-started/configuration/env-vars.mdx
287 roles: []
288 
289 - label: "Feature Flags"
290 slug: /guides/getting-started/configuration/feature-flags
291 file: content/guides/getting-started/configuration/feature-flags.mdx
292 roles: []
293 
294 # ------------------------------------------------------------------------
295 # Sidebar group (without a section)
296 # ------------------------------------------------------------------------
297 # This entry contains `children` but no `section`.
298 #
299 # Unlike "Getting Started", it does NOT create an ALL-CAPS section
300 # heading. Instead, this page itself becomes the collapsible sidebar row.
301 #
302 # Result:
303 #
304 # Deployment ▼
305 # Docker
306 # Vercel
307 #
308 - label: "Deployment"
309 slug: /guides/deployment
310 file: content/guides/deployment.mdx
311 roles: []
312 
313 children:
314 - label: "Docker"
315 slug: /guides/deployment/docker
316 file: content/guides/deployment/docker.mdx
317 roles: []
318 
319 - label: "Vercel"
320 slug: /guides/deployment/vercel
321 file: content/guides/deployment/vercel.mdx
322 roles: []
323 
324 # ============================================================================
325 # Direct top-level link
326 # ============================================================================
327 # `dropdown: true` normally creates a dropdown menu.
328 #
329 # Setting `noDropdown: true` changes the behavior so this renders as a direct
330 # top navigation link instead.
331 #
332 # The link uses this entry's own `slug`, while the `items` are still available
333 # to build the sidebar for pages within this section.
334 #
335 # Result:
336 #
337 # Top Nav
338 # ├── Reference
339 #
340 - label: "Reference"
341 dropdown: true
342 noDropdown: true
343 slug: /reference/overview
344 
345 items:
346 - label: "API"
347 slug: /reference/api
348 file: content/reference/api.mdx
349 roles: []
350```
351 
352=== "Example: no dropdown menus, with sections and children"
353 
354Setting `noDropdown: true` on every group means nothing ever opens as a dropdown button in the top nav—each group is a direct link, and all the grouping happens in the sidebar via `section` and `children`.
355 
356```yaml
357nav:
358 # ============================================================================
359 # Single documentation section
360 # ============================================================================
361 # This configuration creates a single top-level documentation section.
362 #
363 # `noDropdown: true` renders "Documentation" as a direct link in the top
364 # navigation instead of a dropdown menu. The pages defined below build the
365 # sidebar for this section.
366 #
367 # Result:
368 #
369 # Top Nav
370 # ├── Documentation
371 #
372 - label: "Documentation"
373 dropdown: false
374 noDropdown: true
375 
376 items:
377 
378 # ------------------------------------------------------------------------
379 # Section landing page
380 # ------------------------------------------------------------------------
381 # This entry serves two purposes:
382 #
383 # • It's the landing page for the Documentation section.
384 # • It becomes the ALL-CAPS section heading in the sidebar.
385 #
386 # Because it contains a `section`, CamelMind renders this entry as a
387 # sidebar section header while still allowing users to visit the page.
388 #
389 # Result:
390 #
391 # OVERVIEW
392 # Quick Start
393 # Advanced
394 #
395 # Unlike a display-only category, this page must define:
396 #
397 # • slug
398 # • file
399 # • roles
400 #
401 # It's typically used as an introduction or overview of the section.
402 #
403 - label: "Overview"
404 slug: /docs/overview
405 file: content/docs/overview.mdx
406 roles: []
407 
408 section:
409 
410 # Standard documentation page.
411 # Appears as a normal sidebar link.
412 - label: "Quick Start"
413 slug: /docs/quick-start
414 file: content/docs/quick-start.mdx
415 roles: []
416 
417 # Sidebar group
418 #
419 # Because this entry contains `children`, CamelMind renders it as a
420 # collapsible group in the sidebar.
421 #
422 # Result:
423 #
424 # Advanced ▼
425 # Caching
426 # Scaling
427 #
428 - label: "Advanced"
429 slug: /docs/advanced
430 file: content/docs/advanced.mdx
431 roles: []
432 
433 children:
434 
435 # Child pages appear nested beneath "Advanced".
436 - label: "Caching"
437 slug: /docs/advanced/caching
438 file: content/docs/advanced/caching.mdx
439 roles: []
440 
441 - label: "Scaling"
442 slug: /docs/advanced/scaling
443 file: content/docs/advanced/scaling.mdx
444 roles: []
445```
446 
447`Documentation` renders in the top nav as a direct link to `/docs/overview` (its first visible item's slug, since the group itself has no `slug`). Its sidebar still shows the `Overview` category with `Quick Start` as a plain link and `Advanced` as a collapsible row.
448 
449=== "Example: only children, no sections"
450 
451Without any `section` fields, the sidebar has no all-caps category headers—every item is either a plain link or a collapsible row.
452 
453```yaml
454nav:
455 - label: "Guides"
456 dropdown: true
457 items:
458 - label: "Writing Content"
459 slug: /guides/writing-content
460 file: content/guides/writing-content.mdx
461 roles: []
462 children:
463 - label: "Markdown Basics"
464 slug: /guides/writing-content/markdown-basics
465 file: content/guides/writing-content/markdown-basics.mdx
466 roles: []
467 
468 - label: "Frontmatter"
469 slug: /guides/writing-content/frontmatter
470 file: content/guides/writing-content/frontmatter.mdx
471 roles: []
472```
473 
474In the top nav, `Guides` is a dropdown listing `Writing Content`. In the sidebar, `Writing Content` has no category header above it—it is a collapsible row that expands to show `Markdown Basics` and `Frontmatter`.
475 
476===
477 
478---
479 
480## How to restrict navigation pages with roles
481 
482Use the `roles` field in a `nav.yml` entry to control which users can view and access a page. Use `roles: []` for a public page.
483 
484| Roles | Access |
485| --- | --- |
486| `[]` | Public |
487| `["admin"]` | Administrators only |
488| `["vendor","admin"]` | Vendors or administrators |
489 
490Pages that users do not have permission to access are:
491 
492- Hidden from navigation
493- Blocked from direct URL access
494 
495See [Authentication & RBAC](/features/auth-rbac) for configuration details.

Issues (0)

No AI-friendliness issues found.