Building and Editing a Menu

Menus are edited in the Design workspace: the Menus section for your site’s own navigation, and the Documentation section for the menus behind your documentation and API sets. Both use the same editor. Expand a menu in the list and its tree opens inline, with the menu’s controls appearing on its title row.

One thing to settle before you start. Nothing in a Leed menu stores a position number — no order field exists anywhere in the model. Position is drag position, and that is true whether you are working in the CMS, over the API or through an MCP client. Everything below assumes it.

If you have not read what a menu is and why a documentation menu behaves unlike every other one, start at Menus and Navigation — this page is the controls.

The menu toolbar

Expanding a menu reveals a row of icon buttons beside its name. Which ones you get depends on the menu.

ControlWhat it doesOn a site menuOn a documentation menu
Menu settings (gear)Rename the menu; toggle ExpandedYesYes
Delete menu (trash)Deletes the whole menu after a confirmationYesNot offered — the menu is in active use by a page type
Add FolderAdds a folder at the top level of the treeYesYes, unless the set’s navigation is locked
Add PageAdds a link item at the top levelYesYes, unless the set’s navigation is locked
Expand all / Collapse allOpens or closes every folder in the tree at onceYesYes
Schedule set publishSchedules every in-revision page of this documentation set for one shared publish time—Yes

Creating a menu is not on this row. The + at the top of the Menus panel makes one. The Documentation panel has no + at all, because a documentation set’s left menu is created for you when you create the page type — there is nothing to make by hand.

Creating a menu

The + opens a dialog titled New Menu with a single Name field; Enter submits. Menu names must be unique in your workspace — reusing one is refused.

The gear opens Menu Settings, which holds two things:

  • Name — the rename, applied when you press Save.
  • Expanded — “Menu is expanded by default on the site.” This one is not waiting for the Save button; toggling the checkbox writes immediately.

Deleting a menu

The trash opens a confirmation reading “Are you sure you want to delete “”? This cannot be undone.”Deletion is a soft delete in the CMS — the record is retained and stops being listed — but it also commits a version of your site’s menu file without that menu’s key. That is the one operation that removes a key, and it is why deleting and recreating is the only clean way out of a bad menu name.

Building the tree

Hover any row and its controls appear on the right.

ControlWhat it doesOn a site menuOn a docs folderOn a docs page item
Drag handleReorders the item and moves it into or out of foldersYesYesYes
Expand arrowOpens and closes the folder in the editor onlyFolders onlyYes—
Click the labelOpens the linked page for editingYes—Yes
Double-click the labelRenames the item in placeYesYesYes
Add FolderCreates a folder inside this itemYesYesNo
Add PageAdds a page inside this itemYesYesNo
Edit settings (gear)Opens the item settings dialogYesYesYes
Delete (trash)Removes the item, after confirmationOnly when it has no childrenOnly when it is emptyYes

Two asymmetries in that table are enforced rather than cosmetic.

A documentation page item cannot own children. So on a docs menu, Add Folder and Add Page appear on folders only. This is not a UI preference — the server rejects a save that nests anything under a page item, with 400 "A docs page item cannot have children — place pages inside folders instead". On a site menu there is no such rule and every item gets the full set.

Delete appears only when the item has no children. Empty a folder before you remove it. This stops you deleting a subtree by accident, and it is the reason removing a section is a two-step job: move or delete the pages, then delete the folder.

When a documentation set has Navigation Menu Locked switched on, Add Folder and Add Page disappear from every row, and an amber padlock sits beside the menu’s name with the tooltip “Navigation menu locked — unlock in Settings → Page Types to reorder, move, or rename.” You can still change icons, tooltips and the disabled flag; anything that would move a URL is refused with a 403.

New items land in a specific place, which is worth knowing so you are not hunting for one you just made: an item added at the top level goes to the top of the list, and an item added inside a folder goes to the bottom of that folder.

A documentation menu open in the Design workspace, its tree expanded across two folders, with one row hovered to show its Edit settings and Delete buttons

Adding a page

Add Page opens a dialog titled Add Page with two routes.

Create new page opens the standard New Page dialog with the documentation set’s page type already filled in and locked, and hands the target folder to the server so the new page is filed inside it. This is the only way to create a page directly inside a folder — creating it anywhere else and moving it afterwards works, but takes an extra menu save. The option is hidden when the set has no bound page type, and when the page type is Content Locked, since a locked type refuses new pages.

Link existing page opens the link picker, the same one the editor uses for body links. Unpublished pages are included deliberately, so you can build a whole navigation ahead of a launch. The item’s visible name comes from the picker’s link text, falling back to Untitled if it is blank.

The Add Page dialog showing its two buttons, Create new page and Link existing page

If the page you pick is already somewhere in this menu you get a Page already in menu dialog with Add anyway, Cancel, and a Don’t ask me again checkbox. On a site menu, adding the same page twice is legitimate — a footer that repeats a header link, for instance. On a documentation left menu it is not: the server will reject the save with a 409, because a documentation page may be referenced once, in exactly one docs menu, workspace-wide.

Renaming an item

Double-click a row’s label and it becomes an input. Enter commits, Escape cancels.

Here is the mechanic that catches everybody. Each item has two pieces of text:

  • name — the label the published navigation renders.
  • title — the hover tooltip, and nothing else.

