compare / neorg
tnotes vs Neorg
Neovim plugin for structured notes, tasks and journals in its own .norg format, parsed by tree-sitter.
tnotes
terminal app · macOS, Linux · MIT · free · v1.3.0
editor plugin · Neovim 0.10+ on Linux, macOS, Windows; needs luarocks and a tree-sitter build · GPL-3.0 · Free
Neorg is not a Markdown tool and does not try to be one. It defines its own file format, .norg, with a tree-sitter grammar, and builds every feature on that: headings that nest by star count, TODO items with a state cycle, a journal module, a table of contents module, a presenter, a code-block tangler. The README calls the project young and warns of occasional breaking changes; version 9.0.0 changed the installation path to luarocks, and 9.6.4 (April 2026) is the latest tag.
Links are Norg objects, not titles. {* Heading} points at a heading in the current file, {:notes/index:* Heading} at a heading in another file of the workspace, {# anything} at any object with that name; core.esupports.hop follows them. There is no title-based link and no backlinks index. The roadmap lists a Zettelkasten backend, to be written in Rust, whose main job would be tracking backlinks; it is unchecked.
Getting out is a Neovim command. :Neorg export to-file out.md converts the current buffer through core.export.markdown, and :Neorg export directory ~/notes markdown converts a workspace. Pandoc does not read .norg; the roadmap marks the Pandoc integration as stalled.
Feature comparison
| Feature | tnotes | Neorg |
|---|---|---|
| Storage format | ✓ plain .md files, folders are directories | ✓ plain .norg files in workspaces managed by core.dirman; not Markdown |
| Runs in the terminal | ✓ TUI (ratatui) plus a headless CLI | ✓ it is Neovim |
| [[Wikilinks]] | ✓ [[Title]] with completion; rewritten on rename | ~ {:file:} and {:file:* Heading} links, {* Heading} in-file; no [[Title]] syntax |
| Backlinks | ✓ overlay + backlinks in JSON | ✗ planned as part of a Zettelkasten library on the roadmap |
| #tags | ✓ #tag and nested #work/project, parsed from text | ~ categories in @document.meta; no inline #tag index |
| Headless CLI | ✓ ls, search, cat, new, append, write, trash, restore | ✗ commands are :Neorg … inside Neovim |
| JSON output for scripts / agents | ✓ --json on every command | ✗ |
| Live reload on external edits | ✓ file watcher; dirty tabs keep their text | ~ Neovim's own autoread / checktime |
| Vim keys | ✓ vim or emacs keys (edtui) | ✓ native |
| Mouse support | ✓ click, double-click, right-click menus, drag | ✓ Neovim's mouse support |
| Sync | ~ any file sync: git, Syncthing, iCloud, Dropbox | ~ files; git or any file sync |
| Encryption | ~ encrypt the folder: FileVault, gocryptfs | ✗ |
| Mobile app | ✗ files sync to any mobile Markdown editor | ✗ a mobile app is on the roadmap, not built |
| Plugins | ✗ | ✓ everything is a module; core.*, external.* community modules |
| Open source | ✓ MIT, Rust | ✓ GPL-3.0, Lua |
✓ yes · ~ partial or via the file system · ✗ no
Choose Neorg if
- You want Neovim to be the entire environment: Norg files, journal, TODO states, calendar and presenter without leaving the editor.
- You prefer a format designed for a parser: Norg’s grammar is stricter and more regular than Markdown, and tree-sitter powers folding, concealing and text objects.
- You extend by writing Lua modules: Neorg’s module system is the product, and community
external.*modules plug into it. - You are fine with a young project and pinning versions.
Choose tnotes if
- You want Markdown, readable by every other tool, phone app and language model.
- You want
[[Title]]links, completion after[[, backlinks and rename rewriting today, not on a roadmap. - You want a CLI with
--jsonso scripts and agents can read and write the vault. - You want vim keys without owning a Neovim configuration: tnotes ships with an edtui vim mode and installs as one binary.
Using Neorg and tnotes together
There is no overlap on disk: Neorg writes .norg, tnotes lists only .md, and Pandoc has no Norg reader. The one bridge is Neorg’s exporter, which is one-way. Inside Neovim, export a workspace into a folder under a tnotes root:
:Neorg export directory ~/norg markdown ~/notes/from-norg
Then open the root:
tnotes ~/notes
The result is a snapshot. tnotes indexes only [[…]] links, so whatever the exporter emits for {:file:} links is text or a Markdown link to tnotes, not an edge in links / backlinks; @document.meta categories are not #tags. Edits in tnotes do not go back to .norg.
If you want both, split by kind rather than convert: Norg for the journal and task workflow inside Neovim, a tnotes root for reference notes that scripts and agents read with tnotes ls --json. Both are plain text in one git repository, and tnotes ignores the .norg files next to its Markdown.
FAQ
- ? Does Neorg support backlinks?
No. Links are one-directional Norg objects (
{* Heading},{:file:* Heading}). A Zettelkasten library that would track backlinks is listed on the roadmap as unstarted work.- ? Can I convert Neorg files to Markdown?
Yes, from inside Neovim:
:Neorg export to-file note.mdconverts the current buffer throughcore.export.markdown, and:Neorg export directory <dir> markdown [out-dir]converts a whole workspace. Pandoc cannot read.norg; the roadmap marks a Pandoc parser as stalled.- ? Does Neorg work with Markdown or Org files?
No. Neorg only understands
.norg. The roadmap mentions upgraders from.orgto.norgas a goal, and Markdown export exists, but there is no import path and no Markdown mode.
Sources
Neorg facts checked on 2026-09-22 against:
- Neorg README (Neovim 0.10+, luarocks install, GPL-3.0, 9.0.0 breaking changes)
- Neorg roadmap (Zettelkasten/backlinks, Pandoc, mobile app: unchecked)
- Neorg cheatsheet (link syntax)
- Neorg wiki: core.export (:Neorg export to-file / directory)