No description
Find a file
larsbuecker ba1c6d0e77 1.0.5
2026-06-04 18:36:47 +02:00
.github/workflows chore: update release workflow to include permissions and attest release assets 2026-05-29 08:21:22 +02:00
.husky chore: Replace deprecated dev deps with native and lighter alternatives 2026-05-28 22:33:27 +02:00
docs fix: Fix canvas tag rules by aggregating metadata from canvas cards 2026-06-04 09:26:22 +02:00
scripts fix: breaking changelog in update modal; docs use Attachments section 2026-05-22 22:32:37 +02:00
src fix: ensure plugin settings are saved after validation and repair 2026-06-04 18:32:54 +02:00
.editorconfig Initial Commit 2025-01-02 17:19:37 +01:00
.eslintignore Initial Commit 2025-01-02 17:19:37 +01:00
.eslintrc Add pre-commit hooks with formatting, linting, type checking and tests 2025-09-26 12:29:37 +02:00
.gitignore chore: added new detailed documentation 2026-04-19 13:45:06 +02:00
.npmrc Initial Commit 2025-01-02 17:19:37 +01:00
.prettierignore Add pre-commit hooks with formatting, linting, type checking and tests 2025-09-26 12:29:37 +02:00
.prettierrc Add pre-commit hooks with formatting, linting, type checking and tests 2025-09-26 12:29:37 +02:00
CHANGELOG.md chore: update changelog 2026-06-04 18:34:47 +02:00
CONTRIBUTING.md chore: added new detailed documentation 2026-04-19 13:45:06 +02:00
esbuild.config.mjs chore: Replace deprecated dev deps with native and lighter alternatives 2026-05-28 22:33:27 +02:00
LICENSE Create LICENSE 2025-01-02 17:50:10 +01:00
main.ts refactor: update settings declaration in AdvancedNoteMoverPlugin and upgrade vitest version in package files 2026-06-04 09:31:33 +02:00
manifest.json 1.0.5 2026-06-04 18:36:47 +02:00
package-lock.json 1.0.5 2026-06-04 18:36:47 +02:00
package.json 1.0.5 2026-06-04 18:36:47 +02:00
README.md fix: Fix canvas tag rules by aggregating metadata from canvas cards 2026-06-04 09:26:22 +02:00
styles.css fix: CSS lint cleanup and modal layout regressions 2026-05-28 23:47:30 +02:00
tsconfig.json chore: restructured into new modular architecture 2026-04-19 12:52:47 +02:00
version-bump.mjs Add pre-commit hooks with formatting, linting, type checking and tests 2025-09-26 12:29:37 +02:00
versions.json 1.0.5 2026-06-04 18:36:47 +02:00
vitest.config.mjs chore: added new detailed documentation 2026-04-19 13:45:06 +02:00

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:

Criteria Examples
Tag #project/active, any tag containing work
Frontmatter property status = done, priority > 2, client = Acme
File name ends with meeting.md, matches regex
Parent folder starts with Inbox
Created / modified date modified today, created before 2025, modified on a Monday
Wiki links note links to a specific MOC
Embeds note embeds a specific file
Headings any heading contains Summary
File extension canvas, 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:

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

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 started Setup walkthrough, recommended workflow, safety tips
Rules and triggers Rule structure, evaluation order, aggregation, and metadata
Criteria and operators Every trigger type and operator, with examples
Destination templates {{tag.…}} and {{property.…}} syntax and resolution
Blacklist filters Filter line syntax and all supported filter types
Commands and automation All commands, on-edit/periodic triggers, preview, caching

Contributing

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

Script Purpose
npm run dev Development build (esbuild, watch mode)
npm run build Typecheck + production bundle
npm run test Run test suite (Vitest)
npm run lint ESLint
npm run format Prettier

License

MIT — see LICENSE.