Pat63 downloadsSafely preview and apply native frontmatter property operations across Markdown notes.
Native Property Operator is an Obsidian plugin for safely previewing and applying YAML frontmatter property operations across Markdown notes.
This plugin modifies YAML frontmatter in Markdown notes. Back up the vault and use preview before applying actions to folders, root targets, or existing-note synchronization.
The plugin only targets visible Markdown notes. It ignores the Obsidian configuration folder, hidden/dot folders, configured excluded folders, attachments, and non-Markdown files.
/ means the full visible vault.publish resolves to a unique Publish folder, nested casing is preserved, and case-equivalent targets are deduplicated.The catalog stores property names and their intended native Obsidian property type. Catalog changes use draft editing: change the name or type, then choose Apply changes... to preview affected notes before writing frontmatter. Revert restores the saved catalog values in the editor. Delete from catalog removes the catalog entry only and does not change notes.
Add existing property opens a full browser. A blank search shows every eligible uncataloged property in case-insensitive alphabetical order; the result area scrolls independently and supports Arrow, Page, Home, End, Enter, and Escape keys. Inline action-field suggestions remain compact.
Every browser result is a separate readable row with property name, detected type, file count, and representative examples. Property catalog cards and saved action cards have a dedicated grip-vertical handle. Dragging starts only from that handle; keyboard users can focus the handle and use Alt/Option + Arrow Up or Arrow Down. The saved arrays retain their current order during migration, adding a property appends it, deleting removes only that entry, and renaming keeps the same position. Reordering does not apply actions, rename properties, scan notes, or modify frontmatter.
When changing a catalog property name, destination conflicts are skipped by default. If overwrite is enabled, existing destination values may be replaced after confirmation. Type-only catalog changes update the catalog unless value normalization is explicitly enabled.
Saved manual actions can target the current file, the current folder tree, or multiple specific files and folders. A folder always includes every eligible Markdown note below it at every depth. The root target / includes all visible eligible Markdown notes in the vault. Manual actions support:
Each saved action uses a typed operations array. Add and set rows contain an exact known property name and value; their current configured/detected type is read-only and drives the value editor. Remove rows contain names; rename rows contain old/new names; and type rows contain a source property plus an explicitly editable target type and conservative conversion options. Legacy scalar action fields are migrated to one row automatically. Every operation row has a stable ID and can be reordered with its grip-vertical handle or Alt/Option + Arrow Up/Down; the complete property reference, type, value, conversion options, and unknown fields move together.
Selecting an existing property in an action binds the row to its exact canonical name and detected/configured type. Typing the exact name resolves identically to choosing a suggestion. The selected name and current type are shown as a read-only reference; Change property is required to choose another property. Add-property rows never expose an editable Type selector and cannot invent unknown property types; configure an unknown property on the Properties tab first. Rename locks its source, and Change type keeps only its target type editable. Legacy name-only references are matched by exact configured name first, then exact detected name; unresolved or type-incompatible references require review before Save, Preview, Apply, or automatic execution.
Manual action cards and automatic action cards can be reordered independently. Their stable action IDs, targets, enabled state, trigger, result summaries, and unrelated configuration fields remain unchanged. A valid drop or keyboard move saves immediately; a persistence failure restores the previous order and reports the failure.
Saved action cards use separate header, summary, and footer sections. Summaries keep the target, operation, result state, and counts readable while clamping to four rendered lines; the complete summary remains available through the native tooltip. Preview, Apply, Edit, Delete, and Sync existing notes stay together in a bottom-right footer that wraps as a group only when the available width requires it.
The manual and automatic action editors share ordered target rows and property-operation cards. Every target and operation remains individually removable. Property-specific fields stay inside the card, operation-specific add controls follow the full card list, and action-level overwrite or add-if-missing settings remain outside the cards. Operation and Type controls align left. Compact property, folder, and file suggestions align to the input's left edge and use a neutral theme-native popup surface. Candidate names and complete property metadata wrap in content-sized rows, while long result lists scroll independently with mouse, trackpad, touch, and keyboard navigation. Property suggestions omit exact-case source names already selected in another row of the same action while retaining the focused row's own value. Card and target rerenders preserve the modal scroll position; newly added cards are revealed and focused without intentionally scrolling back to the top.
Remove actions inspect current frontmatter and match exact property keys. Removing title does not remove Title or similarly named keys. All configured operations for one note run inside one processFrontMatter callback, preserving unrelated frontmatter.
Before applying a manual action, the plugin shows a preview with changed and skipped notes. Applying multiple files asks for confirmation. If overwrite is enabled and overwrite confirmation is on, the plugin asks for an additional confirmation.
Auto actions run only when a matching Markdown note is created or moved into a configured folder tree or exact file target. They do not run on ordinary note modification.
Automatic actions use the same ordered file/folder target schema as manual actions. There is no direct-child mode or recursive toggle: selecting a folder always selects its complete descendant tree, and / matches the complete visible vault.
When enabling an auto action for the first time, the plugin can preview synchronization for existing matching notes before enabling future automation. You can also run Sync existing notes from the auto action list.
Expected conflicts are skipped, not treated as failures. Examples include missing source properties, existing destination properties when overwrite is disabled, and values that cannot be safely converted. Rename destination duplicates and cycles are rejected before Apply. Automatic actions never overwrite existing values: conflicts are explicitly reported as skipped because automatic runs have no confirmation step. Manual type changes require explicit confirmation before synchronizing a native type while incompatible values remain. Automatic type changes preserve incompatible values and skip that row's native type/catalog synchronization. Results keep file-level and operation-level changed, skipped, incompatible, and failed counts separate; one invalid row does not prevent other rows for the same file from applying.
Download the release assets from GitHub and place them in your vault under .obsidian/plugins/native-property-operator/:
main.jsmanifest.jsonstyles.cssThen enable the plugin in Obsidian settings.
Install dependencies and build:
npm ci
npm test
npm run lint
npm run check
npm run build
The production build writes main.js.
Targets:
/, another folder, and one file, confirming all selected targets remain visible./ and confirm eligible nested notes at every depth are included.Properties:
heroImage, pubDate, status, and title as four visible cards.Inline suggestions:
Scroll:
Removal:
title, status, and an unrelated property; preview and confirm one changed file and two changed operations for removal of title and status.Add existing property:
Canonical folders and locked properties:
Publish folder, enter publish and Publish in target pickers and confirm each resolves to one displayed/stored Publish target. Repeat with Publish/essays and confirm nested casing is preserved. If no such folder exists, do not create or rename one for this check.Property and action ordering:
Add existing property browser:
Overlap audit:
Automatic actions:
Responsive layout:
MIT License. See LICENSE.