emm
A modern interface for Drupal menu management.
Enhanced Menu Manager (EMM) replaces the default Drupal 10/11 menu link overview with an interactive tree view. It is designed to handle menus of any size, specifically addressing the usability issues encountered with complex or deeply nested site navigation.
Forked from Enhanced Taxonomy Manager (ETM), adapted specifically for the Drupal menu system.
🚧 Work in Progress
EMM is in active development.
This is a complete reimagining of the Drupal Menu UI. Core functionality is stable and used in production, but we are actively seeking feedback — especially on visual compatibility with heavily customized admin themes.
If you run into issues, please submit a ticket in the queue. Bug reports and feature requests are appreciated as we work to stabilize the codebase.
Share the Vision: If you see the potential in this approach, please share the module with your network. The more people testing and contributing, the sooner we can reach a state where we never have to rely on the core menu page again.
The Problem
The core menu interface becomes unwieldy with large hierarchies. Drag-and-drop becomes sluggish, there is no search functionality, and reorganizing complex navigation requires repeated page reloads and risky "Save" button commits that affect the entire menu at once.
Why Upgrade to EMM?
EMM offers a completely different approach to menu management built on modern UI standards:
- UI/UX: Modern CSS/SVG design tokens — no jQuery UI widgets.
- Speed: Operations are staged in the browser for instant feedback — no AJAX round-trip per drag.
- Safety: Local Undo (Ctrl+Z) history, snapshots, and confirmation dialogs protect against mistakes.
- Performance: Lazy-loading and pagination handle large menus without freezing the browser.
- AI: Optional submodule for automated restructuring and organization via natural language.
Key Features
Drag-and-Drop with Client-Side Staging
- SortableJS: Stable drag-and-drop that works on desktop and touch devices.
- Nesting: Reorder siblings and reparent menu links in a single gesture.
- Instant Feedback: Position changes are staged locally — every drag, move, and nest is reflected immediately with zero server delay.
- Save When Ready: A pulsing "Save Order" button and a warning bar appear when you have unsaved changes. Click Save Now to commit all changes in a single batch, or Discard to reload and revert.
- Entity API Compliance: All saves go through Drupal's Entity API, so hooks, access checks, cache invalidation, and menu tree rebuilds work correctly.
- Safety: Confirmation dialogs for large moves, and the browser warns you before navigating away with unsaved changes.
Navigation & Search
- Live Filter: Debounced search to locate menu links instantly.
- "Go to in Tree": Selecting a search result expands the tree path and scrolls to the link.
- A–Z Filtering: Quick letter links for browsing large menus alphabetically.
- Keyboard Navigation: Arrow keys, Home/End, and shortcut keys for power users. A built-in Guide panel documents all available shortcuts.
History & Recovery
- Undo/Redo: Standard Ctrl+Z / Ctrl+Shift+Z support for recent actions.
- Snapshots: Create a named backup before reorganizing. Restore any snapshot with one click.
Site Builder Tools
- Link Merging: Combine duplicate links and reassign children.
- Bulk Operations: Enable, disable, or delete multiple links at once.
- Inline Editing: Double-click to rename menu links in place.
- Clone: Duplicate a link (with or without children) in one click.
- Find & Replace: Search and replace across link titles with preview before applying.
- Move Dialog: Move a link to any parent via a searchable modal — no drag required.
Diagnostics
- Statistics: At-a-glance dashboard showing link counts, depth distribution, and letter frequency chart.
- Health Check: Detects orphan links, depth violations, and other structural issues with suggested fixes.
- Duplicate Scanner: Identifies menu links with identical titles and shows their locations.
Import / Export
- CSV Download: Export the menu structure for use in Excel or other tools.
- Copy List: Export as a formatted text list for documentation.
- Bulk Import: Paste a hierarchical list (using dashes
-) to build menus quickly.
AI Integration (Optional)
The EMM AI submodule integrates with the Drupal AI module. It supports OpenAI, Anthropic, and local LLMs via Ollama.
Capabilities
- Restructure Engine: Describe changes in plain English. The AI proposes operations (move, rename, merge) which you review and apply.
- Chat Interface: Ask questions about the menu structure or issue commands conversationally.
- Structure Tools: Suggest parent links for orphans, detect duplicates, and generate link descriptions.
Performance
Designed to handle large menus efficiently:
- Lazy Loading: Child links are fetched only when a parent is expanded.
- Pagination: Large sibling sets are paginated to manage memory usage.
- Zero-Latency Interface: Drag, drop, and nest items instantly. The browser handles UI logic, eliminating the sluggish "wait-to-save" lag of core Drupal menus.
- Entity API: All persistence uses Drupal's Entity API and query builder — no direct SQL. Hooks, access checks, and caching are handled correctly.
Installation
composer require drupal/emm drush en enhanced_menu_manager
For AI features:
composer require drupal/ai drush en emm_ai
Requirements
- Drupal 10 or 11
- PHP 8.1+
- EMM AI requires the Drupal AI module.
Related Projects
EMM is part of a family of Enhanced Manager modules that share a common architecture:
- Enhanced Taxonomy Manager (ETM) — The original. Modern tree view for taxonomy management with drag-and-drop, inline editing, search, undo history, snapshots, and optional AI integration.
- Enhanced Menu Manager (EMM) — The same modern tree view adapted for Drupal menu management.
- Enhanced Commerce Product Manager (ECPM) — Modern interface for managing Drupal Commerce product catalogs, categories, and related entities.