Open-source project
johansan/notebook-navigator avatar
johansan/notebook-navigator

Two panes, one set of arrow keys, and the version number in three files

A better file browser and calendar inspired by Apple Notes, Bear, Evernote and Day One.

2,751 stars103 forksTypeScriptGPL-3.0

At a glance

What is it?
Notebook Navigator replaces the Obsidian file explorer with a dual-pane browser whose architecture lives in eight documents under docs/, whose build refuses to type-check anything less than zero errors, and whose package.json declares a license reference that is not the one the repository records.
Who is it for?
This plugin is worth a look if your Obsidian vault has more notes than the default explorer can carry, since the pitch claims it works with 100,000 of them and the rendering notes name TanStack Virtual as the mechanism. Check three things first.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 4, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The arrow keys do different things in each pane

The keyboard model is built on two panes with different names, the navigation pane and the list pane, and the same key changes meaning depending on which one has focus. Up and down navigate within the current pane. Left collapses or goes to the parent when the navigation pane is active, but switches to the navigation pane when the list pane is active. Right expands or switches to the list pane in the navigation pane, but switches to the editor when the list pane is active.

So the horizontal keys are doing two unrelated jobs at once. On the tree side they move through depth. On the list side they move between regions of the interface, and the editor sits one step further right. Anyone porting muscle memory from a single-pane file browser has to learn which side they are on before the keys feel right, and a shortcut that works while a note is selected sends focus somewhere else entirely once focus returns to the tree.

Node 24 is the floor, and the build script is the quality gate

package.json sets the runtime floor at Node 24.0.0, and the build script is where the checks live rather than in a separate CI step:

sh
node scripts/build-languages.mjs && node scripts/build-styles.mjs && npm run check:strings && tsc -noEmit -skipLibCheck && node esbuild.config.mjs production

The type check runs with noEmit, so it validates and emits nothing. esbuild is what produces the output, and main points at a single main.js. check:strings runs scripts/check-unused-strings.mjs in check mode, and knip.json sits in the root for the same kind of dead weight. Linting is split in two, eslint over the TypeScript in src and tests using the official Obsidian ESLint plugin, and stylelint over the stylesheets with max-warnings set to zero after the styles are rebuilt. Tests are Vitest.

The stated bar is that the build completes with zero errors and zero warnings before changes merge, and security checks run through CodeQL with the scan history kept in the workflow runs. A root osv-scanner.toml covers dependency vulnerabilities, and there are two tsconfig files, one of them only for the linter.

The version number lives in three files and one script rewrites two

The version script is a single line: node version-bump.mjs, followed by git add manifest.json versions.json. That tells you where the number comes from. manifest.json is what Obsidian reads to load a community plugin, versions.json records the published versions, and version-bump.mjs is the script that writes them. package.json carries a fourth copy at 3.4.3, and the newest tag is also 3.4.3.

The release dates show a project that ships patches in bursts. Tag 3.4.3 was published on 2026-09-24 at 07:18 UTC and tag 3.4.2 forty-eight minutes earlier the same morning, with 3.4.1 ten days before that on 2026-09-14. The last push to main is dated 2026-09-26, two days after the newest tag, so the branch is already carrying work that no tag points at.

It runs locally, and the network list sits one section away

The security section says Notebook Navigator runs locally, but some features make documented HTTP requests for updates, downloads, and remote content. The full list is not given there. It is deferred to section 11, Network and Diagnostics Disclosure, which sits behind a link rather than any summary of what leaves the machine.

That arrangement is worth noting for two reasons. Updates mean the plugin checks somewhere new versions appear, and remote content means something in the browsing path can be fetched rather than read from the vault. Neither is alarming on its own, but a reader who stops at the security section has not seen either.

The table of contents has a similar shape. It starts at section 4 and runs to section 14, so installation, the tutorial, and security and quality sit outside it while documentation, keyboard shortcuts, synced and local settings, search, custom hotkeys, commands, features, the network disclosure, contact, issues and license are all indexed. Section 6, synced and local settings, is the only hint about which preferences travel with a synced vault and which stay on the device.

Four steps inside Obsidian, and 21 languages of documentation

Installing takes four steps and none of them touch a terminal. Install Obsidian from obsidian.md, turn on community plugins under Settings, then open Browse, search for Notebook Navigator and install it. A fifth piece is optional: the Style Settings plugin by mgmeyers, for customizing colors and appearance.

Documentation is where the scale shows. The top of the README links the same page in 21 languages, from English and Deutsch through العربية, Русский, ไทย, 日本語, 한국어, 中文简体 and 中文繁体, and the tutorial video is credited with subtitles in 21 languages. Those pages are built by scripts/build-languages.mjs, so the translations are generated into the bundle rather than hand-maintained one file at a time.

