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
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
| Feature | tnotes | Vimwiki |
|---|---|---|
| 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>wfor today,<Leader>w<Leader>ito 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,writehave no Vimwiki counterpart. - You prefer a sidebar, tabs, mouse clicks and right-click menus over
:VimwikiUISelectand the location list. - You want
#tagsin the text (including nested#work/project) and[[Title]]links resolved by title, without a.tagsindex 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:
[[link]]is the same characters in both. Vimwiki resolves[[Weekly plan]]to the fileWeekly plan.mdrelative to the current page; tnotes resolves by note title (first line, case-insensitive), then by file stem, and names new files as a slug of the title (# Weekly planbecomesweekly-plan.md). Links that both tools follow are the ones written as the file stem:[[weekly-plan]]. Links by title work in tnotes only, and following one in Vimwiki creates a second file.[[link|description]]: Vimwiki followslinkand showsdescription. tnotes documents[[Note title]]only; whether it strips the|descriptionpart when resolving is not documented, so treat aliased links as Vimwiki-only until you have tested it.- Renames:
:VimwikiRenameFilerewrites links across the wiki; tnotes rewrites[[old title]]when a note’s first line changes. Each tool’s rename is visible to the other as ordinary file changes. - Tags: Vimwiki’s
:tag-one:tag-two:and tnotes’#tagdo not see each other. The.tagsmetadata file Vimwiki writes is dot-prefixed, so tnotes ignores it. diary/shows up as a folder in tnotes. tnotes keeps trashed notes under.Trash/in the root; Vimwiki’s search and backlink commands may still scan that directory.- tnotes reloads a clean tab when Vim writes the file; Vim needs
set autoreador:eto pick up a tnotes write or atnotes append. Vim’s swap file will prompt if both edit the same note at once.
FAQ
- ? Can Vimwiki use Markdown files?
Yes: set
'syntax': 'markdown', 'ext': '.md'on the wiki ing:vimwiki_list.[[wikilinks]], the diary, lists and tags work;:Vimwiki2HTMLdoes not, since only the native syntax ships a converter (see:h vimwiki-option-custom_wiki2html). Setg:vimwiki_global_ext = 0or Vimwiki treats every.mdon 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+enteron a line without a link) and in thebacklinksfield oftnotes ls --json.- ? Is there a CLI for Vimwiki notes?
No. Vimwiki is Vim commands and mappings; the closest is
vim -cor 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 ~/vimwikireturns id, title, tags, links and backlinks per note.
Sources
Vimwiki facts checked on 2026-09-22 against:
- vimwiki README (syntaxes, markdown setup, license)
- vimwiki help: links, tags, backlinks, commands (doc/vimwiki.txt)