etm
Stop fighting the Drupal taxonomy page.
Enhanced Taxonomy Manager (ETM) replaces the default term overview with a fast, interactive tree view built for real-world vocabularies — from a handful of terms to 100,000+.
Drag-and-drop that doesn't lag. Search that actually works. Undo when you make a mistake. And an optional AI engine that restructures your taxonomy on command. No jQuery — just modern vanilla JavaScript.
The Problem
Anyone who has managed a large Drupal vocabulary knows the pain:
- Drag-and-drop grinds to a halt past a few hundred terms.
- No search — just endless scrolling to find what you need.
- One wrong "Save" commits every change at once with no undo.
- No way to filter, drill down, or see where you are in a deep hierarchy.
- Reorganizing 10,000 terms? Clear your afternoon.
ETM was built to fix all of this.
How ETM Is Different
The classic Taxonomy Manager is solid and established. ETM takes a different approach:
- Drag-and-drop — SortableJS; instant feedback even at 100k terms.
- Search — Live search, A–Z filter, faceted filters, and breadcrumb drill-down.
- Undo — Ctrl+Z / Ctrl+Shift+Z with full history.
- Performance — Lazy loading and pagination instead of loading everything.
- No jQuery — 100% vanilla JavaScript. No library conflicts, no legacy weight.
- Save model — Stage changes locally; batch save when you're ready.
- Recovery — Named snapshots with one-click restore.
- AI — Optional restructure engine, mapping to standards, and chat.
Key Features
🖱️ Drag-and-Drop with Client-Side Staging
Every change happens instantly in the browser. No waiting for the server between drags.
- SortableJS engine — smooth reordering and reparenting on desktop and touch.
- Stage → Review → Save — changes are held locally until you click Save Now. A pulsing button and warning bar remind you when there are uncommitted changes.
- Entity API compliant — saves go through Drupal's Entity API. Hooks, access checks, cache invalidation, and search indexing all fire correctly.
- Safety nets — confirmation dialogs for large moves, and the browser warns before navigating away with unsaved work.
🔍 Navigation & Search
Find any term in seconds, no matter how large the vocabulary.
- Live search — debounced, highlights matches, "Go to in Tree" expands the path and scrolls to the result.
- A–Z quick links — jump to terms by first letter.
- Breadcrumb drill-down — navigate level-by-level through deep hierarchies. Includes its own drag-and-drop for reordering within a level.
- Faceted filtering — filter by status, depth, child count, or modification date. Results show full breadcrumb paths and link back into the tree.
- Keyboard navigation — arrow keys, Home/End, and shortcut keys for power users. Built-in Guide panel documents everything.
⏪ History & Recovery
Mistakes happen. ETM makes them reversible.
- Undo / Redo — Ctrl+Z and Ctrl+Shift+Z with a full action history.
- Revision log — tracks who moved what and when.
- Snapshots — create a named backup before any big reorganization. Restore with one click.
🛠️ Site Builder Tools
The everyday operations that core makes tedious.
- Inline editing — double-click any term to rename it in place.
- Term merging — combine duplicates and reassign all content references automatically.
- Clone — duplicate a term (with or without its children) in one click.
- Find & Replace — search and replace across term names with a preview before applying.
- Move dialog — move a term to any parent via a searchable modal. No drag required.
- Bulk operations — publish, unpublish, or delete multiple terms at once.
🩺 Diagnostics
Know exactly what's in your vocabulary and what needs attention.
- Statistics — term counts, depth distribution, published/unpublished breakdown, letter frequency chart.
- Health check — detects orphans, depth violations, and structural issues with suggested fixes.
- Duplicate scanner — finds terms with identical names and shows their locations side-by-side.
- Recently modified — panel showing the latest changes with timestamps, parent paths, and direct links.
- Orphan cleanup — find terms whose parent was deleted. Bulk reparent to root or delete.
📥 Import / Export
- CSV download — full tree structure for Excel or data tools. Optional max-depth filter.
- Copy list — formatted text output for documentation. Optional max-depth filter.
- Bulk import — paste a hierarchical list (using dashes
-for nesting) to build trees in seconds.
🤖 AI Integration (Optional)
The ETM AI submodule brings large-language-model capabilities directly into the tree view. It integrates with the Drupal AI module and supports OpenAI, Anthropic, and local LLMs via Ollama — so your vocabulary data can stay on-premise if needed.
Restructure Engine
Describe what you want in plain English — "Move all color terms under Attributes → Colors" or "Flatten everything deeper than 3 levels." The AI analyzes the vocabulary, proposes a set of operations (move, rename, merge, delete), and presents them for review. Accept all, cherry-pick individual changes, or reject and refine.
Standardization & Mapping
Map your vocabulary against industry standards like Google Product Taxonomy, Schema.org, or any custom reference list. The AI identifies gaps, suggests new terms, and proposes renames to align with the target standard.
Chat Interface
A conversational sidebar built into the tree view. Ask questions — "Which top-level terms have no children?", "Find terms that might be duplicates of 'Accessories'" — or issue commands: "Rename all terms ending in 's' to singular form." Results link directly back into the tree.
Structure Tools
- Orphan placement — suggests the best parent for unplaced terms based on semantic similarity.
- Duplicate detection — goes beyond exact-match. Finds semantic duplicates like "Tees" vs. "T-Shirts."
- Description generation — auto-generate term descriptions from context and hierarchy position.
⚡ Performance
ETM is built for vocabularies that make core Drupal choke.
- Lazy loading — child terms are fetched only when a parent is expanded. The initial page load is fast regardless of vocabulary size.
- Pagination — large sibling sets are paginated to cap memory usage.
- Zero-latency interface — all drag, drop, and nest operations happen in the browser. No server round-trip until you save.
- Entity API — all persistence uses Drupal's Entity API and query builder. No direct SQL. Hooks, access checks, and caching are handled correctly.
- No jQuery dependency — built entirely with vanilla JavaScript and the Drupal core JS API. No jQuery, no jQuery UI. This eliminates library conflicts and reduces page weight.
Installation
composer require drupal/etm drush en enhanced_taxonomy_manager
For AI features:
composer require drupal/ai drush en etm_ai
Configure the provider at Admin > Structure > Taxonomy > AI Settings.
Usage
- Go to Structure > Taxonomy.
- Click the "Tree View" tab on any vocabulary.
- Direct link:
/admin/structure/taxonomy/{vocabulary_id}/tree
Requirements
- Drupal 10 or 11
- PHP 8.1+
- ETM AI requires the Drupal AI module.
🚧 Status & Feedback
ETM is in active development. Core functionality is stable and used in production, but we are actively seeking feedback — especially on visual compatibility with heavily customized admin themes.
Found a bug? Have a feature idea? Please open an issue. Every report helps.
If you see the potential in this approach, 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 taxonomy page again.
Related Projects
ETM is the foundation for a family of Enhanced Manager modules sharing a common architecture:
- Enhanced Taxonomy Manager (ETM) — The original. Everything above.
- Enhanced Menu Manager (EMM) — The same modern tree view adapted for Drupal menu management.