---
title: "tnotes vs Logseq · tnotes"
description: "Logseq or tnotes for Markdown notes? Outliner-style knowledge base with daily journals, block references and a plugin API; file graphs are Markdown or Org files"
canonical: https://tnotes.app/compare/tnotes-vs-logseq
---

[compare](/compare) / logseq

# tnotes vs Logseq

Outliner-style knowledge base with daily journals, block references and a plugin API; file graphs are Markdown or Org files, the newer DB graphs are SQLite.

tnotes

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

[Logseq](https://logseq.com)

desktop app · Linux, macOS, Windows (Electron); iOS, Android; web app for DB graphs · AGPL-3.0 · Free. Logseq Sync (beta) requires an Open Collective contribution ($5 or $15/month).

Logseq is an outliner: every line is a block with a bullet, blocks nest, and any block can be referenced from anywhere by its `((uuid))`. Pages are Markdown or Org files in a graph directory (`pages/`, `journals/`, `assets/`, `logseq/config.edn`), and the app rebuilds a Datascript database from them on load. Linked References under each page, `#tag` as a page reference, `key:: value` properties on any block, and Datalog queries are what people stay for.

The project is mid-transition. The “DB version” replaces file graphs with a SQLite database, adds a real-time collaboration sync (RTC, alpha), a new mobile app, and a Node CLI (`logseq graph list`, `logseq list page --output json`, `logseq sync start`). The README calls the DB version beta and warns that data loss is possible. File graphs still work in the stable release, and the file-graph documentation at docs.logseq.com is the part that matters for a plain-text workflow.

tnotes is the opposite shape: no outliner, no block identities, no queries. A note is a Markdown file whose first line is its title; links resolve by title; the TUI and the `tnotes` CLI are the whole interface. If your notes are Logseq-shaped (bullets everywhere, block refs, properties) tnotes will show them but not understand them. If they are documents with headings and `[[links]]`, both tools read the same files.

## Feature comparison

| Feature | tnotes | Logseq |
| --- | --- | --- |
| Storage format | ✓ plain .md files, folders are directories | ~ file graphs: .md/.org in pages/ and journals/; DB graphs (beta): SQLite |
| Runs in the terminal | ✓ TUI (ratatui) plus a headless CLI | ✗ Electron desktop app; the new Node CLI targets DB graphs only |
| \[\[Wikilinks\]\] | ✓ \[\[Title\]\] with completion; rewritten on rename | ✓ \[\[page\]\] with autocompletion; ((uuid)) block refs |
| Backlinks | ✓ overlay + `backlinks` in JSON | ✓ Linked References and Unlinked References per page |
| #tags | ✓ #tag and nested #work/project, parsed from text | ✓ #tag is a page reference; tags:: page property |
| Headless CLI | ✓ ls, search, cat, new, append, write, trash, restore | ~ logseq CLI (Node) for DB graphs: list, query, sync; nothing for file graphs |
| JSON output for scripts / agents | ✓ --json on every command | ~ CLI --output json, DB graphs only |
| Live reload on external edits | ✓ file watcher; dirty tabs keep their text | ~ desktop watches the graph; a conflicting external edit prompts to reload |
| Vim keys | ✓ vim or emacs keys (edtui) | ~ custom :shortcuts in config.edn; community vim-shortcuts plugin |
| Mouse support | ✓ click, double-click, right-click menus, drag | ✓ GUI: drag blocks, sidebar, whiteboards |
| Sync | ~ any file sync: git, Syncthing, iCloud, Dropbox | ~ any file sync for file graphs; Logseq Sync (paid beta, E2EE); RTC alpha for DB graphs |
| Encryption | ~ encrypt the folder: FileVault, gocryptfs | ~ Logseq Sync encrypts with age; local graph is plain files |
| Mobile app | ✗ files sync to any mobile Markdown editor | ✓ iOS and Android; DB-graph mobile app in alpha |
| Plugins | ✗ | ✓ plugin API, marketplace, themes |
| Open source | ✓ MIT, Rust | ✓ AGPL-3.0, ClojureScript |

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

## Choose Logseq if

-   You think in outlines and block references, not documents. Nothing in tnotes addresses a block.
-   Daily journals, `TODO`/`DONE` task states, scheduled and deadline dates, and Datalog queries over properties are the workflow.
-   You want a plugin ecosystem, PDF annotation, whiteboards, and mobile apps that read the same graph.
-   Logseq Sync’s end-to-end encryption (file names included) fits your threat model better than syncing a folder yourself.

## Choose tnotes if

-   You want notes that any Markdown tool reads without an outliner’s `-` on every line and `id::` lines under referenced blocks.
-   You need a headless interface today: `tnotes ls --json`, `search`, `cat`, `new`, `append`, `write` work on a plain folder, not a DB graph, and a running TUI picks the changes up.
-   You work over SSH or in a terminal multiplexer and want the notes app in the same window as the shell.
-   A single static binary (Homebrew, cargo, or a tarball) instead of an Electron app; no beta storage format to migrate through.

## Using Logseq and tnotes together

A Logseq **file graph** is a directory of Markdown, so it can be a tnotes root. `pages/` and `journals/` show up as folders; `assets/` has no `.md` files and is empty in the tree.

```
tnotes ~/graphs/work                  # add the graph as a root
tnotes ls --folder work/journals --json | jq '.[0]'
tnotes search "retro" --dir ~/graphs/work
```

What tnotes does with Logseq’s conventions:

-   Block properties (`key:: value`), the `id:: <uuid>` line Logseq writes under any block that is referenced, `collapsed:: true`, and `((uuid))` block references are plain text in tnotes. They are highlighted as list items and left alone.
-   Logseq pages rarely start with a heading; the first line is usually `-` or a property. tnotes uses the first line as the title and **renames the file when that line changes**. Do not edit the first line of a Logseq page in tnotes unless you want the file renamed. Reading, searching and appending are safe.
-   `[[Page Title]]` resolves in both tools when the file stem matches the title. Namespaced pages (`[[term/backlink]]` stored as `term___backlink.md`) and journal links (`[[Sep 22nd, 2026]]` for `2026_09_22.md`) resolve in Logseq only.
-   `#tag` is a page reference in Logseq and a filter in tnotes; nested `#work/project` is a namespace in Logseq and a nested tag in tnotes. Both read the same characters.
-   Logseq’s `logseq/` directory is not dot-prefixed, so any `.md` it contains (it keeps backups under `logseq/bak/`) is listed as a note. `.git`, `.stfolder` and other dot-entries are ignored.
-   Logseq detects external writes; when it has unsaved in-memory changes to the same file it prompts about the file being modified on disk. Save in Logseq before appending with `tnotes append`, or keep one writer per file.

DB graphs are SQLite and have no `.md` files on disk; there is nothing for tnotes to open. Use `logseq graph export --type edn` for those, or keep a file graph.

## FAQ

? Can I open a Logseq graph in a terminal?

Logseq has no TUI. Its Node CLI (`logseq`) works only against DB graphs (SQLite). For a file graph, point a terminal Markdown tool at the directory: `tnotes ~/graphs/work` lists `pages/` and `journals/` as folders and searches their text. Outliner semantics (block refs, properties, queries) are not interpreted.

? Does Logseq store notes as Markdown files?

File graphs do: one `.md` (or `.org`) per page under `pages/`, one per day under `journals/`, plus `logseq/config.edn`. Every block is a `-` bullet and Logseq adds `id::` and other `key:: value` property lines as needed. DB graphs, the beta default in the DB version, store the graph in SQLite; export to EDN or SQLite with the CLI.

? Is Logseq Sync end-to-end encrypted?

Yes. Per the Logseq docs, each synced graph is encrypted with a password using age; file contents and file names are encrypted before they reach AWS. It is a beta feature available to active Open Collective contributors, and Logseq advises against combining it with iCloud, Syncthing or Dropbox on the same graph.

## Sources

Logseq facts checked on 2026-09-22 against:

-   [logseq/logseq README (DB version, plugin API, CLI)](https://github.com/logseq/logseq)
-   [Logseq CLI (Node) docs](https://github.com/logseq/logseq/blob/master/docs/cli/logseq-cli.md)
-   [Logseq docs: Logseq Sync](https://github.com/logseq/docs/blob/master/pages/Logseq%20Sync.md)
-   [Logseq docs: Built-in Properties (id, collapsed)](https://github.com/logseq/docs/blob/master/pages/Built-in%20Properties.md)

## Other comparisons

-   [tnotes vs Apple Notes](/compare/tnotes-vs-apple-notes)
-   [tnotes vs Dendron](/compare/tnotes-vs-dendron)
-   [tnotes vs Joplin](/compare/tnotes-vs-joplin)
-   [tnotes vs jrnl](/compare/tnotes-vs-jrnl)
-   [tnotes vs nb](/compare/tnotes-vs-nb)
-   [tnotes vs Neorg](/compare/tnotes-vs-neorg)
