alternative · 01

a Logseq
alternative,
honestly.

A privacy-first, open-source platform for knowledge management and collaboration.

license · AGPL-3.0 · runtime · Electron desktop, mobile apps
credit where credit is due

what Logseq got right.

We're not here to bash. Logseq earned its users by nailing things outl stands on the shoulders of.

  • Files live on your disk as markdown. Local-first by default.
  • Open source under AGPL-3.0 — you can read and contribute.
  • Outliner UX comparable to Roam with backlinks, daily journal, queries.
  • A real plugin ecosystem with a marketplace.
where it breaks

where it breaks for an outliner power-user.

01

Your `.md` is polluted with UUIDs.

Logseq writes id:: 6601a2c1-... into every block of your file. Open it in VS Code, cat, mdbook, pandoc, hugo — it's full of metadata garbage that you didn't write. git diff shows UUID lines shifting around when you reorder a single bullet.

02

Sync is paid and uses file-rsync semantics.

Logseq Sync is a Pro-tier subscription. Worse, it's not a real merge algorithm — it's a file-flavored rsync. When two devices write the same file, the newer one wins. Same loss as Roam, just with the illusion of local files.

03

The DB version split the community.

Logseq's pivot to a database backend (instead of markdown files) was announced years ago and shipped half-broken for over a year. File-based users are stuck wondering if their format is still supported. The roadmap is in flux.

04

Mobile experience is famously fragile.

Years of GitHub issues complaining about sync drops, performance and missing features compared to desktop. The codebase being Electron-on-mobile via Capacitor doesn't help.

the scenario Logseq loses

you `git diff` a single-block move.

with logseq

You open pages/projects.md in VS Code, drag a bullet from the bottom to the top, save. git diff should show 1 line moved. Instead it shows ~12 lines changed: the id:: UUID lines under each affected block shift indentation, the collapsed:: flags re-emit, an HTML comment appears. Your version history is unreadable. Multiply by 50 edits per day.

with outl

outl's .md never contains UUIDs. Block IDs live in a separate .foo.outl JSON sidecar. git diff shows what you actually changed — nothing else.

head to head

Logseq vs outl

feature Logseq outl
open source AGPL-3.0 MIT
ships as a native binary ✕ electron ✓ rust
clean markdown (no UUIDs)
tree-CRDT sync (provably correct) ✓ algorithm · sync transport phase 2
code blocks that execute (5 langs) limited ✓ python, lisp, js, lua, rust
TUI / terminal editor ✓ vim keys + slash commands
migrating today

coming from Logseq?
one command.

import
$ outl import logseq ~/logseq-graph ~/notes