skip to content

compare / vimwiki

tnotes vs Vimwiki

A personal wiki inside Vim: linked text files with their own syntax, a diary, todo lists and HTML export, for people who already live in Vim.

tnotes

terminal app · macOS, Linux · MIT · free · v1.3.0

Vimwiki

editor plugin · Anywhere Vim 7.3+ or Neovim runs (Linux, macOS, Windows, BSD) · MIT · Free

Vimwiki has been the Vim answer to a personal wiki since 2008. You register one or more wikis in g:vimwiki_list, press <Leader>ww to open the index, put the cursor on a word and press Enter to turn it into a [[link]], press Enter again to create and open the page, Backspace to come back. Pages are plain text with one of three syntaxes (its own, Markdown, MediaWiki); the native syntax gets the full feature set including :Vimwiki2HTML export, Markdown is second-best supported and has no built-in HTML converter.

Beyond links it has a diary (<Leader>w<Leader>w for today), checkbox lists with partial-completion states ([.], [o], [X]), tables that align themselves, folding, :VimwikiBacklinks, :VimwikiRenameFile that rewrites links, and :tag-one:tag-two: tags with omni-completion and :VimwikiSearchTags. Development is slow and maintainers few, which the README says openly; the plugin is stable rather than moving.

tnotes covers the link-and-tag core with a different interface: a two-pane TUI with mouse support, #tags parsed from the text, link completion after [[, backlinks in an overlay, and a CLI that returns JSON. It edits with edtui’s vim keys, which is a subset of Vim, not Vim. Vimwiki users who try it usually keep both on the same directory.

Feature comparison

FeaturetnotesVimwiki
Storage format✓ plain .md files, folders are directories✓ .wiki files by default; .md with syntax = 'markdown', ext = '.md'
Runs in the terminal✓ TUI (ratatui) plus a headless CLI✓ it is Vim
[[Wikilinks]]✓ [[Title]] with completion; rewritten on rename✓ [[link]], [[link|description]], [[dir/page]], [[page#anchor]]
Backlinks✓ overlay + backlinks in JSON✓ :VimwikiBacklinks searches the wiki for links to the current page
#tags✓ #tag and nested #work/project, parsed from text~ :tag: syntax, not #tag; needs a .tags metadata file (:VimwikiRebuildTags)
Headless CLI✓ ls, search, cat, new, append, write, trash, restore✗ Vim commands only; scriptable with vim -c or a headless nvim
JSON output for scripts / agents✓ --json on every command✗
Live reload on external edits✓ file watcher; dirty tabs keep their text✗ Vim's own autoread / :checktime
Vim keys✓ vim or emacs keys (edtui)✓
Mouse support✓ click, double-click, right-click menus, drag~ whatever Vim gives you with set mouse=a
Sync~ any file sync: git, Syncthing, iCloud, Dropbox~ plain files: git, Syncthing, anything
Encryption~ encrypt the folder: FileVault, gocryptfs~ encrypt the directory yourself
Mobile app✗ files sync to any mobile Markdown editor✗ files sync to any mobile editor
Plugins✗~ no plugin API; it is itself a Vim plugin, extend with Vimscript
Open source✓ MIT, Rust✓ MIT, Vimscript

✓ yes · ~ partial or via the file system · ✗ no

Choose Vimwiki if

  • You want the full Vim editing model, your own mappings, and every Vim plugin you already use; tnotes’ vim keys are edtui’s subset (insert, normal, u, ctrl+r, ., /), not Vim.
  • Native-syntax features matter: HTML export, self-aligning tables, [.]/[o] partial checkboxes, header-level folding.
  • A diary (<Leader>w<Leader>w for today, <Leader>w<Leader>i to regenerate the index) and tag search across the wiki, all from Vim’s command line.
  • You need it on Windows, BSD, or a server where you can install a Vim plugin but not a new binary.

Choose tnotes if

  • You want a headless interface for scripts and agents: tnotes search --json, cat, new, append, write have no Vimwiki counterpart.
  • You prefer a sidebar, tabs, mouse clicks and right-click menus over :VimwikiUISelect and the location list.
  • You want #tags in the text (including nested #work/project) and [[Title]] links resolved by title, without a .tags index to rebuild.
  • Live reload when another device or a script changes a file, with conflict copies instead of Vim’s swap-file prompt.

Using Vimwiki and tnotes together

Both tools edit plain Markdown, so they can share a directory. Configure a Markdown wiki with the .md extension and restrict Vimwiki to registered paths so it does not claim every Markdown file on the system:

let g:vimwiki_list = [{'path': '~/Documents/notes/', 'syntax': 'markdown', 'ext': '.md'}]
let g:vimwiki_global_ext = 0
tnotes ~/Documents/notes          # same directory as a tnotes root
vim -c VimwikiIndex               # or <Leader>ww inside Vim

How the two overlap on the same files:

FAQ

? Can Vimwiki use Markdown files?

Yes: set 'syntax': 'markdown', 'ext': '.md' on the wiki in g:vimwiki_list. [[wikilinks]], the diary, lists and tags work; :Vimwiki2HTML does not, since only the native syntax ships a converter (see :h vimwiki-option-custom_wiki2html). Set g:vimwiki_global_ext = 0 or Vimwiki treats every .md on the machine as a wiki page.

? Does Vimwiki have backlinks?

:VimwikiBacklinks (also :VWB) searches all files of the current wiki for links to the current page and lists them; it does not maintain an index. tnotes keeps backlinks live in an overlay (alt+enter on a line without a link) and in the backlinks field of tnotes ls --json.

? Is there a CLI for Vimwiki notes?

No. Vimwiki is Vim commands and mappings; the closest is vim -c or a headless Neovim running Vimscript. Because the notes are plain files, a terminal tool that understands [[links]] can index the same directory: tnotes ls --json --dir ~/vimwiki returns id, title, tags, links and backlinks per note.

Sources

Vimwiki facts checked on 2026-09-22 against: