# Tag View

A **tag** is a label you can add to tasks for cross-cutting categorization. Unlike projects, where each task belongs to exactly one project, tasks can have **zero, one, or multiple tags**.

## What Problem Do Tags Solve?

Tags solve the **cross-cutting categorization** problem that projects cannot. Because every task belongs to exactly one project, projects provide **structural organization**. Tags provide **flexible labeling** across projects.

For example, a task might belong to the "Backend API" project but be tagged with `#urgent`, `#bug`, and `#needs-review`. This lets you:

- **Multi-dimensional categorization**: Organize by project (structural) and by tags (cross-cutting)
- **Flexible filtering**: View all "urgent" tasks across all projects, or all "bug" tasks regardless of which project they're in
- **Lightweight organization**: Tags are simple labels—no backlog, notes, or complex configuration like projects have

## Tags Vs Projects

| Aspect                    | Tags                                             | Projects                                |
| ------------------------- | ------------------------------------------------ | --------------------------------------- |
| **Relationship to tasks** | Zero or more tags per task (optional)            | Exactly one project per task (required) |
| **Purpose**               | Cross-cutting labels for flexible categorization | Primary structural organization         |
| **Features**              | Simple labels for filtering and grouping         | Backlog, notes, theme, integrations     |

A task must always belong to a project, but tags are optional. You can add multiple tags to a single task to categorize it in different ways.

## Multiple Tags

Tasks can have **multiple tags**. When you create or edit a task, you can:

- Add multiple tags using the `#tagname` syntax in the task title (for example: `"Fix login bug #urgent #bug #backend"`)
- Select multiple tags via checkboxes in the add task bar
- Add or remove multiple tags in the tag edit dialog

This lets you categorize tasks along multiple dimensions—by urgency, type, area, or any other system that makes sense for your workflow.

## Filtering by Tags

You can filter tasks by tag to see all tasks with a specific tag across all projects. The filter supports:

- **Tag name search**: Type part of a tag name to find tasks with matching tags (case-insensitive)
- **No tags**: Filter to show only tasks that have no tags

When you view a tag, you see tasks from multiple projects that have that tag. Each task shows its project as a badge so you can see which project it belongs to.

## Special Case: Today Tag

The "Today" view uses a special **virtual tag** pattern. Tasks appear in the Today view based on their due date (`task.dueDay === today`), not because they have a "Today" tag in their tag list. This keeps the Today view focused on time-based organization while tags remain for category-based organization.

See [[4.01-The-Today-View]] for more about how the Today view works.

## Ways to Use Tags

Here are some common approaches to using tags:

- [[4.07a-Tags_Eat-the-Frog]] — Priority-based tagging (A, B, C, D)
- [[4.07b-Tags_Ordinal-Priorities]] — Using tags to approximate priority levels

## Related

- [[4.06-Project-View]] — How projects provide structural organization (required) vs tags (optional)
- [[4.05-Board-View]] — Visual column-based organization that uses tags for filtering
- [[4.01-The-Today-View]] — The time-based Today view (uses a virtual tag pattern)
- [[3.04-Short-Syntax]] — How to add tags using `#tagname` syntax