The CMS tree displays the title when one is set, and only falls back to the name when it is empty. That is a sensible display rule and a bad trap, because pages added one particular way arrive with the two out of step.

Pages you add with Link existing page are not affected: their name comes from the picker’s link text, which is the page’s title as written.

The item settings dialog

The gear on a row opens Edit Menu Item, subtitled “Changes save automatically.” There is no Save button; typed fields save shortly after you stop typing, and everything else saves on the spot. Done closes it.

Every field in the Edit Menu Item dialog
FieldWhat it storesEffect on the siteHidden on a documentation menu?
TooltipThe item’s titleThe HTML title attribute — hover text in the browserNo
DescriptionLonger text alongside the itemRendered below the label, for templates that show itYes — hidden entirely
HrefThe item’s destination — a page reference or a literal URLWhere the link goes; external URLs open in a new tabYes, for any item already pointing at a page. Shown for items pointing at a literal URL
IconFont Awesome classes, e.g. fa-solid fa-bookAn icon before the labelNo
ColorA color class stored on the itemSee the note belowNo
ImageA picture from your asset libraryRendered before the label, instead of or alongside an iconNo
DisabledA flagThe item is not rendered at all; in the CMS it shows struck throughNo
ExpandedA flagThis item’s submenu starts open on the siteNo

This dialog does not edit the item’s name. The name is the double-click rename on the row, and only that.

Icons

Icons live on the menu item. There is no page-level icon field anywhere in Leed, so a documentation page’s sidebar icon is a property of its menu entry, not of the page — which also means the same page linked from two site menus can carry two different icons.

Select Icon opens the Font Awesome picker and writes a class string such as fa-solid fa-book. Change Icon replaces it, Remove clears it, and once an icon is set a Color button appears beside it.

The Color control writes a Tailwind text-color class onto the item, which is what the CMS tree renders the glyph with. The published menu emits that same value as an inline style attribute rather than as a class, so a color chosen here is reliable as an editor aid and should not be treated as a site-facing styling control. Color your published navigation from your stylesheet instead.

The Edit Menu Item dialog opened from a documentation menu leaf, showing Tooltip, Icon with a chosen glyph, Image, Disabled and Expanded, and no Description or Href field

Reading the row at a glance

The tree marks a few states inline, so you can audit a menu without opening anything:

MarkerMeaningHover text
An orange page glyph before the labelThe linked page has a reserved URL but has never been published, so it will not render in the navUnpublished page
A small arrow after the labelThe item opens in a new tab — an external linkExternal link
A download arrow after the labelThe item links to a file in your asset libraryFile download
The label struck through and grayedThe item is Disabled and will not be rendered—
An amber padlock beside the menu nameThis set’s navigation is lockedNavigation menu locked — unlock in Settings → Page Types to reorder, move, or rename.

Clicking a row’s label opens the page it points at, so the tree doubles as a way to move through a documentation set while you are editing it. Rows that do not point at a page — folders, external links — are not clickable in that way; double-click still renames them.

What publishing a menu commits

flowchart TD
  EDIT["You edit the tree<br/>drag, rename, add, delete"] --> SAVE["The menu saves"]
  SAVE --> GUARD{"Is this a documentation<br/>left menu?"}

  GUARD -->|no| DIRTY
  GUARD -->|yes| CHECKS["Server guards run:<br/>page item with children → 400<br/>page already placed → 409<br/>navigation locked → 403<br/>path collision → 409"]
  CHECKS -->|"any guard fails"| REJECT["The whole save is rejected —<br/>nothing changes"]
  CHECKS -->|"all pass"| MOVES["A new URL is staged for every page<br/>whose folder ancestry changed"]
  MOVES --> RIGHTS{"Do you hold<br/>publish rights?"}
  RIGHTS -->|yes| NOW["Moved pages are committed<br/>and deployed now"]
  RIGHTS -->|no| LATER["Each move lands on that page's<br/>next publication"]
  NOW --> DIRTY
  LATER --> DIRTY

  DIRTY["The menu is marked as having<br/>unpublished changes"] --> DEPLOY["You select it on the Deploy tab"]
  DEPLOY --> MERGE["Merged into the site's menu data<br/>under the menu's NAME"]
  MERGE --> BUILD["The site builds"]
  BUILD --> NAV["The navigation renders —<br/>items pointing at unpublished pages<br/>are dropped without a message"]

Three facts that diagram is compressing:

  • Only menus with unpublished changes are included. A menu you have not touched since its last publish is skipped even if you select it on the Deploy tab.
  • The Deploy selection is the menu, not the pages it points at. Publishing a menu never publishes its targets, and an unpublished target is silently omitted from the rendered navigation rather than rendering as a dead link.
  • The site file is merged by menu name and never pruned. Your menu is written in under its name; every other menu in the file is left exactly as it was.

That combination gives you the verification step: publish the pages first, then look at the navigation. Checking a nav before its targets are live tells you nothing, because the missing entries look identical to entries you forgot to add.

The Deploy tab, and how to publish a subset of what is pending, are covered in Publishing Changes. Moving a folder in a documentation menu has consequences well beyond the nav — what is staged, what is committed, and when — and those are on Folders Set Your URLs.

An MCP client edits this same tree through update_menu_draft, which is a full replacement — every call carries the complete tree, not a patch. That, and the rest of the structural tooling, is in MCP Tools: Site Structure. Creating a page from Create new page opens the standard dialog described in Managing Pages.

ESC