Zenvault

unlisted

by Nakul Tiruviluamala

File explorer with manual ordering stored in your vault as a portable, ZenNotes-compatible order.json

Updated 1mo agoMIT
View on GitHub

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-file markup 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 folders are 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:

  1. names listed for that folder, in listed order, for children that exist on disk; then
  2. 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:

  1. Download main.js, manifest.json, and styles.css from the latest release.
  2. Put them in <vault>/.obsidian/plugins/zenvault/.
  3. 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.