Project
Roadmap
Roadmap
Six phases. Each one ends with something usable standalone. If the next phase stalls, the previous one still delivers value.
Phase 0 — Setup
Day zero. Foundation only.
- Cargo workspace with all phase-1 crates linked.
- LICENSE (MIT, single-license).
- README direct and not corporate.
- CI: cargo test + clippy + fmt on PR.
-
.claude/infrastructure (agents, hooks, commands, settings). - CLAUDE.md root + per-crate.
- docs/: architecture, crdt, markdown-format, storage, roadmap.
- Reserve
outl,outl-core,outl-md,outl-cli,outl-tuion crates.io as0.0.1placeholder. - Reserve
outlon npm to prevent typosquatting. - Issues #1–#4 opened.
Phase 1 — Day-zero usable
The goal: Avelino replaces part of his Roam usage with outl on a single device. Edit in VS Code or in the TUI, doesn’t matter. Journal works.
outl-core
NodeId,ActorId,HLC, fractional indexing types.Openum with all 4 variants andold_*fields.OpLog(append-only, HLC-ordered).tree.rs:do_op/undo_op/apply_op/creates_cycle.Storagetrait +SqliteStorageimplementation.- Domain models:
Workspace,Page,Journal,Block,Property,Tag. - 100% coverage on the four CRDT functions.
- Test battery passing:
convergence,cycle,cycle_chain,concurrent_edit_move,concurrent_delete_edit,late_op,idempotency,fractional_index,large_log,property_based.
outl-md
- Parse
.md(clean, no IDs) → AST. - Render AST →
.md(clean). - Read/write
.outlsidecar (JSON). - 3-level matching algorithm.
- Diff (old AST + new AST) → minimal
Opsequence. - Tests:
roundtrip,external_edit,duplicate_block,identical_blocks_swap,heavy_edit.
outl-cli
outl init <path>— scaffold workspace.outl serve— run file watcher, debounce 200ms.outl doctor— integrity check.outl reconcile— delegate to TUI for orphan resolution.outl export— placeholder for phase 4.
outl-tui
- Journal of today opens by default.
- Sidebar of pages.
- Navigation between journals (
[,],t,g j). - Tag panel.
- Outline panel (read-only first pass).
- Backlinks panel.
- Command palette (basic).
- Page properties visible and editable.
- Visual distinction page vs tag (different colors).
Acceptance criteria
-
outl init ~/notescreates a full workspace. -
outl serveruns in the background. -
outl-tuiopens to today’s journal. - I can create a block with
[[refs]],#tags,priority:: high. - I can open the
.mdin VS Code — clean, no visible IDs. - I can edit, save, TUI reflects the change.
- I can duplicate a block in VS Code — reconcile assigns a new ULID to the duplicate.
- I can navigate
[/]between journals. - I can kill the process and reopen — state preserved.
-
outl doctorreports integrity OK.
Phase 2 — P2P sync (1 → N devices)
outl-synccrate with iroh transport.- Discovery via shareable ticket (
outl sharegenerates,outl join <ticket>adds a peer). - Handshake and incremental op exchange using
last_ts_per_actor. - E2E tests with 2–3 instances exchanging ops over loopback iroh.
- Encryption enabled by default (iroh QUIC).
- Document trust model: who can send me ops, how to revoke.
Phase 3 — Queries and refinement
{{query: ...}}inline with an outl-specific DSL.- Built-in aggregations: count, group-by tag, filter by property.
- Journal-specific queries: “blocks from the last 7 days”, “all tasks marked priority:: high”.
- Backlinks page generated on-demand.
- TUI commands to save and reuse queries.
Phase 4 — TUI polish + plugins
- Themes (config in
.outl/config.toml). - Export to Hugo (pipeline targeting avelino.run).
- Minimal plugin system using
rhai:- Plugins consume the op stream.
- Can register new query types.
- Can register render hooks for the TUI.
- Plugin discovery from
.outl/plugins/.
Phase 5 — Desktop (Tauri 2)
- Tauri shell over
outl-core+outl-md. - Block-level rich editing with live preview.
- Graph view (visual backlinks).
- macOS + Linux + Windows builds.
Phase 6 — Mobile
uniffiFFI surface overoutl-core+outl-md.- SwiftUI app (iOS, native).
- Compose app (Android, native).
- Sync via iroh (same protocol as desktop).
Issues open since day zero
These are tracked publicly to signal intent and invite contributions:
- #1 — Add ChronDbStorage backend
(labels:
roadmap,storage,help wanted) - #2 — Tauri desktop app
(labels:
roadmap,phase-5) - #3 — Mobile via uniffi
(labels:
roadmap,phase-6) - #4 — Plugin system with rhai
(labels:
roadmap,phase-4)