MAC Obsidian
Overview
MAC Obsidian is the local Obsidian-side companion plugin for this vault.
The current implemented pass is focused on exclusion behavior, not rendering compatibility. It makes Obsidian enforce the same excluded-path list more strictly across practical UI surfaces without renaming files or folders.
Plugin Location
The tracked local plugin bundle lives at:
.obsidian/plugins/mac-obsidian/
The current plugin is desktop-only.
Source Of Truth
MAC Obsidian reads exclusions from the native Obsidian setting stored in:
.obsidian/app.json
It uses the userIgnoreFilters list as the only source of truth.
What It Does Today
Current first-pass behavior:
- reads the native
Excluded fileslist on plugin startup - installs runtime filters only after Obsidian layout is ready
- filters excluded paths out of vault file lists and recent-file style arrays
- filters excluded and unresolved path-like targets out of link-suggestion results
- hides excluded rows from rendered explorer and suggestion-style DOM surfaces as a fallback
In practice, this keeps directories such as build/ and node_modules/ out of the sidebar, search surfaces, Quick Switcher-style file pickers, and [[ link suggestions while leaving non-excluded unsupported files such as .php and .js available elsewhere in the vault.
Related Native Setting
For Quick Switcher behavior, this vault also uses:
.obsidian/switcher.jsonshowExistingOnly: true
That native setting suppresses nonexistent create-target results that are separate from the excluded-path problem and complements the plugin's exclusion filtering.
Supported Exclusion Semantics
The current implementation supports the patterns already used in this vault:
- folder-style entries ending in
/, such asbuild/andnode_modules/ - descendant exclusion under those folders
- basename-style junk-file entries such as
.DS_Store,Thumbs.db, anddesktop.ini - exact path matches for slash-containing entries when needed
It does not introduce a second rule language or a separate plugin-owned exclusion list.
Restart Requirement
MAC Obsidian reads exclusions on plugin startup.
If the native Excluded files setting changes, restart Obsidian so the plugin reloads the updated filter list.
Non-Mutating Model
MAC Obsidian does not:
- rename files or folders
- apply dot prefixes
- change hidden attributes
- rewrite vault content
- mutate repo paths to force exclusion
The plugin is intentionally non-mutating. It provides effective UI-level exclusion for this vault rather than filesystem-level hiding.
It is also intentionally fail-open.
If a UI hook breaks or Obsidian changes its internal DOM, the plugin should stop hiding those rows rather than block vault loading.
Security Notes
The current implementation is intentionally narrow:
- no network access
- no external process execution
- no dynamic code loading
- no plugin-owned writable settings surface
- no filesystem renames or destructive path operations
It only reads repo-local Obsidian config and applies in-memory filtering plus DOM-level hiding for excluded paths.
Safety Notes
The current safe-hook model is:
- do not patch core vault or workspace methods before
workspace.onLayoutReady(...) - keep runtime wrappers read-only and narrow
- treat DOM hiding as a fallback, not the primary correctness path
- prefer hiding less over blocking vault load