Zenvault
unlistedby Nakul Tiruviluamala
File explorer with manual ordering stored in your vault as a portable, ZenNotes-compatible order.json
Zenvault
A file explorer for Obsidian with manual ordering that lives in your vault.
Zenvault replaces the alphabetical-only file tree with one you can arrange by
hand. Drag notes and folders into the order you want; the order is saved to a
plain JSON sidecar (.zennotes/order.json) inside the vault, so it travels
with your files, diffs cleanly in git, and can be shared with any other tool
that reads the same folder of Markdown - it is compatible with
ZenNotes out of the box.
No database. No plugin-private state. No filename prefixes.
Features
- Left-sidebar file tree with native Obsidian styling. It uses the same
nav-folder/nav-filemarkup as the core Files view, so your theme's chevrons, indent guides, hover states, and active-file highlight all apply. Zenvault becomes the default left tab on launch (Files stays available). - Drag to reorder within a folder: drop between rows, an accent line shows where the item will land. Hover a row for up/down buttons as a fallback.
- Drag to move across folders: drop onto a folder's center band (the row glows in your accent color) to move an item inside; drop between rows of any other folder, at any level up or down, to move it there at that exact position. Moves go through Obsidian's file manager, so links update vault-wide.
- Order data follows renames and moves. Rename a folder or move it elsewhere (from Zenvault, the core explorer, or Finder) and its ordering, and its descendants' ordering, comes along.
- Auto-reveal current file (toggle in the header, persisted) and Collapse all.
- Right-click context menu with the standard operations (new note, new folder, rename, delete, copy path, reveal in Finder) plus every item other plugins add to Obsidian's file menu: templates, image tools, bookmarks, and so on appear here exactly as they do in the core explorer.
- Click a file to open it. Click a folder to expand or collapse it.
The order file
Path (configurable, default): .zennotes/order.json
{
"version": 1,
"folders": {
"/": ["Welcome.md", "Projects", "Inbox.md"],
"Projects": ["roadmap.md", "archive"]
}
}
- Keys under
foldersare vault-relative folder paths, with"/"for the vault root. - Values are ordered lists of child basenames: files with extension
(
roadmap.md), folders as the plain name (archive). - The file lives in a dot-folder, which Obsidian's vault index skips, so Zenvault reads and writes it through the low-level vault adapter.
Ordering semantics
A folder's children render as:
- names listed for that folder, in listed order, for children that exist on disk; then
- unlisted children in byte order (case-sensitive codepoint sort). This matches ZenNotes' fallback, so a folder with no entry, or a partial entry, looks the same in both apps.
Dotfiles and dotfolders are never shown.
On every reorder or move Zenvault writes the folder's complete list of existing children, so the file materializes the order rather than storing a diff. Writes are debounced (about 300 ms). Stale entries are skipped at render time and dropped the next time that folder is written.
Migrating from other ordering plugins
If your order currently lives somewhere else (a plugin database, filename
prefixes, ...) you can seed order.json with a script that emits the format
above; Zenvault picks it up on next focus. Nothing in the vault needs to be
renamed.
Install
Manual install until this is in the community plugin list:
- Download
main.js,manifest.json, andstyles.cssfrom the latest release. - Put them in
<vault>/.obsidian/plugins/zenvault/. - Enable Zenvault in Settings > Community plugins.
Settings
- Order file path - vault-relative path of the sidecar
(default
.zennotes/order.json).
Development
bun install
bun run dev # esbuild watch
bun run build # production build -> main.js
bun run typecheck # tsc -noEmit
Copy main.js, manifest.json, and styles.css into your vault's
.obsidian/plugins/zenvault/ folder. With the Hot Reload plugin installed,
rebuilds apply live.
License
MIT
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.