Bulk Tag Manager

by ducktapekiller
5
4
3
2
1
Score: 51/100

Description

The Bulk Tag Manager plugin gives you a central dashboard for cleaning up and reshaping tags across an entire vault. It can rename, merge, nest and delete tags in frontmatter and note body text, including child tags and it handles batch changes through tables or CSV input. The dashboard surfaces tag statistics, invalid YAML warnings, format checks and scope filters so large edits stay visible before you commit them. It also converts tag casing, separator style and list formats, cleans frontmatter quoting and records destructive actions in a history system with undo support. Extra tools cover hierarchy browsing, orphan detection, tag list generation, protected tags, automatic tag aliases and context menu actions for search, tag pages and random note access.

Reviews

No reviews yet.

Stats

12
stars
2,471
downloads
3
forks
38
days
38
days
38
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
3
total issues
0
open issues
3
closed issues
74
commits

Latest Version

a month ago

Changelog

v1.0.5

A data-safety release. Several bugs could quietly change or lose notes; those are fixed, and every bulk operation now touches only the notes it's actually about.

Requires Obsidian 1.6.0 or later (unchanged).

Fixed — data safety

  • Bulk operations rewrote notes they had nothing to do with. Delete, merge, nest, batch rename and pattern rename opened every note in scope and re-saved its frontmatter. Because Obsidian rewrites frontmatter when it saves it, unrelated notes came back with quotes stripped and values reformatted. Worse, those changes were never recorded in history, so Undo could not reverse them. Operations now skip notes that cannot match: deleting a tag from 2 notes changes 2 notes.

  • Undo could destroy work. If you edited a note after running an operation, Undo overwrote it with the old version. It now detects notes you've edited since, leaves them alone, and lists them afterwards.

  • "Generate tag list" could delete a note permanently. If you already had a note called All Tags.md, it was overwritten with no warning and no undo entry. It now asks first and saves the old contents to history.

  • Notes with a number or checkbox in their tag list were silently skipped. A note with tags: [work, 42, true] caused an internal error that was swallowed, so its tags were never deleted and nothing told you. Fixed.

  • Aliases reformatted every note you edited. With any alias configured, editing a note rewrote its frontmatter whether or not an alias applied — and alias corrections aren't recorded in history, so it couldn't be undone. It now only touches notes an alias actually matches.

Fixed — other

  • "Generate tag list" broke "Find orphaned tags". The generated file listed tags as plain #tag, which Obsidian indexed as real tags, adding one use to every tag in the vault. On a test vault this took the orphan report from 1562 tags to 0. Tags are now written as code, so the file no longer counts.

  • CSV rename files written with # produced nothing. #old,#new — the format the docs describe — was discarded as a comment, silently parsing to zero pairs.

  • Comments in a delete list became tags. A line like # tags to remove was turned into a tag named tags to remove.

  • Frontmatter repair now handles accented keys (Título:), CRLF files, and no longer adds a second set of quotes to values that were already correct.

  • Tag counts in the generated list, which the README promised but the file never included.

New

  • Property type checker. A panel below "Invalid Tags" that finds values whose type doesn't match the property — Score: "9.5" where Score is a Number, the thing Obsidian flags as "Type mismatch, expected Number". Notes still work, so these accumulate unnoticed, and Obsidian has no way to fix them in bulk. Fix one, fix a whole property, or fix all. Recorded in history and undoable. Only offers fixes it can prove: "about 10" under a Number property is reported, never guessed at.

  • History size limit. History now shows what it's using ("3 operations, using 14.2 MB of 100 MB") with a Clear button, and discards the oldest operations past the limit. Snapshots are also about half the size they were.

Changed

  • Metadata Utilities has been removed. "Standardise to Inline Array" and "to YAML List" did exactly what the two buttons in the statistics panel already do, just without telling you what happened — use those instead. "Clean front matter formatting" only trimmed spaces, which YAML already does; on a 1016-note vault it found nothing to trim while rewriting 993 notes.

  • The red "Fix invalid" button is now "Manage". It only opens a list; nothing is changed by clicking it.

  • Dialogs are sized correctly again — long lists scroll inside the window instead of pushing the heading and buttons off the top.

  • Section headings in Settings now match the rest of the plugin.

