/admin/menus). From here you can create new menus, navigate to a menu’s detail page, copy, export, or delete menus.
Creating a menu
Open the new menu form
Click New menu on the dashboard index page. The form opens in a modal (or a full page if modals are disabled).
Fill in the definition fields
The creation form shows the definition panel (pencil). Fill in:
| Field | Description |
|---|---|
| Code | Unique machine-readable identifier, e.g. sidebar. Cannot be changed after creation for base menus. |
| Name | Human-readable label shown in the dashboard. |
| Context | Optional JSON object that disambiguates menus with the same code, e.g. {"partnerId": 1}. Leave empty for the default variant. |
| Icon | Optional icon identifier, e.g. bootstrap-icons:house. |
Editing a menu
From the menu detail page, two edit buttons are available:Definition (pencil)
Edits the identity fields:- Code — not editable on base menus
- Name
- Context (JSON)
- Icon
Configuration (gear)
Edits the rendering and behavior options:| Field | Description |
|---|---|
| Permission checker | Service that determines which items are visible. Select from registered checkers. |
| Depth limit | Maximum nesting depth to render. Leave empty for unlimited. |
| Collapsible | Wrap the whole menu in a collapsible block (Bootstrap 5 collapse). |
| Collapsible expanded | Whether the menu starts open or closed when collapsible is on. |
| Nested collapsible | Give each item with children a toggle to expand or collapse its subtree. |
Root <ul> id | Optional id attribute on the menu’s root <ul> element (ulId). |
| CSS classes | Per-class dropdowns — see the table below. |
Per-menu CSS class fields
| Field | Applied to |
|---|---|
classMenu | The root <ul> element |
classItem | Each <li> element |
classLink | Each <a> element |
classChildren | Nested <ul> elements |
classCurrent | The active/current item |
classBranchExpanded | An ancestor of the current item |
classHasChildren | Items that have children |
classExpanded | An expanded collapsible item |
classCollapsed | A collapsed collapsible item |
classSectionLabel | Section-type items (non-link group headers) |
Copying a menu
Copying duplicates a menu together with all its items (including the full hierarchy and translations). Only the code and name change.The copied menu inherits the same context, icon, CSS classes, permission checker, depth limit, and collapsible settings as the original. The
base flag is reset to false on the copy.Deleting a menu
Clicking Delete on a menu removes the menu and all its items (cascade delete). A confirmation modal is shown before the action is performed.Exporting and importing menus
You can transfer menus between environments using the JSON export/import feature.Export
- Export all menus — downloads a single JSON file containing every menu and its items.
- Export one menu — downloads a JSON file for the selected menu only (filename:
menu-{code}-export.json).
Import
Open the import page
Click Import on the dashboard index. The form is available both as a full page and as a modal.
Choose a JSON file
Upload a file produced by the export action. The same JSON format is accepted for single menus and multi-menu exports.
Select an import strategy
| Strategy | Behaviour |
|---|---|
| Skip existing | Menus that already exist (same code + context) are left untouched. |
| Replace | Existing menus’ items are replaced with the imported data. |
Item trees and per-locale translations are preserved during export and import.