Trellis

by CocaPls
5
4
3
2
1
Score: 52/100

Description

Keep hierarchical tags and filename codes in sync in Obsidian, with a tag-based tree and previewed, link-safe bulk changes.

Reviews

No reviews yet.

Stats

0
stars
572
downloads
0
forks
50
days
2
days
3
days
4
total PRs
0
open PRs
0
closed PRs
4
merged PRs
0
total issues
0
open issues
0
closed issues
187
commits

Latest Version

3 days ago

Changelog

Trellis 0.7.0: filename rules and optional display names

English | 한국어

What's new

  • Extend filename structures with an optional free title and per-slot placement. Tag slots can affect the physical filename or contribute only to the displayed name.
  • Optionally show Trellis names in the file explorer, tabs, note titles, search results, backlinks, and Quick Switcher. Quick Switcher can find display names.
  • Configure each display surface separately. All six display options start off.
  • Review filename changes before applying an edited naming structure. The current-note preview appears while structure edits are pending.
  • Inspect naming projections and blocked metadata without changing notes.

Reliability improvements

  • Reject stale change previews when files, tags, or naming rules have changed.
  • Preserve newer tag edits when an automatic rename fails, and report incomplete recovery instead of overwriting those edits.
  • Clarify cancellation and recovery results for bulk operations.
  • Select individual bootstrap notes using touch, pen, or keyboard, while retaining mouse drag selection and Shift-range selection.
  • Block Windows reserved filenames, including superscript device names, and destinations that collide by letter case or canonical Unicode spelling. Check collisions both before bulk changes and immediately before renaming.
  • Restore normal labels when display options or the plugin are disabled, and clean up queued callbacks and window-specific event handlers on unload.

Updating from 0.5.2

Existing settings are migrated when loaded. Keep a backup of your vault and the Trellis plugin settings before applying bulk filename changes. Updating does not turn on the new native display options automatically.

Changing a slot between physical filename and display-only mode can change existing filenames after you confirm the structure change. Turning a native display switch on or off changes labels only; it does not change stored filenames or link destinations. Custom link aliases, link text, bookmarks, Graph, and Canvas are outside the native display-name feature.

Compatibility

Requires Obsidian 1.8.7 or newer. Core filename and display-only flows were tested on macOS with Obsidian 1.8.7 and 1.13.7. Windows Obsidian UI and physical Android and iOS execution have not been tested for this version.

Native display names use Obsidian's internal view structure as well as its public APIs. Compatibility can vary with app versions, themes, and other display plugins.

Recovery and support

Disabling Trellis restores the native labels it decorates; it does not undo physical file renames. Use the relevant undo operation when available. To restore a vault backup, stop Trellis first and restore the related notes and plugin settings together. Replacing only the plugin executable with an older version does not restore renamed notes or earlier settings.

For a problem report, include the Obsidian version, operating system, steps, and a small non-sensitive example of the naming rules and tags involved: https://github.com/CocaPls/obsidian-trellis/issues


한국어

새 기능

  • 이름 구성에서 자유 제목을 생략할 수 있고, 각 태그 칸을 실제 파일명에 넣을지 화면 표시명에만 넣을지 선택할 수 있습니다.
  • 파일 탐색기·탭·노트 제목·검색 결과·백링크·빠른 전환기에 Trellis 표시명을 선택적으로 보여 줍니다. 빠른 전환기는 표시명으로도 노트를 찾습니다.
  • 여섯 표시 옵션은 각각 설정하며, 새 설치에서는 모두 꺼져 있습니다.
  • 이름 규칙을 수정하면 적용 전에 실제 변경할 파일 목록을 보여 줍니다. 현재 노트의 이름 미리보기는 규칙 수정이 적용되지 않은 동안에 나타납니다.
  • 파일명 칸 검사로 실제 이름·계산한 이름·변경을 막는 태그 문제를 비교합니다. 검사를 여는 것만으로 노트가 바뀌지는 않습니다.

