Vaultend — Scan, organize, and maintain your vault (with full undo)

Disclaimer

Is this project open source? Yes
Is this project completely free? Yes
Is this project vibe-coded beyond the author’s ability to comprehend how it works? No
Community Directory: https://community.obsidian.md/plugins/vaultend


My vault hit around 800 notes when I realized it was a mess. Tags were duplicated across two languages (#meeting-notes and #회의록 existed side by side), dozens of notes had no links or tags at all, and broken wikilinks were pointing to files I’d renamed months ago. I spent an evening trying to clean it up manually, gave up after 30 minutes, and started building a plugin instead.

That plugin became Vaultend — a maintenance tool that scans your vault for structural problems and helps organize notes. Core scanning (broken links, orphans, duplicates, empty notes) works offline with no AI, while the organizing features use your own API key — and nothing changes until you review and approve (auto-apply is available as an opt-in setting).

MIT License · Your API Key · No Subscription · Full Undo · No Telemetry · Ollama (Local)


What it finds — mostly offline

Run Maintenance scans your vault for structural issues. Most checks run locally with no API key:

  • Broken links — wikilinks pointing to notes that don’t exist (heading/block-aware)
  • Orphan notes — notes nothing links to (canvas-aware)
  • Empty notes — blank files cluttering your vault
  • Duplicate notes — similar content detected via TF-IDF (side-by-side comparison)
  • Untagged notes — notes without any tags

Two additional checks use AI when a provider is configured:

  • Missing tags — AI-suggested tags for notes that need them
  • Duplicate tags — cross-language similarity detection via embeddings

Results are sorted by severity (Critical → Warning → Info). You can filter by type, severity, or search by path. Every action — delete, archive, dismiss — is recorded with full undo.

Run Maintenance


Organizing a single note

Open any note, run Organize Current Note, and the plugin suggests tags and links based on the content. Everything opens in a modal where you can edit, remove, or add before applying. Nothing changes until you click Apply (auto-apply is available as an opt-in setting).

Tags are suggested using a hybrid approach — strongly matching existing vault tags are preferred, and new tags are only created when nothing fits. Links are validated against your actual vault, so you never get suggestions pointing to notes that don’t exist.

Organize Current Note


Organizing an entire folder

Pick a folder, and the plugin processes every note — showing progress, with a cancel button. Results open in a side panel where you review each note individually. Before batch-applying, a preview modal lets you toggle individual tags and links on or off per note.

Token usage and estimated cost are shown per note and as a total, so you always know what you’re spending.

Organize Folder


Merging duplicate tags

This one surprised me. My vault had #project-management, #ProjectManagement, and #프로젝트관리 — all meaning the same thing. Organize Tags finds these in two stages: first by string normalization (casing, hyphens, plurals), then by cross-language embedding similarity.

Each duplicate group shows the canonical tag, its variants, and how many notes are affected. You pick which tag to keep, and it replaces across every note. Fully reversible via Activity Log.

Organize Tags


Activity Log — undo anything

Every action the plugin takes is recorded: tag additions, link removals, deletions, archives, merges. Each entry has a Restore button that puts things back exactly as they were. I built this because any tool that changes your notes in bulk needs a reliable undo.

Activity Log


Privacy and control

You can set rules to control what data leaves your device:

  • Exclude folders — e.g., your journal or personal folder
  • Exclude tags — notes with specific tags are skipped
  • Exclude properties — notes with specific frontmatter keys
    (e.g., a private field) are skipped
  • Redaction patterns — regex patterns to strip sensitive content before sending

Rules run locally before any data is sent. The plugin itself sends no telemetry — all communication goes directly between your device and your configured provider.


Supported providers

  • OpenAI (GPT-4o, GPT-4o mini, etc.)
  • Google Gemini (Gemini 2.5 Flash, etc.)
  • Ollama — fully local, no API key needed
  • Custom endpoint — any OpenAI-compatible API

Vault Maintenance (broken links, orphans, duplicates, empty notes) works entirely offline with no provider configured.


Links

  • GitHub
  • User Guide (Wiki)
  • Community Directory

Feedback and bug reports welcome on GitHub Issues. Happy to answer questions here.

2 Likes

GitHub: GitHub - dhwang0803-glitch/Vaultend · GitHub
User Guide: Home · dhwang0803-glitch/Vaultend Wiki · GitHub
Vaultend: Vaultend - Obsidian Plugin

You had your private plugin account page. I fixed it to the public link.

1 Like

[1.0.20] - 2026-07-26

Added

  • What’s New modal: In-app update notification shown once after each version upgrade, with card-style changelog UI.
  • Content-aware organize hash: Internal .vaultend/organize-hashes.json tracks note body hashes for change detection.

Fixed

  • Maintenance cross-category sync: Deleting or archiving a note in one maintenance category now instantly disables it across all other categories (orphan, untagged, missing-tags, broken-link, duplicate, duplicate-tags). Undo restores it everywhere.
  • Organize Folder re-processing: Organized notes were permanently skipped due to processed frontmatter or link count. Now uses content hash — editing a note’s body after organizing makes it eligible for re-processing on the next run.
  • ESLint clean: Fixed 18 @typescript-eslint/no-unnecessary-type-assertion errors in new/modified files.

Removed

  • processed frontmatter property: No longer written or checked. Existing processed: true in notes is harmless dead metadata.

it seems interesting. I’ll try it.

2 Likes

Thanks for your interest!
If you have and questions or run into issues, feel free to open a Github issue - happy to help!

1 Like

[1.0.21] - 2026-07-26

Added

  • Tag language consistency: Classification prompt now enforces same-language tags — prevents cross-language duplicates (e.g. #뱀파이어 vs #vampire).
  • What’s New localization: Modal body content now displays in the user’s configured language (EN/KO).
  • Organize contextual messages: Shows “Already has sufficient tags/links” instead of generic “No related notes found” when content is already well-organized.

Fixed

  • GPT-5.x / o-series 400 error: Reasoning models now use json_schema response format, max_completion_tokens with 4x budget, and reasoning_effort: low (no temperature).
  • Reasoning model prefix matching: Extended from gpt-5. to gpt-5 to cover hyphenated model IDs (gpt-5-mini, gpt-5-nano).
  • skipLinkSuggestion false reason: When link suggestion is skipped (tags-only mode), noLinksReason is no longer incorrectly set to sufficient or no-similar.

sure, I’ll try and I’ll tell you if I’ll tray something, dont worry!

[1.0.22] - 2026-08-02

Fixed

  • Editor lag during note editing: Removed dead real-time search index serialization, vector store flush, and AI embedding sync that fired on every autosave without debounce — these systems had zero consumers after the Quick Ask feature was removed.