Enhanced Taxonomy Manager
Enhanced Taxonomy Manager (ETM) provides a faster, more interactive tree view for managing Drupal taxonomies, offering drag-and-drop functionality, robust search, and undo capabilities. It also includes features like inline editing, term merging, and an optional AI engine to restructure vocabularies.
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.
Depends on
Dependencies of the latest stable release
No dependencies recorded for this project.
Required by
Tracked projects that depend on this one
No tracked projects depend on this one yet.
Activity
Release Timeline
Releases
| Version | Type | Core | Notes | Release date | |
|---|---|---|---|---|---|
| 2.2.1 | Stable | 10–11 | Jul 31, 2026 | ||
| 2.2.0 | Stable | 10–11 | Jul 31, 2026 | ||
| 2.2.0-beta36 | Pre-release | 10–11 | Jun 26, 2026 | ||
| 2.2.0-beta35 | Pre-release | 10–11 | Jun 26, 2026 | ||
| 2.2.0-beta34 | Pre-release | 10–11 | Jun 26, 2026 | ||
| 2.2.0-beta33 | Pre-release | 10–11 | Jun 26, 2026 | ||
| 2.2.0-beta32 | Pre-release | 10–11 | Stylelint + ESLint CI compliance (CSS and JS code quality fixes) | Feb 16, 2026 | |
| 2.2.0-beta29 | Pre-release | 10–11 | ESLint code quality fixes across all JS files; drill-down breadcrumb theming | Feb 16, 2026 | |
| 2.2.0-beta27 | Pre-release | 10–11 | Resolves all GitLab CI failures; full Drupal 11 strict types compatibility and coding standards compliance. | Feb 16, 2026 | |
| 2.2.0-beta25 | Pre-release | 10–11 | Security baseline: strict_types, filter_fallback_format(), and (int) casts for IDs in APIs and DB inserts. | Feb 16, 2026 | |
| 2.2.0-beta24 | Pre-release | 10–11 | ixed: AJAX error "The specified #ajax callback is empty or not callable" when merging terms in a modal dialog. | Feb 15, 2026 | |
| 2.2.0-beta23 | Pre-release | 10–11 | Actions dropdown menu, responsive mobile/tablet layout, column toggle fix. | Feb 14, 2026 | |
| 2.2.0-beta22 | Pre-release | 10–11 | Clone terms, inline columns, usage report, find & replace, description tooltips, health check, and keyboard navigation. | Feb 14, 2026 | |
| 2.2.0-beta21 | Pre-release | 10–11 | Clone feature added | Feb 14, 2026 | |
| 2.2.0-beta20 | Pre-release | 10–11 | Fixes visual alignment of leaf vs parent term rows in the dashboard. | Feb 14, 2026 | |
| 2.2.0-beta19 | Pre-release | 10–11 | Configurable snapshot date format, delete all snapshots button, improved batch restore error handling. | Feb 14, 2026 | |
| 2.2.0-beta17 | Pre-release | 10–11 | Feb 14, 2026 | ||
| 2.2.0-beta16 | Pre-release | 10–11 | Fix strict_types type coercion errors breaking child term loading.<h3>Bug fix</h3> <ul> <li><strong>Fixed "Failed to load child terms" error</strong> — the <code>declare(strict_types=1)</code> added in beta15 broke implicit type coercion for Drupal enti | Feb 14, 2026 | |
| 2.2.0-beta15 | Pre-release | 10–11 | Security hardening, Entity API migration, batch save workflow. | Feb 14, 2026 | |
| 2.2.0-beta14 | Pre-release | 10–11 | Feb 14, 2026 | ||
| 2.2.0-beta12 | Pre-release | 10–11 | Feb 13, 2026 | ||
| 2.2.0-beta11 | Pre-release | 10–11 | Adds ETM AI submodule with 10 AI-powered features: restructure engine, industry templates, chat commander, URL import, generate children, suggest placement, semantic duplicates, generate descriptions, and health check. Fixes chat duplication bug. | Feb 13, 2026 | |
| 2.2.0-beta10 | Pre-release | 10–11 | Backend refactored into 6 focused controllers; security audit fixes; export/import modal redesign; settings UI.## Enhanced Taxonomy Manager 2.2.0-beta10 ### Backend Architecture Refactor The monolithic `TaxonomyManagerController.php` (3,004 lines, 37 met | Feb 13, 2026 | |
| 2.2.0-beta9 | Pre-release | 10–11 | Feb 13, 2026 | ||
| 2.2.0-beta7 | Pre-release | 10–11 | Split monolithic JS into 8 modular files, bundle SortableJS locally, add CSRF validation, use Drupal.checkPlain for XSS safety. | Feb 13, 2026 | |
| 2.2.0-beta6 | Pre-release | 10–11 | Nest/un-nest arrows, range navigator for large vocabularies, stats panel, duplicate finder, bulk operations, inline modals, Drush commands, and bug fixes. | Feb 13, 2026 | |
| 2.2.0-beta5 | Pre-release | 10–11 | Two-step merge preview with impact report, improved tree navigation from search | Feb 10, 2026 | |
| 2.2.0-beta4 | Pre-release | 10–11 | Inline rename, merge terms, modal dialogs with fallback | Feb 10, 2026 | |
| 2.2.0-beta3 | Pre-release | 10–11 | Short description: Removes modal dialogs in favor of simple page navigation. Fixes all dialog-related errors. | Feb 10, 2026 | |
| 2.2.0-beta2 | Pre-release | 10–11 | Fixes form errors without jQuery UI, adds Load All button, marks module as experimental. | Feb 10, 2026 | |
| 2.2.0-beta1 | Pre-release | 10–11 | eta release: fixes Load More button visibility, adds Load All option, improves modal dialog compatibility. | Feb 10, 2026 | |
| 2.1.0 | Stable | 10–11 | Feb 10, 2026 | ||
| 2.0.1 | Stable | 10–11 | Drupal 11 compatibility, admin menu integration, bug fixes | Feb 10, 2026 | |
| 2.0.0 | Stable | 10–11 | Major rewrite with modern UI, drag-and-drop, revision history, undo, and snapshot management. | Feb 10, 2026 | |
| 1.0.5 | Stable | 9–10 | May 28, 2025 | ||
| 1.0.1 | Stable | 9–10 | May 28, 2025 | ||
| 1.0.x-dev | Dev | 10–11 | May 28, 2025 |