
Local-first outliner. Markdown is the source of truth. Sync that doesn't corrupt your tree when two devices edit offline.
Inspired by Roam Research and Logseq.
Tree CRDT sync (Kleppmann et al. 2022), per-device append-only op log, IDs in a sidecar so the .md you see is the .md you wrote.
# macOS / Linux via Homebrew (beta channel — every push to main)
brew tap avelino/outl https://github.com/avelino/outl
brew trust avelino/outl # one-time, third-party tap
brew install outl-beta # TUI/CLI/MCP
brew install --cask outl-desktop-beta # GUI
iOS beta on TestFlight: join here. Point the TUI at the same iCloud Drive container (<container>/Documents/) and both clients share a workspace.
outl init ~/notes # scaffold a workspace
outl --workspace ~/notes # opens the TUI on today's journal
Press ? for keymap, : for the command palette, Ctrl+P to fuzzy-jump.
outl import logseq ~/path/to/logseq-graph ~/notes
outl import roam ~/Downloads/backup.json ~/notes
The importer strips id:: lines, resolves ((uid)) block refs to page links, slugifies filenames, seeds the sidecars. Anything it can't resolve stays as ((unresolved:UID)) for manual triage.
The engineering decisions behind outl on avelino.run:
MIT.