Uso outliners há anos, experimentando Roam e Logseq. Ambos fornecem uma experiência de uso agradável, mas ambos apresentam problemas de sincronização. O outliner criado aqui é local-first, com o Markdown como a fonte de verdade.
Decisões Técnicas
Markdown Limpo, IDs fora do Arquivo
O arquivo.md que você vê é o mesmo que você escreveu. Os IDs dos blocos ficam em um sidecar, não espalhados pelo texto. Isso permite que você abra as notas usando grep, awk ou qualquer outro editor sem precisar parsear um formato proprietário.
Referência de Bloco e Embed
As referências de bloco e embed são feitas usando ((blk-XXXXXX)) e!((blk-XXXXXX)), com handles curtos resolvidos pelo sidecar.
Sincronização
O outliner usa algoritmos de movimento de Kleppmann et al. (2022) para resolver conflitos de movimento concorrente. Cada dispositivo tem um log de operações (op log) que é append-only e ordenado por HLC (timestamp, actor). Os movimentos, edições, alterações de propriedades e criações são registrados no log. A árvore materializada é derivada do log. Se o log corromper, basta repetir o log. Movimentos concorrentes convergem pela ordem das operações, e um movimento que criaria ciclo vira no-op de forma determinística. A edição de texto dentro do bloco é feita usando Yjs/Yrs.
Interface de Usuário
O outliner tem uma interface de usuário (TUI) e uma interface de linha de comando (CLI). Além disso, há uma interface de múltiplos controladores (MCP) que expõe o workspace para Claude Desktop, Cursor, Zed e qualquer outro host MCP. O outliner também tem uma versão para desktop (Tauri) e para mobile (iOS em beta e APK de Android em cada release).
Importador
O outliner tem um importador para Obsidian, que detecta automaticamente o formato e traduz as referências de bloco e embed.
Limitações e Arestas
O projeto é em Rust, com licença MIT. Algumas arestas que precisam ser resolvidas incluem o Homebrew, o dmg do desktop e o APK de Android. Não há uma graph view, e o outliner não substitui Notion. O projeto tem um tutorial de 15 minutos e um guia de getting started completo.
Conclusão
O outliner é uma alternativa local-first para outliners populares, combinando funcionalidades sem suas limitações. Ele usa Markdown como fonte de verdade e resolvendo conflitos de movimento concorrente usando algoritmos de movimento de Kleppmann et al. (2022). O projeto é em Rust, licenciado sob MIT, e tem um guia de desenvolvimento e contribuição para ajudar os desenvolvedores a começar.
Recursos Futuros
O projeto está em fase de beta, e algumas arestas precisam ser resolvidas. No entanto, o feedback de usuários que vieram do Logseq ou do Obsidian é muito útil para aprimorar o projeto.