Developer-friendly note-taking + time-tracking, with all data stored as plain git repositories. Runs standalone on the web and the desktop (Tauri). Single-user, local-first, no account, no server.
rhizome + log — a root-network for your notes, a log for your hours.
- Your data is just git. Notes and time entries live in plain, hand-editable, version-controlled files inside two git repos in a workspace folder. Native
giton desktop;isomorphic-gitin the browser. No SQLite, no opaque blobs — open the folder, read the Markdown, rungit log. - Notes are a graph. Every note is an independent Markdown file. You connect notes with directed "extends" edges (note B extends from note A), fork a note into an independent copy that remembers its origin, and grow a self-referential graph — created and deleted at will. See ADR 0005.
- A real Markdown editor. CodeMirror 6 with Obsidian-style inline live preview; raw Markdown stays the source of truth, so diffs stay clean.
[[wiki-links]]and[text](id)links resolve across notes, with backlinks. - Time tracking that respects reality. Title + tags, 0..N concurrent timers, day/week/month dashboards with both summed and wall-clock (union) totals. Running timers are never committed; only completed entries are.
- Extensible, safely. Opt-in hooks run your own JavaScript on app events (
timer.stopped,note.linked, …) inside a QuickJS-in-WASM capability sandbox — no ambient network/filesystem, allowlistedfetch, writes confined to one directory. See ADR 0004.
See the User Guide for how to actually use it.
pnpm install
pnpm dev # Vite dev server at http://localhost:1420On first launch, pick a workspace:
- Local folder (File System Access API, Chromium-based browsers) — your real folder on disk.
- Browser storage (IndexedDB via lightning-fs) — works everywhere, stays in the browser.
Requires Rust and a native git on PATH (Rhizolog shells out to it; it detects absence and shows a clear error).
pnpm install
pnpm tauri dev # full desktop shell + ViteOn desktop you pick a real folder anywhere on your machine; native git powers the repos and a filesystem watcher live-reloads external edits (git pull, manual edits, etc.).
pnpm build # web production build → dist/
pnpm tauri build # desktop installers (Windows: MSI + NSIS)Deploy the web build by serving dist/ as a static SPA (all routes fall back to index.html).
pnpm typecheck # tsc --noEmit
pnpm lint # eslint
pnpm format # prettier --write
pnpm test # vitest (unit/integration, jsdom + node)
cargo test # (run inside src-tauri/) native git module testsEvery feature talks to a Repo interface, never to git directly. There are exactly two implementations — TauriRepo (Rust → native git) and WebRepo (isomorphic-git over a File System Access / lightning-fs / node-fs adapter). Platform-agnostic domain services (TimeService, NotesService, HooksService) are constructed with a Repo; reactive SolidJS stores wrap them; the app shell (Layout) owns the stores so the sidebar persists across routes. Two independent git repos live under one workspace: <workspace>/notes/ and <workspace>/time/. Cross-backend parity is enforced by a shared scenario suite (Vitest for web, cargo test for native). For the full picture see CLAUDE.md, IMPLEMENTATION_PLAN.md, and the ADRs.
SolidJS · TypeScript (strict) · Vite · TailwindCSS v4 + DaisyUI v5 · CodeMirror 6 · isomorphic-git / native git · Tauri 2 (Rust, edition 2024) · QuickJS-in-WASM (hooks) · Vitest · pnpm.
Notes, time tracking, the note graph, and sandboxed hooks are implemented and exercised on the web backend (57 Vitest tests + native cargo test git scenarios). Remote sync, full-text search, mobile, and reporting/export are explicitly out of the current scope (designed-for-later — see the plan).
GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later).