> For the complete documentation index, see [llms.txt](https://enchantedmobs.superiormc.cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://enchantedmobs.superiormc.cn/for-ultimatequest/configuration/categories.md).

# Task Categories

Categories are single-level and multi-select. Create `categories/<id>.yml`:

```yaml
enabled: true
name: '{lang:defaults.categories.combat.name}'
description:
- '{lang:defaults.categories.combat.description}'
icon:
  material: IRON_SWORD
order: 10
```

Set root `categories: [combat, gathering]` on normal tasks, scrolls, pass catalogs, milestones; use `tasks.<id>.categories` for challenges and `task.categories` for periods. Objective templates do not transfer categories. Empty/absent lists use uncategorized; `all` and `uncategorized` are reserved IDs.

Sort by ascending order, then ID. Duplicate references are deduplicated. Unknown IDs/invalid types reject definition reload and retain the previous set. Disabled categories disappear from the selector while tasks remain in All.

Normal/pass category metadata follows current definitions; generated periods/scrolls keep snapshots. Multi-category tasks count separately toward category caps, once toward type totals.

Enable `category-filter.enabled` in menus and provide an `open_categories` action. Defaults come from `config.yml -> category-menu`; per-menu `category-filter` overrides title, layout, item, selected-item, empty-item, and items. Layout symbols: Q category slots, P/N pages, B back, C close.

Cards support `{category-id}`, `{category-name}`, `{category-description}`, `{category-count}`, `{category-active}`, `{category-claimable}`, `{category-selected}`; task cards support `{categories}`. Fixed `contents.<symbol>.categories` intersects player selection. Status/category filters combine; changing category resets the page, returning preserves filters.

Use `/uq editor category`; task editors offer multi-select drafts, and period root editing targets task.categories. Apply through validation. See [menus](/for-ultimatequest/menus/menus-1.md) and [limits](/for-ultimatequest/features/task-limits.md).

## 🫥 Empty category choices

category-filter.hide-empty defaults false and removes zero-count category choices when enabled. The bundled main and scroll menus enable it. All stays available, and the scope follows the current content/profile filters; category statistics deduplicate a task across repeated regions.
