Add metadata to individual blocks in Obsidian
Extend block references with inline key-value properties
Any paragraph with a block ID. ^my-block [status: draft, priority: high]That's it. Properties appear after the block ID in [key: value] format.
Obsidian's properties exist only at the note level. But knowledge isn't atomic—notes contain structure, and that structure carries meaning:
- Documentation: Some sections are stable, others deprecated, others experimental
- Long-form writing: Different passages have different states, POVs, timelines
- Research: Claims from different sources have different confidence levels
There's no native way to attach metadata below the note level without fragmenting content into separate files.
Block Properties extends Obsidian's block reference syntax to support inline metadata:
This section is stable. ^api-docs [status: stable, version: 2.0]
This needs review. ^draft-section [status: draft, reviewer: pending]- Inline Syntax — Natural extension of existing
^block-idsyntax - Display Modes — Inline (dimmed text) or Badge (compact count)
- Hover Tooltips — See all properties at a glance
- Reading View — Properties visible in both edit and reading mode
- Query Command — Find blocks by property across your vault
- Sidebar View — All block properties in the current note
- Inline Editing — Click any value to edit directly
- Quick Navigation — Click block IDs to jump to location
- Property Summary — See which keys are used and how often
- Note Links — Reference notes with
[[Note]]syntax - Block References — Link blocks with
^block-idsyntax - Click Navigation — Navigate links from panel or editor
- Backlink Tracking — See which blocks reference each other
- Auto CSS Classes — Every property generates
bp-{key}-{value} - Styling Target — Apply to property text or entire line
- Preset Styles — Built-in styles for common patterns
- Custom Rules — Define your own key-value → class mappings
- Vault-Wide Changes — Update properties across all files at once
- Preview First — See exactly which blocks will be affected
- Value Filtering — Target specific values or match any
- Visualize Relationships — See block connections as interactive graph
- Auto Edge Detection — Links like
blocked-by: ^task-2become edges - Status Coloring — Nodes colored by status property
- Click Navigation — Double-click to jump to any block
Visualize block-level relationships in a dedicated graph view.
- Open Command Palette (
Cmd/Ctrl + P) - Search for "Block Properties: Open block graph"
- The graph opens in a new tab
The graph scans your vault for blocks that reference other blocks:
^task-1 [status: todo, blocked-by: ^task-2]
^task-2 [status: in-progress, depends-on: ^setup]
^setup [status: done]This creates:
- Nodes:
^task-1,^task-2,^setup - Edges: task-1 → task-2 (blocked-by), task-2 → setup (depends-on)
| Feature | Description |
|---|---|
| Interactive | Drag nodes, zoom, pan |
| Navigation | Double-click to jump to block |
| Tooltips | Hover to see all properties |
| Status Colors | done=green, blocked=red, in-progress=blue |
| Refresh | Click ↻ to rebuild graph |
| Themes | Adapts to light/dark mode |
Property values can contain links to notes and blocks.
Note links:
^task-1 [docs: [[Project Documentation]]]
Block references:
^subtask [blocked-by: ^parent-task]
Mixed:
^feature [spec: [[Design Doc]], depends: ^api-refactor]| Location | Action |
|---|---|
| Property Panel | Click any link to navigate |
| Editor | Cmd/Ctrl + Click on link |
The Property Panel shows a "Referenced by" section:
^parent-task [status: in-progress]
Referenced by:
→ subtask-1 (blocked-by)
→ subtask-2 (depends-on)
Blocks automatically receive CSS classes based on property values.
Every property generates a class bp-{key}-{value}:
^task-1 [status: done, priority: high]
→ Classes: bp-status-done, bp-priority-high| Target | Effect |
|---|---|
| Property | Only [...] text is styled |
| Line | Entire line/paragraph is styled |
| Property | Effect |
|---|---|
status: done |
Strikethrough, reduced opacity |
status: blocked |
Red left border |
status: in-progress |
Blue background tint |
priority: high |
Red text/background |
priority: low |
Reduced opacity |
type: deprecated |
Strikethrough, red, faded |
type: experimental |
Italic, purple tint |
status: draft |
Yellow background tint |
Define rules in Settings → add CSS in your snippets:
.my-review-style {
background: rgba(255, 200, 0, 0.2);
border-left: 3px solid orange;
}- Block Overview — All blocks with properties at a glance
- Context Preview — Text before each block ID
- Quick Navigation — Click block ID to jump
- Inline Editing — Click value to modify with suggestions
- Add/Delete — Manage properties directly
- Summary — Statistics on property usage
- Backlinks — Incoming references (when enabled)
- Click any property value
- Dropdown appears with suggestions
- Enter to save, Escape to cancel
Change property values across your entire vault.
- Command Palette → "Bulk edit properties"
- Select property key
- Optionally filter by current value
- Enter new value
- Preview → Apply
Property key: status
Current value: draft
New value: review
Preview: 15 blocks will be updated
├── notes/project.md → ^task-1
│ status: draft → review
└── ...
Define reusable property sets in Settings:
Template: "task"
Properties: status: todo, priority: medium, assignee: (empty)
Via Command: "Insert property template" opens picker
Via Autocomplete: Type preset: task → auto-expands to full template
^block-id [key: value]
^block-id [key1: value1, key2: value2]^block-id [ref: [[Note Name]]]
^block-id [depends: ^other-block]
^block-id [docs: [[Folder/Note]], blocked-by: ^task-1]^id[key:value] ✓ Works
^id [key: value] ✓ Works
^id [ key : value ] ✓ Works^id [message: Hello, World] ✗ Comma splits properties
^id [url: https://example.com] ✓ Colons in values OK| Command | Description |
|---|---|
| Insert block property | Add block property at cursor |
| Insert property template | Choose from saved templates |
| Query block properties | Search by property key/value |
| Open property panel | Show sidebar panel |
| Bulk edit properties | Change values across vault |
| Open block graph | Visualize block relationships |
| Setting | Description |
|---|---|
| Display Mode | Inline or Badge |
| Property Color | Color for property text |
| Opacity | Transparency (0.1–1.0) |
| Enable linked properties | Allow [[Note]] and ^block in values |
| Show backlinks | Display "Referenced by" section |
| Enable conditional styling | Add CSS classes from properties |
| Styling target | Property only or entire line |
| Use preset styles | Built-in visual styles |
| Custom rules | Key-value → class mappings |
| Auto-expand presets | Expand preset: name automatically |
| Templates | Manage property templates |
- Download latest release from GitHub Releases
- Extract to
.obsidian/plugins/block-properties/ - Enable in Settings → Community plugins
- Install BRAT plugin
- Add
Querulantenkind/obsidian-block-properties-plugin - Enable Block Properties
git clone https://github.com/Querulantenkind/obsidian-block-properties-plugin.git
cd obsidian-block-properties-plugin
npm install
npm run build^setup-db [status: done, type: infrastructure]
^implement-api [status: in-progress, depends-on: ^setup-db]
^write-tests [status: blocked, blocked-by: ^implement-api]^auth-api [status: stable, version: 2.0]
^legacy-endpoint [status: deprecated, removed-in: v3.0]^hypothesis-a [status: testing]
^experiment-1 [supports: ^hypothesis-a, methodology: [[Methods]]]
^experiment-2 [contradicts: ^hypothesis-a]^scene-1 [draft: 2, pov: narrator, timeline: present]
^flashback [draft: 1, pov: maria, continues: ^scene-1]How is this different from YAML frontmatter? Frontmatter applies to entire notes. Block Properties apply to individual paragraphs or sections.
Does it work with Dataview? Not yet. Dataview integration is planned. Use the built-in Query command for now.
Will this break existing block references?
No. Standard ^block-id syntax works as before. Properties are additive.
Can I link to blocks in other files? Yes. Block references search across your entire vault.
- No nested properties (values are plain strings)
- Properties must be on same line as block ID
- Commas in values not supported (splits properties)
- Backlinks are plugin-only (not in Obsidian's native backlinks)
- Dataview integration
- Property inheritance
- Typed properties (date picker, validation)
- Graph filtering by property
- Export/import
- Block Graph View (v1.0.5)
- Bulk Editing (v1.0.4)
- Conditional Styling (v1.0.3)
- Linked Properties (v1.0.2)
- Interactive graph view for block relationships
- Automatic edge detection from block references
- Status-based node coloring
- Double-click navigation
- Theme support
- Vault-wide property changes
- Preview before applying
- File-grouped updates
- Auto CSS classes (
bp-{key}-{value}) - Preset styles for common patterns
- Custom style rules
- Note links in values (
[[Note]]) - Block references (
^block-id) - Backlink tracking
- Click navigation
- Property templates
- Inline editing in panel
- Block property syntax
- Display modes
- Property panel
- Query command
- Autocomplete
Contributions welcome! Please open an issue first to discuss major changes.