안정성 개선

  • 미리보기 뒤에 파일·태그·이름 규칙이 달라지면 오래된 변경 계획을 거부합니다.
  • 자동 이름 변경 실패 시 그 사이에 입력한 새 태그를 보존하며, 복구가 끝나지 않은 경우 확인이 필요한 내용을 보고합니다.
  • 일괄 작업의 취소와 복구 결과를 구체적으로 표시합니다.
  • 기존 파일명 가져오기에서 터치·펜·키보드로 개별 노트를 선택할 수 있습니다. 마우스 드래그와 Shift 범위 선택도 유지합니다.
  • Windows 예약 파일명과 위첨자 장치 이름을 차단하고, 대소문자나 유니코드 표기만 다른 이름의 충돌도 일괄 작업 전과 실제 이름 변경 직전에 검사합니다.
  • 표시 옵션이나 플러그인을 끄면 원래 화면 이름으로 돌아갑니다. 플러그인 종료 시 대기 중인 처리와 창별 이벤트 연결을 정리합니다.

0.5.2에서 업데이트

이전 설정은 불러올 때 변환합니다. 많은 파일명을 바꾸기 전에는 볼트와 Trellis 설정을 함께 백업하세요. 업데이트해도 새 화면 표시 옵션이 자동으로 켜지지 않습니다.

태그 칸을 실제 파일명과 표시 전용 사이에서 전환하면, 이름 규칙 변경을 확인하고 적용한 뒤 기존 파일명이 바뀔 수 있습니다. 여섯 화면 표시 스위치는 글자가 보이는 방식만 바꾸며 파일명과 링크 목적지를 바꾸지 않습니다. 링크 글자·사용자 별칭·북마크·그래프·캔버스는 이 표시 기능의 대상이 아닙니다.

지원 환경과 확인 범위

Obsidian 1.8.7 이상이 필요합니다. macOS의 Obsidian 1.8.7과 1.13.7에서 핵심 파일명·표시 전용 흐름을 시험했습니다. 이 버전의 Windows Obsidian 화면과 실제 Android·iOS 기기 실행은 시험하지 않았습니다.

기본 화면 표시명은 공개 API와 함께 Obsidian 내부 화면 구조를 사용합니다. 앱 버전·테마·다른 표시 플러그인에 따라 호환성을 따로 확인해야 할 수 있습니다.

복구와 문제 제보

Trellis를 끄면 바꿔 표시하던 화면 이름이 돌아옵니다. 이미 바뀐 실제 파일명은 그대로이므로 해당 되돌리기 작업을 사용해야 합니다. 백업을 복구하려면 Trellis를 먼저 끄고 관련 노트와 플러그인 설정을 함께 복구하세요. 실행 파일만 이전 버전으로 바꾸는 것은 파일명과 설정을 복구하지 않습니다.

문제 제보에는 Obsidian 버전·운영체제·재현 순서와 개인정보를 제외한 작은 이름 규칙·태그 예를 포함해 주세요: GitHub Issues.

README file from

Github

Trellis

English | 한국어

Trellis uses hierarchical tags to organize note names in two ways:

  • Change actual filenames: build parts of a filename from tags. Renames go through Obsidian so internal links can update with the file.
  • Change display names only: keep a file such as Note.md unchanged and show PRJ01-Note in selected Obsidian views using a display-only projects/PRJ/01 tag slot. Enable the views you want under Display names in Obsidian; all six switches start off. No other display-name plugin is required.

Tags supply the structured parts of either name. Actual-filename and display-only slots can also be combined. The following example changes an actual filename:

tag   #projects/PRJ/01/DOC/01
file  PRJ01DOC01-meeting-notes.md

tag   #projects/PRJ/01/DOC/02
file  PRJ01DOC02-meeting-notes.md

Trellis does not require every note to use managed tags. Notes outside the registered namespaces keep their existing tags and filenames.

Why use Trellis?

A filename prefix can make a large vault easier to scan, but maintaining the same structure by hand across many notes is slow and error-prone. Trellis lets you describe that structure once and project it from frontmatter tags.

frontmatter tags → filename structure → Obsidian rename → internal links updated

This keeps the structured part of a filename consistent while leaving an optional human-readable title under direct user control.

Core model

  • Managed tag — a registered hierarchical tag namespace, such as #projects/... or #areas/....
  • Tag slot — a filename part projected from one managed tag.
  • Free title — the optional filename part kept under direct user control. A structure can contain at most one free title.
  • Boundary — the symbol, one space, or direct join between populated slots.
  • Filename structure — the ordered list of slots and boundaries applied across managed notes.

Managed tag registration and filename projection are separate. A managed tag can appear in the Trellis sidebar without appearing in a filename, and each definition can be shown, hidden, or archived independently.

For a tag slot included in the structure, Slot placement chooses whether its value changes the actual filename or appears Display only. Sidebar visibility controls which tag branches you browse; slot placement controls the name shown for a note.

Filename structures

