Allow bases to see "properties" generated by plugins

Currently the help page https://help.obsidian.md/bases/syntax says “In the future, plugins will be able to add functions for use in formulas.”

This is an extension of the same idea, if i’m understanding that sentence correctly. My idea is for plugins to be able to supply (virtual) properties determined by examination of the files - which bases can then treat as they do file properties, note properties, or formulas.

Use case or problem

There seem to be many use cases for this facility.

I’ve linked one of the major ones below: property support for file types other than Markdown could be provided by plugins. A plugin could scan the structure of PDFs, audio files, or the like, and export useful information that bases could then sort and report.

Another - closer to my own use case - would be letting bases have information about the contents of Markdown notes that can be obtained programatically. For instance, a plugin with the right regular expressions could tell you which of your notes have Mermaid charts, or use other specific features.

Proposed solution

Create an API that plugin developers can write to, allowing them to define “properties” that the plugin can calculate, which when the plugin is installed become selectable by the user in bases just like built-in file and note properties.

Current workaround (optional)

Some use cases can be implemented with formulas, but not all.

Related feature requests (optional)

Also related:

Another related feature request:

I’d like to add another concrete use case for this API.

I’m building a plugin idea that exposes structured information from the Markdown body as virtual Bases properties. This is not limited to frontmatter.

For example, many notes use repeated headings like “Progress”, “Risks”, and “Next”. A plugin could expose:

heading.Progress.content
heading.Progress.isEmpty
heading.Progress.length

But the same API could also support other body-derived properties, such as:

tasks.open.count
tasks.open.items
tasks.withTag(“#waiting”)
blocks.withTag(“#idea”)
paragraphs.withTag(“#project”)
callouts.withType(“warning”)

These values could then be selected as custom columns in Bases, used for filters, grouping, sorting, formulas, and summaries.

Syncing this kind of data into frontmatter is not ideal. The source content may be long Markdown with links, tasks, code blocks, callouts, tags, embeds, or source positions. Duplicating it into properties can create sync conflicts and pollute the note.

Custom Bases views help, but they don’t fully solve this because plugin-generated values still can’t participate in the native Bases table/card/list views, property toolbar, filters, groups, sorts, or formulas.

A stable plugin property provider API would let plugins expose computed properties from the Markdown body as first-class Bases properties. This would unlock use cases like heading sections, task aggregation, tagged paragraph aggregation, reading progress, Dataview-like computed fields, and external metadata.