Advanced Note Mover

approved

by Lars Bücker

Quickly and easily move notes to a predefined folder. Perfect for organizing your notes.

35 stars8,444 downloadsUpdated 12d agoMIT

Advanced Note Mover

Automatically move notes into the right folders — based on tags, frontmatter properties, filenames, dates, links, and more. Set your rules once, and let the plugin keep your vault organized.

Requires Obsidian 1.5.0 or newer. Works on desktop and mobile.


Why Advanced Note Mover?

Most Obsidian users hit the same wall: notes pile up in the inbox. Manually dragging them to the right folder every time is tedious and easy to skip. Advanced Note Mover lets you describe where each type of note belongs using rules — then moves them for you, automatically or on demand.

  • A note tagged #project/active? → Projects/Active/
  • A note with a client property set to Acme? → Clients/Acme/Notes/
  • Anything in Templates/? → never touched, protected by a blacklist filter

Rules are evaluated in order. The first one that matches wins. Everything else stays put.


Quick start

1. Protect what should never move

Open Settings → Community plugins → Advanced Note Mover → Filter and add a line:

path: Templates

This blocks any note under your Templates/ folder from ever being moved.

2. Create your first rule

Go to RulesAdd rule. Give it a name, then:

  • Set a trigger: e.g. tagincludes item#inbox
  • Set a destination folder: e.g. Inbox
  • Make sure the rule is toggled active

3. Test it before committing

Open a matching note and run Preview active note movement from the command palette. This shows exactly where the note would go — without moving anything.

4. Move a single note

Run Move active note to note folder from the command palette (or click the ribbon icon). A notification appears with an Undo link if you want to reverse it.

5. Move everything

Run Preview bulk movement for all files first to review what would happen across your whole vault, then Move all files in vault to execute.


Features

Rule-based routing

Each rule has a name, a destination folder, and one or more trigger conditions. Rules are checked in order — the first active rule whose conditions match wins.

Conditions can be combined with:

  • All — every condition must match
  • Any — at least one must match
  • None — every condition must be false (useful for exclusion)

Full rule reference →

Rich trigger criteria

Match notes on almost any piece of metadata:

CriteriaExamples
Tag#project/active, any tag containing work
Frontmatter propertystatus = done, priority > 2, client = Acme
File nameends with meeting.md, matches regex
Parent folderstarts with Inbox
Created / modified datemodified today, created before 2025, modified on a Monday
Wiki linksnote links to a specific MOC
Embedsnote embeds a specific file
Headingsany heading contains Summary
File extensioncanvas, md, base

Full criteria and operator reference →

Dynamic destination templates

Instead of a static folder path, use {{tag.…}} and {{property.…}} placeholders to build the destination from the note's own metadata. Date properties also support components such as Archive/{{property.created.year}}:

Clients/{{property.client}}/Notes
Projects/{{property.year}}/{{tag.project}}
Archive/{{property.created.year}}/{{property.created.month}}

The placeholder resolves at move time — if the note has client: Acme in its frontmatter, it goes to Clients/Acme/Notes. If the value is missing, the note is not moved.

Template syntax reference →

Blacklist filters

Filters run before any rules. If a note matches any filter, it is excluded from all moves — manual, bulk, and automatic.

path: Templates          ← block anything under Templates/
tag: #never-move         ← block notes with this tag
fileName: Daily*.md      ← block files matching a glob pattern
property: status:draft   ← block drafts
content: DO NOT MOVE     ← block notes containing this text

Filter syntax reference →

Preview before you move

Every move command has a Preview counterpart. Preview shows you a list of files and their planned destinations — without touching anything. Use it to validate rules before a bulk move.

Move history and undo

Every move is recorded in history. For single-file moves, an Undo link appears in the notification. For bulk moves, open Show history from the command palette to review and undo past batches.

Automation

Set notes to move themselves:

  • On edit: whenever you save a note (with a 2-second debounce), it is evaluated and moved if a rule matches
  • Periodic: run a full-vault pass on a schedule (configurable interval in minutes)

Both options are off by default — enable them in Settings → Triggers.

Attachment co-move

When a note moves, its referenced attachments (images, PDFs, etc.) can move with it. The plugin preserves relative paths — so if your images live in an _assets/ folder next to your note, they'll appear in an _assets/ folder beside the note's new location. Optionally, empty source attachment folders are cleaned up after the move.

Enable in Settings → Attachments → Move attachments with note.

Canvas and Base support

.canvas and .base files are treated as movable alongside Markdown notes. Active-file commands and bulk/periodic passes include them. For canvas files, tag/property/link rules also consider cards inside the canvas (text you create on the board and notes you embed as file cards). For base files, use fileName, folder, or extension rules.

Import / export

Export your entire settings as JSON to back them up or share them with another vault. Import settings to restore or transfer a configuration.


Documentation

Getting startedSetup walkthrough, recommended workflow, safety tips
Rules and triggersRule structure, evaluation order, aggregation, and metadata
Criteria and operatorsEvery trigger type and operator, with examples
Destination templates{{tag.…}} and {{property.…}} syntax and resolution
Blacklist filtersFilter line syntax and all supported filter types
Commands and automationAll commands, on-edit/periodic triggers, preview, caching

Contributing

Contributions are welcome. See CONTRIBUTING.md for development setup, branch workflow, and review expectations.

ScriptPurpose
npm run devDevelopment build (esbuild, watch mode)
npm run buildTypecheck + production bundle
npm run testRun test suite (Vitest)
npm run lintESLint
npm run formatPrettier

License

MIT — see LICENSE.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.