Thanks

To the users who reported the frontmatter changes and the tag-deletion spacing bug with detailed before/after examples. Both turned out to be the same underlying problem, and it would have been much harder to find without them.

README file from

Github

Bulk Tag Manager

Bulk Tag Manager Art

ko-fi

Bulk Tag Manager is a comprehensive tag management utility for Obsidian. It provides a unified, professional dashboard to rename, merge, delete, clean, standardise, and organise both tags and front matter properties across your entire vault. This plugin absorbed the functionalities from Tag Wrangler, by pjeby.


Table of Contents


[!WARNING] This plugin contains a History system that allows you to undo any operation. However, if you are about to perform a destructive bulk process, it is recommended that you backup your vault before running bulk operations.


$\color{red}{\text{Features}}$

$\color{blue}{\text{Dashboard Overview}}$

The plugin provides two interfaces:

  • Quick Actions Modal -- Accessed from the ribbon icon (Tags). Provides single-tag operations: rename, delete, search, tag page creation, and random note.
  • Settings Dashboard -- Accessed from Settings or the Command Palette. Contains the full suite of bulk operations, vault-wide statistics, and advanced tools.
$\color{orange}{\text{Tag Statistics}}$

At the top of the Settings Dashboard, expand the Overview section to see real-time analytics:

  • Total Tags -- Count of unique tags in your vault.
  • Total Files -- Number of notes in the current scope.
  • Case Consistency -- Breakdown of lowercase, uppercase, and mixed-case tags with a consistency progress bar.
  • Separator Consistency -- Breakdown of kebab-case, snake_case, mixed, and unseparated tags.
  • Clean Tags and Front Matter -- Count of clean tags vs. tags with special characters, plus detection of notes with unnecessarily quoted properties.
  • Tag Format Style -- Count of files using YAML list format vs. inline array format, with one-click conversion buttons.
  • Wiki Link Format Style -- Same format breakdown for wiki link properties (aliases, cssclasses, etc.).
  • Tag Nesting -- Count of flat vs. nested (hierarchical) tags, with links to files containing nested tags.
  • Locations -- Breakdown of tags in frontmatter vs. tags in the document body, with links to files containing inline body tags.
  • Length -- Detection of unusually long tags (over 25 characters).
  • Case Duplicates -- Automatic detection of tags that differ only by case (e.g. #Project vs #project), with a one-click "Merge all to canonical" button.
  • Empty Tags -- Detection of files with empty tag fields in frontmatter.

Clicking any statistic opens a detailed list of the relevant tags or files.

$\color{orange}{\text{Invalid Tag Detection}}$

If any files contain malformed YAML tag syntax (missing commas, unquoted colons, invalid formatting), an Invalid Tags warning block appears below the Overview. Clicking Fix Invalid opens a modal where you can review each issue and apply automatic or manual fixes.


$\color{blue}{\text{Rename, Merge, and Delete}}$

$\color{orange}{\text{Tag Renaming}}$

Rename any tag across all files, in both frontmatter and the document body.

  1. Go to the Rename Tag section.
  2. Enter the Find tag (or use the Search button to browse existing tags with usage counts).
  3. Enter the Replace tag. If the target tag already exists, a warning is displayed indicating the rename will merge the tags.
  4. Click Rename.

Child tags are automatically updated: renaming #project to #work will also rename #project/active to #work/active in both frontmatter and body.

$\color{orange}{\text{Batch Rename}}$

Rename multiple tags simultaneously using a dedicated table of old/new pairs.

  1. Go to the Batch Rename section.
  2. Add as many rows as needed.
  3. Enter the Old Tag and New Tag for each row.
  4. Click Apply.

This is ideal for quickly reorganising small groups of tags without running multiple single rename operations.

$\color{orange}{\text{Batch Rename from CSV}}$

Perform large-scale tag restructuring by uploading a data file.

  1. Go to the Batch Rename from CSV section.
  2. Click Choose CSV and select a file with two columns: old_tag and new_tag.
  3. Review the Preview of the first few pairs to ensure correct loading.
  4. Click Apply.

The CSV should not contain headers or the # symbol (though the plugin handles them if present).

$\color{orange}{\text{Tag Merging}}$

Consolidate multiple tags into a single canonical tag.

  1. Go to the Merge Tags section.
  2. Enter Source tags (comma-separated, e.g. #film, #movie), or use the Select button for a multi-select modal with checkboxes.
  3. Enter a Target tag (e.g. #cinema).
  4. Click Merge.

Duplicate tags in the same file are automatically deduplicated after merging. Child tags are propagated (e.g. #film/drama becomes #cinema/drama).

$\color{orange}{\text{Nest Tags}}$

Create hierarchical structures by moving existing tags under a new parent.

  1. Go to the Nest Tags section.
  2. Enter the Parent tag (e.g. #work).
  3. Enter the Tags to nest (comma-separated, e.g. #meetings, #tasks).
  4. Click Nest.

Each child tag will be renamed to include the parent prefix (e.g. #work/meetings and #work/tasks).

$\color{orange}{\text{Tag Deletion}}$

Remove tags from all files in the current scope.

  1. Go to the Delete Tags section.
  2. Enter tags to delete (comma-separated), or use the Select or Search buttons.
  3. Click Delete.

Deleting a parent tag also removes its child tags (e.g. deleting #project also removes #project/active and #project/done). Tags are removed from both frontmatter arrays and inline body occurrences. Trailing whitespace artifacts are automatically cleaned up.

$\color{orange}{\text{Pattern-Based Renaming (Regex)}}$

Advanced tag restructuring using Regular Expressions.

  1. Go to Pattern Rename (Regex).
  2. Enter a Pattern (e.g. ^category-(.*)).
  3. Enter a Replacement (e.g. new-category/$1).
  4. Click Apply.

Regex complexity is limited to prevent catastrophic backtracking (ReDoS). Frontmatter content is excluded from pattern matching to prevent YAML corruption.


$\color{blue}{\text{Bulk Standardisation and Settings}}$

$\color{orange}{\text{Conversion Rules}}$

Configure how tags should be formatted vault-wide:

  • Case Strategy -- Lowercase, Uppercase, or No Change.
  • Separator Style -- Snake_case, Kebab-case, or Preserve.
  • Remove Special Characters -- Strip everything except letters, numbers, hyphens, and underscores.
  • Flatten Diacritics -- Convert accented characters to their plain equivalents (e.g. a to a).
  • Apply to Nested Tags -- Whether to process child tags during conversion.

Click Convert All to apply these rules across all files in the current scope. A preview modal shows exactly which files and lines will be changed before you confirm.

$\color{orange}{\text{Bulk Case Conversion}}$

In the Case statistics box, two buttons allow you to convert all tags in your vault to uppercase or lowercase in a single operation, independent of the Case Strategy setting.

$\color{orange}{\text{Scope Filtering}}$

Limit all operations to specific parts of your vault.

  1. Enable Scope Filter.
  2. Use Include Folders to specify which folders to process.
  3. Use Exclude Folders to protect specific folders (e.g. Templates, Archive).
  4. Optionally set a File Pattern Filter (regex) applied to file paths for fine-grained control.

All statistics, conversions, and bulk operations respect the active scope filter.


$\color{blue}{\text{Metadata Utilities}}$

$\color{orange}{\text{Clean Front Matter Formatting}}$

Removes unnecessary quotes and trims whitespace from all frontmatter fields across the vault. This addresses Obsidian's tendency to add defensive quoting around property values.

$\color{orange}{\text{Standardise to Inline Array}}$

Converts both tag properties and wiki link properties (such as aliases and cssclasses) to the inline array format ([value1, value2]) across all files in the current scope.

$\color{orange}{\text{Standardise to YAML List}}$

Converts both tag properties and wiki link properties to the multiline YAML list format across all files:

tags:
  - tag1
  - tag2
$\color{orange}{\text{Tag Format Conversion}}$

In the Tag Format Style statistics box, you can convert tags specifically (without affecting wiki link properties) between YAML list and inline array formats.

In the Wiki Link Format Style statistics box, you can convert wiki link properties specifically between YAML list and inline array formats.


$\color{blue}{\text{Tools}}$

$\color{orange}{\text{Hierarchy View}}$

Visualise your tags as a collapsible, searchable tree to understand your taxonomy. Includes:

  • A search field to filter the tree in real time.
  • A sort dropdown (alphabetical, by count, by depth).
  • Expand All / Collapse All controls.
  • Click counts to see usage per tag node.
$\color{orange}{\text{Orphan Detection}}$

Find tags used fewer times than a configurable threshold (default: 2 files). The orphan modal lists all matching tags with their usage counts and provides a Delete All Orphans button for bulk cleanup.

$\color{orange}{\text{Tag List}}$

Generate a markdown file (All Tags.md) in your vault root listing every tag and its usage count, sorted alphabetically.

If All Tags.md already exists, you are asked to confirm before it is replaced, and its previous contents are written to undo history first.

$\color{orange}{\text{History and Undo}}$

Every destructive operation (rename, merge, delete, convert, pattern rename, format conversion, property cleaning) is recorded with full file snapshots.

  • Click History to view a chronological log of all operations.
  • Click Undo on any operation to revert every affected file to its exact state before the operation.
  • Notes you have edited since the operation ran are left untouched, so an undo cannot discard newer work. Any skipped notes are listed after the undo completes, and can be corrected by hand.
  • History is stored externally in the plugin's data directory to keep data.json small.
  • Configure Max History Size (default: 50 entries) and History Expiration (default: 7 days) in Settings.

$\color{blue}{\text{Protected Tags}}$

Define tags that should never be modified by any rename, merge, or delete operation.

  1. Go to Settings > Bulk Tag Manager > Protected Tags.
  2. Add a tag (e.g. #status/active).
  3. Use a wildcard (*) for prefix matching (e.g. #status/* protects #status/active, #status/done, etc.).

Protected tags are silently skipped during all bulk operations.


$\color{blue}{\text{Tag Aliases}}$

Define automatic correction rules that trigger when you save a note.

  1. Go to Settings > Bulk Tag Manager > Aliases.
  2. Add an Alias (e.g. wip) and a Canonical tag (e.g. work-in-progress).
  3. Whenever you save a note containing #wip, it is automatically corrected to #work-in-progress.

Aliases work in both frontmatter and the document body. Child tags are also corrected (e.g. #wip/urgent becomes #work-in-progress/urgent). A debounce timer prevents conflicts during rapid editing.


$\color{blue}{\text{Context Menu Integration}}$

Right-click any tag in the tag pane, editor, reading view, or metadata properties panel to access:

  • Rename -- Opens the rename prompt for that tag.
  • Delete -- Deletes the tag with confirmation.
  • Open / Create Tag Page -- Opens an existing tag page or creates a new one with the tag as an alias.
  • New Search -- Opens a global search scoped to the tag.
  • Require in Search -- Adds the tag as a required filter to the current search query.
  • Exclude from Search -- Excludes the tag from the current search query.
  • Open Random Note -- Opens a random note tagged with the selected tag (requires the Smart Random Note plugin).

Tags can also be dragged and dropped in the tag pane to restructure the hierarchy (e.g. dragging active onto project renames it to project/active).

Holding Ctrl/Cmd + Click on any tag in the editor or reading view opens its tag page, or prompts to create one.


$\color{red}{\text{Installation}}$

  1. Download the latest release from GitHub.
  2. Extract main.js, manifest.json, and styles.css into <vault>/.obsidian/plugins/bulk-tag-manager/.
  3. Reload Obsidian and enable the plugin.

$\color{red}{\text{Usage}}$

  • Click the Tags icon in the left ribbon for quick single-tag actions (rename, delete, search, tag page, random note).
  • Use Settings > Bulk Tag Manager for bulk operations, vault-wide cleanup, statistics, and advanced tools.
  • Right-click any tag in the tag pane, editor, or reading view for contextual actions.
  • Use the Command Palette for direct access to common operations.

$\color{red}{\text{Commands}}$

Command Description
Open Bulk Tag Manager Settings Opens the full settings dashboard
Convert all tags (with preview) Runs bulk conversion based on current settings with a preview
Generate Tag List Creates a markdown file listing all tags and their usage counts
Show Tag Hierarchy Opens the tag hierarchy tree view
Find Orphaned Tags Scans for tags below the usage threshold
Undo Last Tag Operation Reverts the most recent operation

$\color{red}{\text{Tips}}$

  • Use Preview: The bulk convert option shows a preview of every change before applying. Use it to verify before committing.
  • Check History: Use the History modal after any operation to verify exactly which files were changed and to undo if needed.
  • Scope Filters: Use Include/Exclude folders to test operations on a sandbox folder before running them vault-wide.
  • Protected Tags: Add critical tags (e.g. #status/*) to the protected list before running bulk operations to prevent accidental modification.
  • Case Duplicates: Run the case duplicate check periodically. Tags like #Project and #project are treated as separate tags by Obsidian and can cause inconsistencies.

$\color{red}{\text{Acknowledgements}}$

This plugin incorporates and extends the context menu and tag page functionality originally created by pjeby in the Tag Wrangler plugin.

Similar Plugins

info
• Similar plugins are suggested based on the common tags between the plugins.
Frontmatter Tag Sugest
5 years ago by Jonathan Miller
Autocompletes tags in Obsidian YAML frontmatter. No more deleting #!
Front Matter Title
4 years ago by Snezhig
Plugin for Obsidian.md
Open Related Url
4 years ago by Dan Pickett
Bulk Rename
4 years ago by Oleg Lustenko
Quick snippets and navigation
4 years ago by @aciq
Quick snippets and navigation for Obsidian
FuzzyTag
4 years ago by Adrian
Note aliases
4 years ago by Pulsovi
This plugin manages wikilinks aliases and save them on the aliases list of the linked note
Testing Vault
3 years ago by Michael Pedersen
Frontmatter Alias Display
3 years ago by muhammadv-i
A plugin for Obsidian.md to show front-matter aliases as display names in the file menu.
Auto Front Matter
3 years ago by conorzhong
Add an ID to the front matter
3 years ago by llimllib
Update frontmatter modified date
3 years ago by Alan Grainger
Automatically update a frontmatter/YAML modified date field
Frontmatter generator
3 years ago by Hananoshika Yomaru
A plugin for Obsidian that generates frontmatter for notes
Zettelkasten Outliner
3 years ago by Tyler Suzuki Nelson
Sort Frontmatter
3 years ago by Kanzi
Sort frontmatter automatically
Metadata Hider
3 years ago by Benature
Hide metadata property if its value is empty
Cluster
2 years ago by Lorens Osman
Cluster plugin mainly designed to simplify the process of note clustering on mobile devices and work well on PCs ether
Update Time Updater
2 years ago by MURATAGAWA Kei
Obsidian plugin to update the 'update time' element when saving or manually.
Draft Indicator
2 years ago by Brian Boucheron
Show draft status with ✎ icons in the Obsidian file explorer.
Cursor Jump
2 years ago by Sangwon Jung
Front Matter Timestamps
2 years ago by LighthouseDino
Track note created and modified times in front matter, kept up to date automatically.
VirtFolder
2 years ago by mr.grogrig
Creating a hierarchical structure like Luhmann's Zettelkasten
Recent Files
6 years ago by Tony Grosinger
Display a list of most recently opened files
Dataview
6 years ago by Michael Brenan
A data index and query language over Markdown files, for https://obsidian.md/.
Force note view mode
5 years ago by Benny Wydooghe
Structured
5 years ago by dobrovolsky
Hierarchy
2 years ago by Kodai Nakamura
Featured Image
2 years ago by Johan Sanneblad
Obsidian plugin to automatically set a featured image property in your notes based on the first image, YouTube link, or Auto Card Link image found in your document. This allows you to create rich note galleries using Folder Notes and Dataview.
ExMemo Tools
2 years ago by Yan.Xie
Use large models for smart document management and optimization, including relocating files, enhancing text, and generating metadata.
Frontmatter Markdown Links
2 years ago by mnaoumov
Obsidian Plugin that adds support for markdown links in frontmatter
Hephaistos Importer
2 years ago by Skallaturi
Non-official plugin for importing characters from Hephaistos.online to Obsidian.md
Fold Properties By Default
2 years ago by Tommy Bergeron
Always have editor/metadata properties folded by default.
Paste Image Into Property
2 years ago by Nito
ASCII Tree Generator
2 years ago by Matěj Michálek
Note Favicon
a year ago by mdklab
Obsidian plugin – Show Favicon from Metadata
Title-Only Tab
a year ago by tristone13th
a plugin of obsidian for to change showing tab name to short
Note UID Generator
a year ago by Valentin Pelletier
Allow you to automatically generate UID for the notes in your vault.
Tree Diagram
a year ago by limpido
An Obsidian plugin that converts tab-indented text to a tree diagram.
Simple Banner
a year ago by Sandro Ducceschi
Visually enhance your Obsidian notes with a customizable banner. Supports icons and time/date display.
Tag Index
a year ago by wenlzhang
An Obsidian plugin that creates a curated list of important tags to serve as meaningful entry points to your knowledge base.
Current View
a year ago by Lucas Ostmann
Automatically set the view mode (Reading, Live Preview, Source) for notes in Obsidian using folder rules, file patterns, or frontmatter.
Frontmatter Metadata Link Classes
a year ago by Varvara Zmeeva / zmeeva.io
Enhanced internal links with automatic classnames based on frontmatter metadata.
Insert Arknights URL Banner
a year ago by Rerurate_514
Obsidianのプラグイン、img_dwnldr_wikigg_ak_ktに保存されている画像を選択してbannersプロパティに簡単に設定できるプラグイン
Template Folder
a year ago by LucasOe
Obsidian plugin to move notes to a folder when applying a template.
Publish Note to Mowen Note
a year ago by ziyou
This is a mowen plugin for Obsidian (https://obsidian.md)
Tag Group Manager
9 months ago by Stargazer-cc
Tag Group Manager is a plugin designed for Obsidian that helps manage tag groups and quickly insert tags.
Conditional Properties
8 months ago by Diego Eis
Automate frontmatter property updates in your Obsidian notes using simple conditional rules.
Connections
8 months ago by Eric Van Cleve
Frontmatter to HTML Attributes
6 months ago by Tarek Saier
Banners Reloaded
6 months ago by Dani García
Banners Reloaded offers a simple, fast, and lightweight way to add beautiful and customizable banners to your Obsidian notes. Designed for performance, it gives you powerful control over your vault's appearance through an intuitive interface. Set banners globally, by tag, or override them on any individual note.
Breadcrumbs
4 months ago by skepticmystic
Add typed-links to your Obsidian notes
Base Board
3 months ago by mderazon
Kanban Plugin For Obsidian
Life Tracker
3 months ago by Sébastien Dubois
Capture and visualize the data that matters in your life
Bases Toolbox
a month ago by Grub Basket
Adds Quality of Life features to Obsidian Bases
Property Panels
a month ago by Eva Chen
Display and edit Obsidian frontmatter properties in configurable panels that stay inside the note's scrollable content.
Note Types
a month ago by jsmorabito
Gantt this
a month ago by Altarok
Obsidian plugin showing multiple TTRPG calendars at once in one gantt chart.
Link Structure
a month ago by Dmitry Fert
Obsidian plugin that adds a Structure view for Bases, displaying notes as a hierarchical tree based on the up property. Supports drag-and-drop reorganization with automatic link updates, multi-select, and Templater integration.
MD Butler
a month ago by Peter Petschownik
Automatically manages YAML frontmatter fields for all notes. A reliable alternative to Templater formulas for consistent metadata.
PixNote
20 days ago by Sofia Milton