Auto-Properties

approved

by Aaron Gillespie

Create automated properties based on note content and rules. - This plugin has not been manually reviewed by Obsidian staff.

β˜… 39 stars↓ 8,648 downloadsUpdated 20d agoMIT

Auto-Properties

An Obsidian plugin that automatically fills note frontmatter properties using configurable rules. Pairs well with Bases, Templates, and Dataview.

See the wiki for examples and full documentation.


πŸ‘‰ DEMO VIDEO

How it works

You define rules in the plugin settings. Each rule watches note content and writes a value to a frontmatter property when its trigger fires. Note bodies are never modified β€” only frontmatter properties are written.

Example Rules Screenshot

Example Uses

  • Find in-work tasks
  • Pull highlighted material
  • Extract a TL;DR block
  • Add the first image embed
  • Do word counts or reading time
  • Auto-add file create / update dates
  • ...and whatever else you can think of

Rule types

Lines

Pulls lines that match a pattern. Match modes: Starting with, Ending with, Containing, Regex.

Options: pull first / all / count of matching lines, omit the search string from the result, ignore indentation, pull the next line instead of the matched one, case sensitive.

Between

Pulls content found between two delimiter strings (e.g. ==highlighted==, [[, ![[).

Options: separate start and end delimiters, retain delimiters in result, multiline matching, pull first / all / count of matches, case sensitive.

Headings

Pulls content from under a heading, targeted by level (1–6) or heading text.

Options: heading text only or full section content, include the heading line itself, include subheadings.

Callouts

Pulls content from callouts, optionally filtered by callout type.

Options: extract header, body, or both; include type label.

File

Pulls file metadata: name, full path, folder, extension, created date, modified date, or file size.


Triggers (per rule)

Each rule independently controls when it runs:

TriggerWhen
ModifyShortly after the note content changes
OpenOnce when the note is first opened
FocusWhen you navigate away from the note

Rules with no triggers enabled are effectively manual-only β€” run them via the command palette (Auto-Properties: Update Auto-Properties).


Behaviors

OptionEffect
EnabledToggle a rule on/off without deleting it
Auto-addCreates the property in frontmatter if it doesn't exist yet
No overwriteSkips the rule if the property already has a non-empty value

Output & Filters

These apply to the pulled value before it's written:

OptionEffect
PullFirst match, all matches (as a list), or count of matches
Strip markdownRemoves markdown formatting from the result
Trim whitespaceStrips leading/trailing whitespace
Extract regexReplaces the result with the first regex match, or the first capture group if present
Value formatTemplate string wrapping the result, e.g. https://example.com/${result}

Available format variables: ${result}, ${filename}, ${folder}, ${path}, ${created}, ${modified}.


Scope (per rule)

Each rule can be limited to run only in certain folders, or skipped in others:

  • Run in folders β€” only process notes whose path starts with one of these
  • Ignore folders β€” skip notes whose path starts with one of these

Ignore wins if both match. Leave both empty to run on all notes.


Import / Export

Rules can be exported as JSON to your clipboard and imported back (append to existing or replace all). This makes sharing rule sets or moving between vaults easy.

Example rules

Rules in Use

[
  {
    "key": "overview",
    "autoadd": true,
    "strip_markdown": true,
    "type": "callouts",
    "callout_type": "tldr"
  },
  {
    "key": "modified",
    "autoadd": true,
    "trigger": [
      "focus_change"
    ],
    "type": "file",
    "file_pull": "modified"
  },
  {
    "key": "task_count",
    "autoadd": true,
    "value": "- [ ]",
    "pull": "count",
    "ignore_indentation": true
  },
  {
    "key": "highlights",
    "autoadd": true,
    "type": "between",
    "pull": "all",
    "start": "=="
  },
  {
    "key": "img",
    "autoadd": true,
    "value": "![["
  }
]

Design principles

  • Note bodies are never changed. Only frontmatter properties are written.
  • Everything optional except the property key. Sane defaults cover all omitted fields.
  • No dependencies. Zero npm dependencies beyond the Obsidian API.

Installation

Listed in the Obsidian Community directory!

Or install via BRAT:

  1. Install & enable BRAT
  2. In BRAT settings, click Add Plugin
  3. Paste this repo's URL
  4. Done

NOTE FOR EARLY ADOPTERS OF THE PLUG-IN V1.0 ERA

Rules created in the earlier V1.0 will unfortunately be erased in the update to V2.0. You'll need to re-create your rules one time. Sorry for the annoying task. Shouldn't happen again.

This was a huge re-write and the rule parsing logic is much cleaner now. I don't expect to ever need to invalidate the current rule parsing enginge (this one is much more forward-thinking)!

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.