CocaPls105 downloadsSync a hierarchical location tag (source of truth) into the filename prefix (tagkey). Cascade rename, sidebar tree view, vault bootstrap, and separator batch-change — all link-safe.
English | 한국어
Trellis keeps a hierarchical location tag as the source of truth for a note, and mirrors it into the note's filename prefix — automatically, and without breaking any links.
Move a note in the tag tree and its filename prefix follows. No manual batch-renaming, no broken wikilinks.
note tagged #trel/S88/B07 → filename S88B07-meeting-notes.md
retag it #trel/S88/B99 → filename S88B99-meeting-notes.md (automatic)

Trellis reads a filename as three parts. For S88B07-meeting-notes.md:
S88B07 is the tagkey — the prefix built from the note's location tag
(#trel/S88/B07 becomes S88B07). This is the only part Trellis controls.- is the separator between the tagkey and the title (default -).meeting-notes is your title. Trellis never touches it.The tag is the source of truth. Change the tag and the tagkey is rewritten to match; edit the tagkey by hand and it's restored from the tag on the next sync.
S88B07 → S/88/B/07,
PROJ123 → PROJ/123), so it isn't tied to one naming scheme.Everything above stays on the single-key path by default. Two features are opt-in — see Advanced below.
From Obsidian: Settings → Community plugins → Browse, search for Trellis, install, and enable.
Manually: download main.js, manifest.json, and styles.css from the
latest release, drop them in
your-vault/.obsidian/plugins/trellis/, and enable the plugin in Settings →
Community plugins.
tags: [trel/S88/B07]) and
the filename prefix syncs to S88B07.Both of these are off by default. The single-key engine stays the default path.
Multi-key slots. By default a filename is one tagkey plus a title. If a note needs more than one identifier — say a project code and a cross-cutting area code — turn on Multi-key slots and define the filename as an ordered list of slots: one or more tagkey slots (each synced from its own tag namespace), a title slot, and a separator between them.
#trel/AA/01 + #key2/BB/02 → AA01-my-note--BB02
retag the second #key2/BB/09 → AA01-my-note--BB09 (automatic)
The slot editor stages your edits — add or remove slots, set each namespace, and nothing changes until you press Apply and confirm. Existing files are re-synced only as their tags change, never renamed on the spot. Empty, duplicate, or illegal values are caught inline before they reach the vault. While multi-key is on, the tree, bootstrap, cascade, and separator change operate on the first tagkey slot.
Root namespace. If you want the whole tag tree filed under a top-level root —
everything under zettel/, say — turn on a root namespace. Tags become
#zettel/trel/S88/B07; the filename prefix stays S88B07, since the root
doesn't affect filenames. Turning it on (or changing it) migrates existing tags
across the vault behind a confirmation, with a one-step undo.
Segment presets. When you create a note from the tree, Trellis can propose the next segment: the next number in a sequence, a date, a Zettelkasten timestamp, or an alternating letter/number scheme. Set a preset per slot — you can always type your own segment instead.
Bootstrap — pick what to onboard. Already-tagged notes show as done; untagged notes are selectable (whole vault, folders, or individual notes).

Cascade rename — move a whole subtree. Rename one tag and every note under it follows, filenames and wikilinks included.

Duplicate cleanup — one location per note. When a note has more than one location tag, pick the one to keep; the rest are removed (undoable).


trel).
Staged and committed with an Apply button.Requires Obsidian 1.8.7 or newer. Desktop and mobile.
A filename is a positional list of slots joined by separators — by default a
two-slot [tagkey, title] layout, so multi-key schemes grow without rewriting
the core. The conversion logic lives in tagkey.ts (pure and unit-tested);
main.ts is the Obsidian glue. The live sync is format-agnostic — it mirrors
whatever the tag path is. Bootstrap, the reverse direction, splits a flat prefix
at letter/digit boundaries; it's general across schemes, though it can't recover
a boundary inside a run of the same character class.
Bug reports and pull requests are welcome — see CONTRIBUTING.md for how to build, test, and submit changes.
My vault leans on short ID prefixes in filenames — each note carries a code for where it sits in my system. Keeping those prefixes right by hand was tedious and easy to get wrong, so Trellis drives them from a location tag instead: tag a note and its filename prefix follows, link-safe. Stable, predictable prefixes make the vault easy to scan, and let me point a CLI tool at exactly the right files by their IDs. The tag is the one source of truth; filenames and wikilinks follow on their own.
Trellis is the identification piece of everything-in-obsidian — a personal hub of pluggable systems for running an Obsidian vault with a CLI AI. Trellis works fully on its own; the hub is just optional context on where it fits.