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
  • Join the community
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Metadata Extractor

kometenstaubkometenstaub25k downloads

Metadata export (on a schedule) for integration with third-party apps like launchers or graph analysis software.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates37

This plugin allows you to write Obsidian vault metadata, which is only accessible via plugin, onto the hard drive. This enables Third-party apps to access Obsidian metadata which they normally wouldn't be able to access. Exemplary use cases are launcher apps (e.g. Alfred, Ulauncher) or graph analysis software.

See this guide for more information on Controlling Obsidian via a Third-party App.

There are four JSON-exports

They can be executed on a schedule.

Tag export

One writes a JSON file to disk with each tag and its corresponding file paths.

Example:

[
    {
        "tag": "css-themes",
        "tagCount": 5,
        "relativePaths": ["Advanced topics/Contributing to Obsidian.md"]
    },
    {
        "tag": "insider-build",
        "tagCount": 3,
        "relativePaths": ["Advanced topics/Insider builds.md"]
    },
    {
        "tag": "anothertag",
        "tagCount": 2,
        "relativePaths": [
            "Plugins/Zettelkasten prefixer.md",
            "Advanced topics/Using obsidian URI.md"
        ]
    }
]

TypeScript interface:

/**
 * JSON export: tagToFile[]
 */
interface tagToFile {
    tag: string;
    tagCount: number;
    relativePaths: string[] | string;
};

Markdown notes metadata export

The second one writes a JSON file to disk with metadata for each file name. This is how the JSON structure is as a TypeScript interface.

/**
 * JSON export: Metadata[]
 */
import {extendedFrontMatterCache} from "./interfaces";

interface Metadata {
    fileName: string;
    relativePath: string;
    tags?: string[];
    headings?: { heading: string; level: number }[];
    aliases?: string[];
    links?: links[];
    backlinks?: backlinks[];
    frontmatter?: extendedFrontMatterCache;
}

interface links {
    link: string;
    relativePath?: string;
    cleanLink?: string;
    displayText?: string;
}

interface backlinks {
    fileName: string;
    link: string;
    relativePath: string;
    cleanLink?: string;
    displayText?: string;
}

interface extendedFrontMatterCache {
    cssclass?: string;
    publish?: boolean;
    position: Pos; // Pos is from the Obsidian API
    [key: string]: any;
}

The exported array contains a JSON array with Metadata objects, one object for each Markdown file in your vault.

All objects have a fileName and a relativePath. fileName doesn't contain the .md extension, relativePath is the path from your vault root.

If a file has tags, the object has a tags property that contains an array of tags. Tags are all lower-cased and if a tag appears more than one time in a file, it will only appear one time in tags. If a file has any frontmatter it is included in frontmatter. The structure of the object depends on your frontmatter.

aliases, links and backlinks also only exist if there are any of the in a file.

links interface

The links contain both links to existing and non-existing files. If a file doesn't exist, the links won't have a relativePath.

link is the full link, exluding anything after the |, so if no alias is set, it also contains # or #^ if there are headings or block references. If that is the case, there is also the cleanLink property which provides just the filename for the link (omitting the .md extension).

displayText is what is displayed by Obsidian in preview mode. It can be the alias, but also the file name if there is a heading or block reference. If it is a heading link or block reference to the same file, it excludes the #, just like Obsidian does in preview mode.

cleanLink and displayText don't exist if it is a normal link.

backlinks interface

Backlinks always have a relativePath property because the file linking to the current file (object) needs to exist.

fileName and relativePath are the file which contains the backlink.

link, cleanLink and displayText behave as the links interface

Non-Markdown files metadata export

The third writes a JSON file containing both all folders and non-Markdown files. The structure is like this.

/**
 * JSON export
 */
interface exceptMd {
    folders: folder[];
    nonMdFiles?: file[];
}

interface folder {
    name: string;
    relativePath: string;
}

interface file {
    name: string;
    basename: string;
    relativePath: string;
}

file interface

The name is the file name including the extension, basename excludes it. relativePath is the path from the vault root.

Canvas metadata export

The fourth export writes a JSON file containing name, basename and relativePath of canvas files as object in an array.

[
  {
    "name": "my-canvas.canvas",
    "basename": "my-canvas",
    "relativePath": "Inbox/my-canvas.canvas"
  },
  {
    "name": "visualisation.canvas",
    "basename": "visualisation",
    "relativePath": "visualisation.canvas"
  }
]

Configuration

If you don't touch any settings, the files will be saved to the plugin folder. You can configure their names in the settings.

You can however also specify absolute paths for each file. They need to include the file name and extension in this case. The setting above won't have any effect then.

You can also set the frequency for writing the JSON files in minutes (default setting is 0, so it is not enabled) and whether the JSON files should be written on launch (default setting is false).

65%
HealthFair
ReviewSatisfactory
About
Export Obsidian vault metadata to JSON files on disk. Write tag indexes and per-note metadata (tags, headings, links, backlinks, frontmatter) as separate JSON exports and schedule them for third-party apps to consume.
ExportJSONFiles
Details
Current version
1.1.0
Last updated
3 years ago
Created
5 years ago
Updates
37 releases
Downloads
25k
Compatible with
Obsidian 1.1.7+
License
MIT
Report bugRequest featureReport plugin
Author
kometenstaubkometenstaub
github.com/kometenstaub
GitHubkometenstaub
  1. Community
  2. Plugins
  3. Export
  4. Metadata Extractor

Related plugins

Smart Context

Instantly copy folder contents or open notes—excluding specified headings—into your clipboard.

Notebook Navigator

Alternative file browser with folders, tags, properties, shortcuts, previews, keyboard navigation, drag and drop, and pinned notes.

Recent Files

Display a list of recently opened files.

Omnisearch

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

Advanced URI

Control everything with URI.

Remember cursor position

Remember cursor and scroll position for each note.

Meld Encrypt

Hide secrets in your notes.

Thino

Quickly capture memos and display them in the sidebar with a heatmap. (Closed source)

Pandoc

Commands to export to Pandoc-supported formats like DOCX, ePub and PDF.

Custom File Explorer sorting

Manual or automatic config-driven reordering and sorting of files and folders in File Explorer.