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

Maps of Content

mkshp-devmkshp-dev95 downloads

Dynamically generate Maps of Content (MOC) by extracting matching list items from notes in your vault.

Add to Obsidian
Maps of Content screenshot
Maps of Content screenshot
Maps of Content screenshot
Maps of Content screenshot
Maps of Content screenshot
  • Overview
  • Scorecard
  • Updates10

This plugin provides a dynamic way to extract elements (like lists, tasks, headings, paragraphs, or blockquotes) from your Markdown files that match a specific word filter, automatically generating Map of Content (MOC) indexes in your vault.

It accomplishes this by adding a new moc markdown code block processor.

How to use

In any of your notes, add a code block with the language set to moc and provide a YAML-based configuration.

Here is an example:

```moc
folder: Diary
element: List
filter: has_word("MOC")
recursive: true
```

Configuration Options

  • folder (required): The folder path within your vault to search for files. E.g., Diary or Notes/Meetings.
  • element (required): The type of element to extract. Can be set to List, Task, Heading, Paragraph, or Blockquote.
  • filter (required): The filter condition to apply to each element. Supported formats include:
    • has_word("word") or contains("text") or has_text("text"): Matches elements containing the exact text.
    • matches("regex"): Matches elements using a regular expression.
    • has_tag("#tag"): Matches elements containing the specified tag.
    • is_completed(): Matches only completed tasks (when element is Task).
    • is_incomplete(): Matches only incomplete tasks (when element is Task).
  • recursive (optional): A boolean (true or false) that determines whether the search should include subfolders within the specified folder. If omitted, it defaults to false.

Dynamic Parameters

You can dynamically include the current note's parameters in the folder and filter options using the following variables:

  • {{this.filename}}: Expands to the current note's name (without the .md extension).
  • {{this.folder}}: Expands to the name of the folder containing the current note.
  • {{this.path}}: Expands to the full path of the current note (without the .md extension).

For example, to list elements from the Diary folder that contain the current note's name:

```moc
folder: Diary
element: List
filter: has_word("{{this.filename}}")
recursive: true
```

Result

The plugin will scan all markdown files in the specified folder. For any files containing elements that match your filter, it will dynamically render a section.

The rendered output includes:

  1. A header with a link back to the source file where the elements were found.
  2. The matching elements themselves.

Note: The original moc code block is replaced in reading/preview mode with the dynamically generated content.

Support

If you find this plugin helpful, consider supporting its development!


HealthExcellent
ReviewPassed
About
Generate MOC indexes by extracting lists, tasks, headings, paragraphs, or blockquotes that match words, tags, regexes or task completion across a folder. Insert a moc code block to render linked source headers and the matching elements, replacing the block with the live index in preview.
OutliningSearchAutomation
Details
Current version
1.2.4
Last updated
3 days ago
Created
2 months ago
Updates
10 releases
Downloads
95
Compatible with
Obsidian 1.4.10+
Platforms
Desktop, Mobile
License
0BSD
Report bugRequest featureReport plugin
Sponsor
Buy Me a Coffee
GitHub Sponsors
Author
mkshp-devmkshp-dev
github.com/mkshp-dev
GitHubmkshp-dev
  1. Community
  2. Plugins
  3. Outlining
  4. Maps of Content

Related plugins

Templater

Create and use dynamic templates.

BRAT

Easily install a beta version of a plugin for testing.

Smart Connections

Find related notes and excerpts while writing. Your link building copilot displays relevant content in graph + list view. A local embedding model powers semantic search. Zero setup. No API key.

Homepage

Open a note, base, or workspace on startup, or set it for quick access later.

Outliner

Work with your lists like in Workflowy or Roam Research.

Omnisearch

Intelligent search for your notes, PDFs, and OCR for images.

Quick Switcher++

Enhanced Quick Switcher, search open panels, and symbols.

Lazy Loader

Load plugins with a delay on startup, so that you can get your app startup down into the sub-second loading time.

Readwise Official

Sync highlights from Readwise to your vault.

Update modified date

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