Skip to content

grindshell/rhizolog

Repository files navigation

Rhizolog

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.

Why it's different

  • 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 git on desktop; isomorphic-git in the browser. No SQLite, no opaque blobs — open the folder, read the Markdown, run git 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, allowlisted fetch, writes confined to one directory. See ADR 0004.

See the User Guide for how to actually use it.

Quick start (web)

pnpm install
pnpm dev            # Vite dev server at http://localhost:1420

On 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.

Quick start (desktop)

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 + Vite

On 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.).

Build & package

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).

Develop

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 tests

Architecture in one paragraph

Every 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.

Tech stack

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.

Status

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).

License

GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later).

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages