Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Propsec

ccmdiccmdi3k downloads

Schema enforcement for frontmatter.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates12

Schema enforcement for Obsidian properties.

Define schemas based on templates or invariants in your vault, add custom reusable types, and more.

Usage

First, define a schema:

Once saved, violating notes such as this one...

...will be caught by the validation:

Why

Obsidian properties are freeform. Over time, things can break: you change the structure, use an old field, etc. This plugin validates notes against schemas you define. Your notes are untouched, but your vault's consistency becomes easier to manage.

Setup

  1. Open plugin settings
  2. Create a schema: click + Add Schema
  3. Write a rule for which notes it applies to, e.g. file.inFolder("Books")
  4. Add fields: name, type, required/optional, and optional rules
  5. Violations appear in the status bar/sidebar

Rules

Everything that picks or checks something is a rule, written in a small expression language. Press Ctrl+Space in a rule box for helpers like "at most N characters" or "in folder". This will insert the rule for you.

Where Example Meaning
Schema: applies to file.inFolder("Books") || file.hasTag("book") Notes in Books, or tagged #book
Field: value must size(it) >= 1 && size(it) <= 5 Between 1 and 5 items
Field: value must it.exists(t, t.matches("^genre/")) Has a tag starting with genre/
Field: value must it >= started On or after the started property
Field: applies when status == "finished" Only check this field for finished notes
Settings: excluded notes file.hasTag("archived") No schema checks archived notes

A rule reads properties by name (rating, or note["date created"] when the name has spaces), the field's own value as it, and the file through file: file.path, file.name, file.folder, file.tags, file.mtime, file.ctime, file.inFolder(...), file.hasTag(...).

The syntax follows CEL, adjusted for frontmatter.

Field types

Primitives

string, number, boolean, date, array, object, null, unknown

Custom types

Define reusable types in settings. A custom type is a named group of fields. Use them when multiple schemas share the same structure or you need nested validation.

Union types

Add multiple field entries with the same name but different types. For example, two entries for status with types string and null creates string | null.

Field flags

Fields can be flagged to be required (key is required) xor warn (soft requirement). There is also a unique flag that prevents duplicate values on that field across notes.

HealthExcellent
ReviewSatisfactory
About
Validate frontmatter and file properties against user-defined schemas to catch structural errors without modifying notes. Create schemas targeted by path, tags or property filters; add custom reusable types, union types, required/warn/unique flags and cross-field constraints; view violations in the status bar or sidebar.
PropertiesDataStatus bar
Details
Current version
0.8.1
Last updated
3 weeks ago
Created
11 months ago
Updates
12 releases
Downloads
3k
Compatible with
Obsidian 1.7.2+
Platforms
Desktop, Mobile
License
0BSD
Report bugRequest featureReport plugin
Sponsor
GitHub Sponsors
Author
ccmdiccmdi
github.com/ccmdi
GitHubccmdi
  1. Community
  2. Plugins
  3. Properties
  4. Propsec

Related plugins

Time Things

Show a clock in the corner. Track the total editing time of a note and the last time it was modified.

Advanced Canvas

Supercharge your canvas experience. Create presentations, flowcharts and more.

Meta Bind

Make your notes interactive with inline input fields, metadata displays, and buttons.

Force note view mode

Force the view mode for a note by using frontmatter: YAML block with 'obsidian_ui_mode' as key.

Update modified date

Automatically update a frontmatter modified date field when the file is modified.

Meld Encrypt

Hide secrets in your notes.

MetaEdit

Manage your metadata.

Tracker

Track occurrences and numbers in your notes.

Featured Image

Automatically set a featured image property in your notes based on the first image.

CSV Table

Render CSV data as a table within your notes.