The initial settings register the trel tag namespace and use one tag slot followed by one free title:

structure  [trel tag] - [free title]
filename   PRJ01DOC01-meeting-notes.md

The projects examples elsewhere in this guide use a namespace you register in settings; projects is not preconfigured.

You can also combine several optional tag slots:

#projects/PRJ/01 + #areas/ENG/02
→ PRJ01-project-overview-ENG02

Each note only needs the managed tags that apply to it. Empty slots and their unused boundaries collapse automatically.

Per tag slot, you can configure:

  • the managed tag definition used as its source;
  • whether it contributes to the actual filename or only the Trellis display;
  • how hierarchy is displayed: hidden, a preset, or safe custom punctuation, with spacing around the hierarchy symbol;
  • no wrapper, round parentheses, or a safe custom wrapper;
  • whether underscores stay unchanged or appear as spaces in the filename.

The underscore option changes only the projected filename text:

stored tag      #topics/design_system
filename text   design system

Per boundary, you can choose:

  • a symbol with optional spacing on either side;
  • one plain space;
  • no separator.

Trellis rejects structures that cannot be parsed safely, would create duplicate filenames, or use characters that are unsafe across supported platforms.

Actual filenames and display names

With a structure of [projects] - [free title] - [areas], set projects to Actual filename and areas to Display only:

frontmatter tags   projects/PRJ/01, areas/ENG/02
actual file        PRJ01-meeting-notes.md
Trellis display    PRJ01-meeting-notes-ENG02

Changing areas/ENG/02 changes the name shown in the Trellis tree without renaming the file. Changing projects/PRJ/01 changes the actual file when filename sync is enabled. Obsidian's ordinary file explorer and links still refer to the actual file. Changing a slot's placement can rename existing files; review the preview before applying the structure.

Display names in native Obsidian views

Under Settings → Trellis → Filename & tags → Display names in Obsidian, opt in separately for the file explorer, tabs, note header/inline title, search results, backlinks and Quick Switcher. All switches default to off. FMT is not required. Switching these displays never renames a file or changes a link target. While a structure has unapplied edits, the editor previews the current file, calculated filename and display name. Applying or reverting those edits hides the preview.

For example, keep the actual file as Note.md and use a display-only projects/PRJ/01 tag slot to show PRJ01-Note on enabled surfaces.

Quick Switcher also matches display names and shows file paths for duplicate labels. Exact display-name matches appear first. Native search queries and sorting are unchanged. Editing a title exposes the real filename. Removing the relevant tags or an unavailable projection falls back to the real name; disabling the feature restores native labels. Link text, custom aliases, bookmarks, Graph and Canvas are outside this feature.

The adapter feature-detects native view internals, which require compatibility checks across Obsidian versions, themes and other display plugins.

Optional free titles and tag removal

A structure can omit the free title entirely. With only a projects tag slot, projects/PRJ/01 gives PRJ01.md; Trellis does not insert a hidden title slot when settings reload.

In a structure that includes a free title, removing the final physical managed tag while Trellis is tracking the note preserves that title: for example, PRJ01-meeting-notes.md becomes meeting-notes.md. The normal collision and filename checks still apply. Removing a display-only tag removes its displayed part and unused separator without changing the physical filename.

Settings saved by 0.5.2 are normalized when 0.7.0 loads them; tag slots with no placement value keep the actual-filename behavior. A pre-existing title slot is retained.

Main features

  • One-way filename sync — frontmatter managed tags update filename slots; editing a projected filename part does not rewrite the tag.
  • Pause and review — pause filename sync while editing tags, then review the exact drift and collisions before applying the filenames.
  • Tag tree sidebar — browse managed hierarchies, open notes, create notes, find the current note, sort, and expand or collapse branches.
  • Independent sidebar visibility — show several managed tag definitions, hide individual definitions, or hide selected branches.
  • Subtree changes — preview and move a managed tag with all descendants, including reviewed transfers between definitions.
  • Import existing filenames — derive managed tag candidates from compatible filenames through a dry run before writing.
  • Duplicate cleanup — review notes carrying more than one value for a filename-bearing managed definition and keep the intended value.
  • Value suggestions — optionally suggest sequences, dates, timestamps, or alternating alphabet and number segments when creating notes.
  • Properties labels — shorten managed tag labels in Obsidian Properties without changing the stored tags.
  • Filename slot inspector — run Inspect filename slots to compare actual filenames, physical targets, and Trellis-only names, including drift and blocking tag issues. Opening it does not change tags or filenames.

