MenuBuilder
Version 1.0.2
October 2, 2026
Improved menu item labels and page linking, with several editor, quick-add, and UI fixes.
Added
- Added a globe icon to menu items with a valid front-end page link, opening the page in a new tab.
- Linked elements now appear as Title field placeholders when adding or editing menu items.
- Fields coming from the menu's field layout are now badged as custom fields in the item editor.
Fixed
- Fixed the Upgrade to Pro link.
- Improved menu item naming using the linked element's title.
- Fixed the Nest under list updating after menu reordering.
- Fixed
0being displayed as (untitled). - Fixed drag-and-drop failures making Edit and reordering unresponsive.
- Fixed Edit using an outdated parent after dragging.
- Fixed Craft controls such as lightswitches, checkboxes, and action menus in the item editor.
- Fixed the Menus table overlapping the edition information.
Version 1.0.1
September 15, 2026
Fixes plugin installation. MenuBuilder 1.0.0 could not be installed from the Plugin Store or the command line; this release corrects the plugin handle and everything Craft derives from it.
Fixed
- Corrected the Craft plugin handle to
menubuilder, matching the Plugin Store listing. MenuBuilder 1.0.0 declaredmenu-builderincomposer.json, sophp craft plugin/install menubuilderand Plugin Store installation both failed with Invalid plugin: No plugin exists with the handle "menubuilder". - Updated everything Craft derives from the handle: control-panel routes and URL rules, controller
action routes, the template root, the translation category, the control-panel navigation item, and
the project-config key (now
plugins.menubuilder.edition). - Unified the internal cache, cache-tag, mutex, and API rate-limit key namespaces under
menubuilder:. - Updated the documentation to use the corrected handle, including the installation command, the control-panel routes, and the plugin configuration filename.
Version 1.0.0
September 13, 2026
First stable release of MenuBuilder for Craft CMS 5.
Added
Menus
- Create and manage multiple named menus with handles, descriptions, enable/disable status, and ordering.
- Free edition supports one menu; Pro supports unlimited menus.
- Configure maximum menu nesting depth from 1–10.
- Restrict menus to specific sites.
- Configure menu CSS classes and validated HTML attributes.
- Duplicate complete menus, including their settings and menu items.
- Reorder menus using drag-and-drop or keyboard controls.
Menu Items
Eight menu item types:
- Entry
- Category
- Asset
- Custom URL
- Anchor
- Non-clickable heading
- Separator
- Dynamic navigation
- Live element-link resolution per request and site.
- Configurable fallback behavior for unavailable linked elements.
- New-tab targets with automatic
rel="noopener"handling. - Preset and custom
relattributes. - Icons, badges, descriptions, images, featured status, CSS classes, HTML IDs, and custom HTML attributes.
- Accessibility fields including ARIA labels and
titleattributes. - Enable/disable and duplicate menu items, including their complete subtrees.
- Custom fields for menu items using Craft field layouts, including Matrix and relational fields.
- Field conditions and multiple field-layout tabs are supported.
Visibility, Mega Menus, Mobile & Dynamic Navigation
Visibility rules for:
- Logged-in users
- Logged-out users
- User groups
- Sites
- Date ranges
- Environments
- Always-visible items
- Combine visibility rules using AND logic.
- Mega menus with 1–6 columns and configurable child-item placement.
- Mobile-specific menu presentation settings without maintaining a separate mobile menu.
Dynamic navigation generated from:
- Entries by section
- Categories by group
- Assets by volume
- Dynamic navigation limits and supported ordering are validated server-side.
Control Panel
- Drag-and-drop hierarchical menu editor.
- Full keyboard alternatives for menu and item reordering.
- Slide-out item editor with full-page fallback.
- Quick-add panel.
- Search and filtering.
- Bulk enable, disable, and delete actions.
- Visual indicators for children, disabled items, and mega menus.
- Link-health indicators for internal links.
- Menu-wide link-health summary with direct navigation to affected items.
- Preview screen for saved menus across selected site, audience, region, and device settings.
- Preview of rendered markup.
Developer Features
Twig API:
craft.menuBuilder.get().breadcrumbs().getGroup().getItem().iconAsset()
MenuBuilderNodeas the stable public navigation object.- Breadcrumbs based on the menu hierarchy rather than URL segments.
- Optional Twig macros for trees and breadcrumbs.
- Optional navigation asset for enhanced mega-menu keyboard behavior.
- Navigation field for integrating MenuBuilder navigation with Craft field layouts.
- GraphQL queries for MenuBuilder navigation.
- REST API endpoints for read-only navigation access.
- REST API support for ETags, CORS allowlists, and rate limiting.
- Extension events for registering custom link types and visibility rules.
Editions
- Free and Pro editions using Craft's commercial plugin licensing system.
- Free edition supports one menu.
- Pro edition supports unlimited menus.
- All other MenuBuilder features are available in both editions.
- Edition limits are enforced server-side through the menu service.
- Existing menus and data are preserved when Pro access expires or is downgraded.
- Menu rendering and existing menu editing remain available after downgrade.
- Commercial licensing uses Craft's licensing infrastructure; MenuBuilder does not maintain its own license system.
Performance
- Resolved menu data is cached per menu, site, and configuration version.
- Visibility rules and active-state resolution are evaluated for each request.
- Targeted cache invalidation is used for menu, item, element, container, and site changes.
- Draft and revision saves do not unnecessarily invalidate menu caches.
- Element links and custom-field content are batch loaded.
- Menu trees use efficient flat queries and batch loading to maintain predictable query counts.
Security
Five MenuBuilder permissions:
menuBuilder:viewmenuBuilder:createmenuBuilder:editmenuBuilder:deletemenuBuilder:manageSettings
- Server-side permission enforcement for all protected actions.
- All control-panel mutations require POST requests and Craft CSRF protection.
- Control-panel actions require valid control-panel requests.
- URL, HTML attribute, ID, and CSS class validation rejects unsafe values and executable schemes.
- Custom HTML attributes are validated during saving and filtered again during rendering.
- GraphQL and REST visibility resolution is performed independently of the caller's identity to prevent cached visibility decisions from leaking between users.
- REST API request and failed-authentication rate limiting.
- Rate limiting can be controlled through the plugin's
rateLimitconfiguration.
Accessibility
- Navigation output uses named
<nav>landmarks and semantic lists. - Active links use
aria-current="page". - Separators use semantic
<hr>elements. - New-tab links provide a hidden accessibility hint.
- Mega-menu disclosures use native
<details>elements. - Menu management provides keyboard alternatives to drag-and-drop interactions.
- Custom HTML attributes are filtered during rendering to maintain safe output.
Known Limitations
The following limitations are accepted for the 1.0.0 release:
- Menu and item save/delete events are not currently provided. MenuBuilder exposes registration events for custom link types and visibility rules.
- There is no built-in menu import/export format or command.
- Navigation fields resolve their menu for the current request's site.
- Changes driven only by Craft entry
postDateorexpiryDatedo not trigger an immediate menu cache invalidation; cache duration determines the maximum staleness. - Third-party element types without a built-in MenuBuilder link type are not automatically supported.
- Custom link types registered through the extension API are responsible for invalidating affected menu caches when necessary.
- Orphaned menu items are reported rather than automatically repaired.
- Preview renders saved menu data and does not simulate future time-based changes.
- Some Craft-dependent behavior requires integration testing and manual verification in addition to unit tests.
For detailed architecture, implementation decisions, API documentation, testing procedures, and release guidance, see ARCHITECTURE.md and README.md.