For anyone moving over from elsewhere, there are switching guides for Evernote, Apple Notes, Bear, OneNote and Day One. That list is longer than the set of apps the repository credits as inspiration, which names four.

docs/ holds the architecture the README only points at

Eight documents under docs/ carry the real design, and each one is described in a parenthesis in the README. The API reference covers metadata management, navigation control and event subscriptions for people writing JavaScript or TypeScript against the plugin. The theming guide is for theme developers and carries a CSS class reference, custom properties and light and dark examples.

The other six describe the inside. Startup process covers cold boot versus warm boot, metadata cache resolution, deferred cleanup and the content generation pipeline. Metadata pipeline covers cache rebuilds, provider stages and completion signals. Storage architecture names four containers: IndexedDB, Local Storage, Memory Cache and Settings. Rendering architecture names the React hierarchy and virtual scrolling with TanStack Virtual. Scroll orchestration exists because tree structures change under the user, for instance when tag visibility or settings change. Service architecture names the business layer as MetadataService, FileSystemOperations and ContentProviderRegistry, wired with dependency injection.

Two of them carry Mermaid diagrams. The pattern is consistent: the README is an index, and the answers live one level down.

Three descriptions of the same plugin, and an empty keywords array

The plugin describes itself three different ways. The repository line calls it a better file browser and calendar inspired by Apple Notes, Bear, Evernote and Day One. package.json calls it a replacement for the default file explorer with a clean two-pane interface featuring folder tree, tag browsing, file previews, keyboard navigation, drag-and-drop, pinned notes and customizable display options. The pitch paragraph in the README asks you to turn Obsidian into a fast, customizable notes browser with folders, tags, properties and shortcuts in one view.

The calendar appears only in the first of those. The two-pane structure, drag-and-drop and pinned notes appear only in the second. The README pitch adds properties and the visual previews, the keyboard navigation, the dual-pane layout, the mobile layout and a claim of working with 100,000 or more notes.

There is a fourth gap. The keywords array in package.json is empty, so nothing in the package metadata carries the words a search would need, while the eight architecture documents, the 21 translated documentation pages and the four configuration files at the root all carry detail the package metadata does not.

Editorial conclusion

This plugin is worth a look if your Obsidian vault has more notes than the default explorer can carry, since the pitch claims it works with 100,000 of them and the rendering notes name TanStack Virtual as the mechanism. Check three things first. Confirm your Node version, because package.json sets the floor at 24.0.0 and the build script will not run below it. Confirm what your build makes network calls for, since the plugin runs locally but documents requests for updates, downloads and remote content in a section the README only points at. And settle the license question yourself, because the repository records GPL-3.0 while the package.json license field reads LicenseRef-NotebookNavigator, and those two do not agree.

Frequently asked questions

What is Notebook Navigator for Obsidian?

It is a community plugin that replaces the default file explorer with a two-pane interface built from a folder tree, tag browsing, file previews, keyboard navigation, drag-and-drop, pinned notes and display options you can change. The pitch paragraph adds visual previews, a mobile layout and a claim of working with 100,000 or more notes.

Can Obsidian be used as a file manager?

This repository does not answer that in general terms. What it records is narrower: Notebook Navigator replaces the Obsidian file explorer with a two-pane interface organised around folders, tags and properties, and it installs through the community plugin browser after community plugins are enabled.

How do I install and start using Notebook Navigator?

Four steps, none in a terminal: install Obsidian from obsidian.md, turn on community plugins in Settings, then Browse, search for Notebook Navigator and install it. Style Settings is optional and only for colors and appearance. The README then points to an official tutorial video whose subtitles are in 21 languages.

Is Notebook Navigator an alternative to make.md?

Nothing in this repository compares the two. The comparison material it does provide is a set of switching guides for Evernote, Apple Notes, Bear, OneNote and Day One, and the repository line names Apple Notes, Bear, Evernote and Day One as the apps that inspired the plugin.

What does Notebook Navigator send over the network?

It runs locally, and the README says some features make documented HTTP requests for updates, downloads and remote content. The full list is not in that paragraph; it is deferred to section 11, Network and Diagnostics Disclosure.

What license is Notebook Navigator under?

The repository is recorded as GPL-3.0 and a LICENSE file sits in the root. The package.json license field says something different, LicenseRef-NotebookNavigator, which is a custom reference rather than a standard identifier, so the two do not agree and the README section on license would be the place to settle it.

Official sources

  1. johansan/notebook-navigator on GitHub
  2. License: GPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/johansan-notebook-navigator.svg)](https://hysenlabs.com/projects/johansan-notebook-navigator)