nsyout124 downloadsGenerate safe Markdown indexes from folders, tags, properties, and filename patterns.
Generate safe Markdown indexes from folders, tags, properties, and filename patterns.
Concordance writes a list of [[wikilinks]] into a clearly-marked block in any
note you designate as an index. Content outside the block is never touched, so
your indexes can mix prose, headings, callouts, and the auto-generated list in
one file.
prefix — files whose name starts with a configurable template (default
{PREFIX} - plus a space)folder — files inside a folder (optionally recursive)tag — files carrying a tag (inline or frontmatter)property — files whose frontmatter property equals a given value%% concordance:start %%
and %% concordance:end %% is rewritten. Headings, notes, and other prose
outside the block are left alone.name vs full path,
by name vs path).A Concordance-managed index file. The list inside the %% concordance %%
markers is regenerated each run; everything outside is yours.

The update modal shows exactly what will change — links added, removed, and unchanged — before any file is written to disk.

Marker attributes drive non-prefix modes. Tag, folder, and frontmatter property indexes are all configured the same way — just by editing the options in the start marker.

main.js, manifest.json, and styles.css from the latest release.<vault>/.obsidian/plugins/concordance/.There are two ways to turn a note into an index.
Create a note whose name matches the configured index template
(default {PREFIX} - Index - {DISPLAY_NAME}), e.g. ART - Index - Art. Open it
and run Concordance: Update current index. Concordance asks once whether to
insert the managed block, then fills it with links to every other note whose
name starts with the ART - prefix.
Add a managed block to any note. The attributes inside the start marker tell Concordance how to populate it:
## Recipes
%% concordance:start mode="folder" folder="Recipes" includeSubfolders="true" %%
%% concordance:end %%
Run Concordance: Update current index on the note. The body between the markers is replaced with the generated list.
| Command | What it does |
|---|---|
| Update current index | Compute and apply the update for the active note. |
| Update all indexes | Bulk-update every detected index after a confirmation step. |
| Check indexes for updates | Read-only diff of every index. Nothing is written. |
Attributes are written inside the start marker as key="value" pairs.
| Attribute | Modes | Values | Default |
|---|---|---|---|
mode |
all | prefix, folder, tag, property |
prefix |
folder |
folder |
vault-relative path (empty = whole vault) | index folder |
includeSubfolders |
folder |
true, false |
false |
tag |
tag |
#tag or tag (leading # added) |
— |
property |
property |
frontmatter key | — |
value |
property |
frontmatter value to match | — |
linkStyle |
all | auto, name, path |
auto |
sort |
all | name, path |
path |
linkStyle="auto" picks the basename for in-folder matches and the full path
for subfolder matches so wikilinks resolve unambiguously.
%% concordance:start mode="tag" tag="#recipe" sort="name" %%
%% concordance:end %%
%% concordance:start mode="property" property="type" value="recipe" %%
%% concordance:end %%
%% concordance:start mode="folder" folder="Projects/Active" includeSubfolders="true" linkStyle="path" %%
%% concordance:end %%
{PREFIX} and {DISPLAY_NAME}.{PREFIX}.Ask shows a confirmation modal before adding
a marker pair to an index that has none; Never silently skips such files.%% concordance:start %% and
%% concordance:end %%. Everything else in a file is preserved.vault.getMarkdownFiles() to find candidate notes for an index.tag and property modes, it reads cached metadata (tags and
frontmatter) via Obsidian's MetadataCache — no extra file I/O.Build instructions, project layout, and release workflow live in CONTRIBUTING.md. Changelog is in CHANGELOG.md.
Developed with assistance from AI. All changes are reviewed and tested by the maintainer.
MIT — see LICENSE.