Tatami is a desktop GUI client for Jujutsu (jj). It’s built with Tauri v2 + React, with a Rust backend that integrates jj-lib.
- Revset-driven revision graph (lane assignment, trunk detection, related-commit dimming)
- File diff viewer (hunks/lines, syntax highlighting, line numbers)
- Keyboard-first navigation (vim-ish movement + command palette)
- Live updates via filesystem watching
- Persists projects + UI layout state in SQLite (Tauri app data dir)
apps/desktop/— Tauri + React desktop appapps/desktop/src/— frontend (TanStack Router/Query/DB, effect-atom, shadcn/ui)apps/desktop/src-tauri/— Rust backend + Tauri commandsassets/— screenshots and other repo assets
Prereqs: bun, Rust toolchain, Tauri system deps, and jj.
bun install
bun run tauri devBrowser-only UI development is supported via mocks in apps/desktop/src/mocks/.
Keep dev commands short and prefer putting release notes in commit bodies.
- Release notes: add a
## RN:section to commit bodies (optionalRN-ID:line for stable dedupe)
# Frontend-only (Vite)
bun run dev
# Frontend checks (from apps/desktop/)
cd apps/desktop
bun run typecheck
bun run lint
bun run formatPublishing is automated via GitHub Actions in .github/workflows/release.yml.
- Trigger: every push to
main(plusworkflow_dispatch) - Artifacts: macOS-only build for now, published to a GitHub prerelease (
nightly-<run_number>tags) - Concurrency: new pushes cancel in-progress builds
- Release notes: collected from commit bodies under a
## RN:heading; trailers are ignored; useRN-ID:for stable dedupe whenjjhistory is rewritten
- Frontend calls Tauri commands via
apps/desktop/src/tauri-commands.ts - Tauri commands live in
apps/desktop/src-tauri/src/lib.rs - Backend uses
jj-libfor repo access and emits repo change events for live refresh
This repo uses Fiberplane’s fp CLI for local-first issue tracking (configured in .fp/config.toml, prefix TAT).
fp issue list
fp tree
fp context TAT-sfsbCLAUDE.md— architecture notes + useful dev commandsapps/desktop/README.md— app-specific notes
MIT. See LICENSE.