Safe writes and completion

Trellis treats filename and tag changes as managed write operations.

  • Live sync, automation, and bulk work share one write owner.
  • Repeated metadata events for the same note are coalesced before filename sync.
  • Bulk changes show the affected notes before apply and retain supported undo records.
  • Renames share the same portability, collision, re-entry, and link-safe guard.
  • A failed or cancelled batch either rolls back the completed prefix or retains an exact undo record, depending on the command, and reports anything that still needs review.
  • A recorded bulk or automation write that was running when Obsidian stopped is reported as interrupted on the next load instead of being treated as complete.

Renames use Obsidian's file manager and follow Obsidian's Automatically update internal links setting.

Import undo removes the tags added by the import. With filename sync enabled, removing the final physical tag can also remove its filename prefix: importing PRJ04-Imported.md and then undoing the tag import can leave Imported.md. The original manually typed prefix is not restored by this undo operation.

Quick start

  1. Install and enable Trellis.
  2. Open Settings → Trellis → Filename & tags.
  3. Register a managed tag namespace, for example projects.
  4. Add that managed tag to a tag slot in the filename structure.
  5. Add a frontmatter tag such as projects/PRJ/01/DOC/01 to a note.
  6. Review any bulk preview before applying a vault-wide change.

Example frontmatter:

---
tags:
  - projects/PRJ/01/DOC/01
---

Frontmatter tags are the management source. Inline tags are not rewritten and are reported separately when they overlap a managed namespace.

Screenshots

These screenshots show the public 0.7.0 plugin installed from Obsidian's community browser on macOS, using test notes and a custom naming structure.

Filename structure settings

The structure combines an actual-filename Projects slot, a free title, and a display-only Areas slot. This example uses test namespaces releasecheck and areascheck; new installations start with trel.

Native display options off Native display options on
Original native note names Trellis names in native note views

The actual file remains PRJ01-Meeting notes.md in both screenshots. Enabling native display names adds ENG02 to the tab, note header, and inline title. The Trellis sidebar shows its calculated name in both cases.

Automation for tools and AI

Trellis exposes a guarded in-process surface for tools that already run inside Obsidian:

describe / inspectNote → planChange → applyChange → awaitIdle

Plans are rejected if the note, tags, filename structure, or target path changed after inspection. Callers can query operation status and must treat an attention report as unfinished review even when Trellis is otherwise idle.

Trellis opens no network, REST, URI, or MCP endpoint. See Guarded automation for the request and result contracts.

Current boundaries

  • Trellis manages frontmatter tags; other properties are not filename sources.
  • Each managed definition is single-valued per note for filename projection.
  • A filename structure supports multiple tag slots and at most one free title.
  • Trellis renames note files, not matching folders or Folder Note pairs.
  • Multi-value classification, note semantics, folder organization, Git history, and rules for assigning identifiers remain the user's responsibility.

These boundaries keep Trellis useful in different vaults without imposing one knowledge-management system.

Installation

Community plugins

In Obsidian, open Settings → Community plugins → Browse, search for Trellis, then install and enable it.

Manual installation

Download main.js, manifest.json, and styles.css from a matching GitHub release, then place them in:

your-vault/.obsidian/plugins/trellis/

Enable Trellis from Obsidian's Community plugins settings.

Compatibility, privacy, and safety

  • Requires Obsidian 1.8.7 or newer.
  • Supports desktop and mobile.
  • Runs locally inside Obsidian. Native display names also use internal view structures.
  • Makes no network requests and collects no telemetry.
  • Does not access files outside the current vault.

For 0.7.0, core filename and display-only flows were tested on macOS with Obsidian 1.8.7 and 1.13.7. Windows Obsidian UI and execution on physical Android/iOS devices have not been tested for this version. See the release notes for the compatibility and recovery details.

Filename and tag migrations can affect many notes. Review the preview and keep a normal vault backup before large changes.

Development

npm ci
npm run lint
npm run build
npm test
npm audit --audit-level=high
npm run verify:release -- 0.7.0

Pure filename-structure logic lives in src/tagkey.ts. Persisted settings and operation tracking live in src/settings-model.ts and src/operation-state.ts. Filename projections and their incremental index live in src/filename-projection.ts and src/projection-index.ts; title preservation lives in src/physical-title-memory.ts. Obsidian integration lives in src/main.ts.

See CONTRIBUTING.md for the development and release workflow.

License

MIT