Skip to content

Conditions

Conditions let you filter which files a rule applies to. If no conditions are configured, the rule matches every file that triggers it.

Condition Types

File Name

Checks the name of the file (including its extension).

Example: File name contains meeting — matches 2024-01-15 meeting notes.md

File Path

Checks the full vault-relative path of the file.

Example: File path starts with Projects/Active — matches any file in that subtree

Property

Checks the value of a frontmatter property in the file.

You specify the property name (e.g. status) and the operator is applied to its value.

Example: Property status contains draft — matches files where status: draft (or status: draft review)

The property condition reads frontmatter from Obsidian's metadata cache. If the file has no frontmatter or the property is absent, the condition evaluates to false (except for the exists operator).

Operators

All condition types use the same set of string operators:

OperatorDescription
existsTrue if the value is present (non-empty). No extra input needed.
containsTrue if the value includes the given string
starts withTrue if the value begins with the given string
ends withTrue if the value ends with the given string
matches regexTrue if the value matches the given regular expression

Operators are case-sensitive. For case-insensitive matching, use the matches regex operator with the (?i) flag (e.g. (?i)meeting).

Condition Groups

Conditions are organised into a root group that determines how they are combined:

Group typeBehaviour
AllEvery condition in the group must be true (logical AND)
AnyAt least one condition must be true (logical OR)
NoneNo condition in the group must be true (logical NOT/NOR)

You can nest groups inside each other for complex logic.

Example: A rule that should match files named journal that are NOT tagged archived:

All
├── File name  contains  "journal"
└── None
    └── Property "tags"  contains  "archived"

Released under the MIT License.