skip to content

compare / org-mode

tnotes vs Org mode

Emacs major mode for outlines, TODOs, agendas and literate documents in its own .org plain-text format.

tnotes

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

Org mode

editor plugin · Wherever Emacs runs: Linux, macOS, Windows, Android; terminal via emacs -nw · GPL-3.0-or-later (ships with Emacs) · Free

Org mode is an outliner first. A file is a tree of headlines; each headline can carry a TODO state, tags, a schedule, a deadline, a property drawer and a clock. The agenda collects those across every file you register and shows a day, a week or a custom query. Babel executes code blocks inside the document and captures the results, and the exporter produces HTML, LaTeX, ODT, Markdown and more from the same source. Org 9.8 is the current release, and the mode ships with Emacs, so there is nothing to install.

Linking in Org is precise rather than loose. [[*Heading]] targets a headline in the current file, [[file:projects.org::*Heading]] one in another file, [[id:UUID]] a headline by its ID property. Nothing in core Org matches a bare [[Note title]] against a folder of files, and nothing in core Org lists who links here. That is the gap org-roam fills: it indexes every node into an auxiliary database and shows backlinks in a side buffer.

The format is the decision. .org is not Markdown; the outline, the timestamps and the property drawers have no Markdown equivalent, which is why Org files stay in Emacs or in the Org-specific mobile apps. Pandoc reads and writes Org, so one-way conversion is a command, but round-tripping loses the parts that make Org worth using.

Feature comparison

FeaturetnotesOrg mode
Storage format✓ plain .md files, folders are directories✓ plain .org files; not Markdown
Runs in the terminal✓ TUI (ratatui) plus a headless CLI✓ emacs -nw runs the full mode in a terminal
[[Wikilinks]]✓ [[Title]] with completion; rewritten on rename~ [[*Heading]], [[file:notes.org::*Heading]], [[id:UUID]]; not title-based [[Note]]
Backlinks✓ overlay + backlinks in JSON~ not in Org itself; org-roam adds a backlinks buffer
#tags✓ #tag and nested #work/project, parsed from text✓ :work:urgent: on headlines, inherited down the outline, searchable in the agenda
Headless CLI✓ ls, search, cat, new, append, write, trash, restore~ emacs --batch -l script.el; you write the commands in Elisp
JSON output for scripts / agents✓ --json on every command~ nothing built in; external parsers (orgparse, orgize, hop) emit JSON
Live reload on external edits✓ file watcher; dirty tabs keep their text✓ auto-revert-mode / global-auto-revert-mode
Vim keys✓ vim or emacs keys (edtui)~ via the evil package; not part of Org
Mouse support✓ click, double-click, right-click menus, drag✓ Emacs mouse support, including in the terminal with xterm-mouse-mode
Sync~ any file sync: git, Syncthing, iCloud, Dropbox~ files; git, Syncthing, or any file sync
Encryption~ encrypt the folder: FileVault, gocryptfs✓ org-crypt encrypts entries tagged :crypt: with GnuPG
Mobile app✗ files sync to any mobile Markdown editor~ third-party: Orgzly Revived, Orgro, MobileOrg, organice, Emacs on Android
Plugins✗✓ Emacs packages: org-roam, org-contrib, hundreds more on MELPA
Open source✓ MIT, Rust✓ GPL-3.0-or-later, Emacs Lisp

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

Choose Org mode if

  • You want the agenda: scheduled and deadline items across files, clocking, and TODO state workflows in one view.
  • You write documents with executable code blocks (Babel) and export them to LaTeX, HTML or ODT.
  • You already use Emacs; Org is built in and every Emacs package composes with it.
  • You want entry-level encryption inside a file: org-crypt encrypts a headline’s body when you save.
  • Your notes need structure beyond headings: properties, columns, tables with formulas.

Choose tnotes if

  • You want Markdown files that every other editor, phone app and static site generator reads.
  • You need [[Title]] links with completion, backlinks and rename rewriting without configuring org-roam and a database.
  • You want a CLI with JSON output for scripts and agents instead of writing Elisp for emacs --batch.
  • You want a mouse-driven TUI that opens in under a second, not an Emacs configuration.

Using Org mode and tnotes together

There is no shared file format: tnotes lists only .md files and ignores everything else, and Org does not read Markdown. Two workable arrangements.

Keep Org for the agenda, tnotes for notes. Tasks with dates, clocks and TODO states stay in .org files; reference notes, meeting notes and anything you want to grep from a script live in a tnotes root. Both are plain text in the same git repository. Org’s file: links can point into the Markdown folder ([[file:~/notes/weekly-plan.md]]), and tnotes ignores the .org files next to it.

One-way export with Pandoc. Pandoc reads org and writes GitHub-flavoured Markdown; run it into a tnotes root:

mkdir -p ~/notes/from-org
for f in ~/org/*.org; do
  pandoc -f org -t gfm "$f" -o ~/notes/from-org/"$(basename "$f" .org)".md
done
tnotes ~/notes

The Markdown is a snapshot: edits made in tnotes do not flow back, [[*Heading]] links become ordinary text or Markdown links (tnotes only indexes [[…]]), and :tag: headline tags are not #tags. Treat the export as read-only material for search and for agents that need tnotes ls --json, and keep editing the .org originals in Emacs. If you want both directions, keep the two sets of notes separate rather than converting back and forth.

FAQ

? Does Org mode support backlinks?

Not on its own. Org has forward links ([[*Heading]], [[file:…]], [[id:…]]) and no index of incoming links. org-roam adds that: it stores every node and link in an auxiliary database and shows the backlinks of the current node in the Org-roam buffer.

? Can I use Org mode from the command line without opening Emacs?

Yes, with emacs --batch -l script.el: batch mode runs Elisp from a script, prints to stdout and exits. You write the script yourself; Org has no list or search subcommands. External parsers such as orgparse (Python), orgize (Rust) or hop (Babashka) read .org files without Emacs and can emit JSON.

? Can I convert Org files to Markdown?

Pandoc reads and writes Org (pandoc -f org -t gfm notes.org) and Org’s own exporter has a Markdown backend (ox-md). Headlines, lists, tables and code blocks convert well; timestamps, property drawers, TODO keywords and Babel results have no Markdown equivalent and come through as text or are dropped.

Sources

Org mode facts checked on 2026-09-22 against: