compare / dendron
tnotes vs Dendron
VS Code extension for hierarchical Markdown notes named a.b.c.md, in maintenance mode since February 2023.
tnotes
terminal app · macOS, Linux · MIT · free · v1.3.0
editor plugin · VS Code or VSCodium on Windows, macOS, Linux; CLI via Node.js · Apache-2.0 (relicensed from GPL-3.0 at the maintenance announcement) · Free
Dendron’s idea is that a knowledge base should be refactored like code. Notes are named by their place in a hierarchy, so project1.tasks.task1.md is the child of project1.tasks.md, and all of them sit in one flat vault folder. Lookup (Ctrl+L) finds or creates notes by that dotted path, schemas type the hierarchy and apply templates, and Rename Note or Refactor Hierarchy move whole subtrees while rewriting every wikilink that pointed into them. Every note carries YAML front matter with an id, title, created and updated; Dendron warns when it is missing.
The extension is the product, but it is not the only entry point. @dendronhq/dendron-cli runs dendron note lookup --query hello --output json and dendron note write --fname mytest --body "..." against a workspace without VS Code, and the same engine publishes a vault as a Next.js site.
The state of the project matters more than any feature. In February 2023 the founder announced on Discord that the company had pivoted, that “Dendron, the extension, will no longer be actively developed” and that the project would be in maintenance mode; the README links to the GitHub discussion that reproduces the announcement. Pull requests are reviewed on a best-effort basis, the last commit is from June 2025, and the extension still installs and works, but nothing new is coming. Anyone choosing Dendron in 2026 is choosing a finished tool.
Feature comparison
| Feature | tnotes | Dendron |
|---|---|---|
| Storage format | ✓ plain .md files, folders are directories | ✓ plain .md files, one flat vault folder; hierarchy is in the file name, YAML front matter required |
| Runs in the terminal | ✓ TUI (ratatui) plus a headless CLI | ✗ editor is VS Code; the CLI is headless but not a TUI |
| [[Wikilinks]] | ✓ [[Title]] with completion; rewritten on rename | ✓ [[dotted.note.name]], plus block anchors and cross-vault links |
| Backlinks | ✓ overlay + backlinks in JSON | ✓ Backlinks panel in the sidebar |
| #tags | ✓ #tag and nested #work/project, parsed from text | ✓ #tag in text or tags: in front matter; each tag is a note under tags.* |
| Headless CLI | ✓ ls, search, cat, new, append, write, trash, restore | ✓ dendron note get | find | lookup | write | delete | move |
| JSON output for scripts / agents | ✓ --json on every command | ✓ --output json on the note commands |
| Live reload on external edits | ✓ file watcher; dirty tabs keep their text | ~ VS Code reloads clean editors; Reload Index re-reads schemas |
| Vim keys | ✓ vim or emacs keys (edtui) | ~ through the VSCodeVim extension |
| Mouse support | ✓ click, double-click, right-click menus, drag | ✓ |
| Sync | ~ any file sync: git, Syncthing, iCloud, Dropbox | ~ vaults are folders meant for git; no sync service |
| Encryption | ~ encrypt the folder: FileVault, gocryptfs | ✗ |
| Mobile app | ✗ files sync to any mobile Markdown editor | ✗ |
| Plugins | ✗ | ~ pods for import/export and hooks; the rest is the VS Code ecosystem |
| Open source | ✓ MIT, Rust | ✓ Apache-2.0, TypeScript; maintenance mode, last commit June 2025 |
✓ yes · ~ partial or via the file system · ✗ no
Choose Dendron if
- You want hierarchy as the primary structure: dotted names, stubs for missing parents, schemas that enforce shape and templates.
- You refactor: renaming a note or a whole hierarchy rewrites every wikilink across the vault.
- You already work in VS Code and want notes in the same window as code.
- You publish: the built-in Next.js site generator handles per-vault, per-hierarchy and per-note publishing permissions.
- You are comfortable with a project in maintenance mode because it is local-first and the files are plain Markdown.
Choose tnotes if
- You want an actively developed tool: tnotes 1.3.0 shipped on 21 September 2026 with
write,appendandrestorein the CLI. - You want a terminal UI, not an editor extension: tnotes runs over SSH and in a tmux pane.
- You want folders on disk,
[[Title]]links and#tagswith no required front matter. - Scripts and agents need
ls,search,cat,new,append,writewith--jsonand no Node.js runtime.
Using Dendron and tnotes together
A Dendron vault is a folder of .md files, so tnotes can open it, but two Dendron conventions collide with tnotes’ rules:
- tnotes takes the title from the first non-empty line. Every Dendron note starts with the
---front-matter fence, sotnotes lsshows---as the title of every note and the YAML shows as text in the editor. - tnotes renames a file to a slug of its title whenever it saves. The slug of
---isuntitled, so editingproject1.tasks.task1.mdin the tnotes TUI, or withtnotes append/tnotes write, renames it tountitled.md(thenuntitled-2.md, and so on). That breaks Dendron’s hierarchy and its links. [[project1.tasks.task1]]does not resolve: tnotes matches links against titles and against slugged file stems, and the slug of a dotted name has dashes, not dots.#example.my-exampleis read by tnotes as#example; tags stop at the dot.
So use tnotes read-only on a live Dendron vault (ls, search, cat never write), or convert once. This turns the dotted hierarchy into folders and the front-matter title into the first line:
src=~/Dendron/vault; dst=~/notes
for f in "$src"/*.md; do
stem=$(basename "$f" .md)
out="$dst/$(printf '%s' "$stem" | tr . /).md"
mkdir -p "$(dirname "$out")"
awk 'NR==1 && $0=="---" {fm=1; next}
fm && $0=="---" {fm=0; print "# " title; next}
fm && sub(/^title: */, "") {gsub(/^"|"$/, ""); title=$0; next}
fm {next}
{print}' "$f" > "$out"
done
tnotes "$dst"
project1.tasks.task1.md becomes project1/tasks/task1.md titled from its front matter. Wikilinks still contain dotted names after this; rewrite them to [[Title]] with a second pass or leave them and let alt+enter create the missing targets as you go. Front-matter tags: are dropped; add #tags in the body where you want them.
FAQ
- ? Is Dendron still maintained?
It is in maintenance mode. The founder announced in February 2023 that active development had stopped after the company pivoted; the README states it plainly, and the last commit to the repository is from June 2025. The extension still works because everything is local files, and pull requests are reviewed on a best-effort basis.
- ? How do I get my notes out of Dendron?
They are already Markdown files in the vault folder, named
a.b.c.mdwith YAML front matter. Any Markdown tool opens them. To move to a folder-based tool, split the dotted names into directories and move the front-mattertitleinto a heading; the recipe above does that for tnotes.- ? Does Dendron have a CLI?
Yes.
npm install -g @dendronhq/dendron-cligivesdendron note get | find | lookup | write | delete | move, with--output json,md_gfmormd_dendron, plus publishing and pod commands. It needs a workspace withdendron.ymland starts its own engine unless you attach to a running one.
Sources
Dendron facts checked on 2026-09-22 against:
- Dendron README (maintenance notice, features, Apache-2.0 license)
- GitHub discussion #3890 reproducing the February 2023 announcement
- Dendron wiki: note CLI (dendron note …, --output json)
- Dendron wiki: front matter, tags and hierarchies