Fast, minimal, keyboard-first Git client for power users
Built with Tauri + React + Rust (libgit2). Single-repo focus, <100ms graph rendering, professional UI.
pnpm check-envThis validates all prerequisites (Node, Rust, platform dependencies).
pnpm installInstalls frontend (React) and Tauri CLI. Rust dependencies build on first run.
pnpm devOpens Tauri window with React dev server (hot reload enabled).
# Run full dev environment (Tauri + React with HMR)
pnpm dev
# Run only React dev server (for UI-only work)
pnpm dev:ui
# Type checking
pnpm typecheck
# Linting (ESLint + Clippy)
pnpm lint
# Formatting (Prettier + rustfmt)
pnpm format
# Testing
pnpm test # Run all tests (Rust + React)
pnpm test:e2e # Run Playwright E2E tests
# Build production bundle
pnpm build # Builds UI + native app (DMG/MSI/AppImage)git-frisky/
├── apps/
│ ├── ui/ # React frontend (Vite + TypeScript)
│ │ ├── src/
│ │ │ ├── components/ # UI components (layout, graph, diff, etc.)
│ │ │ ├── stores/ # Zustand state (repo, diff, graph, ui)
│ │ │ ├── lib/ # Utilities (ipc, format, keyboard)
│ │ │ └── styles/ # Tailwind CSS
│ │ └── package.json
│ │
│ └── desktop/
│ └── src-tauri/ # Tauri backend (Rust)
│ ├── src/
│ │ ├── api/ # IPC commands (repo, graph, diff, etc.)
│ │ ├── domain/ # Domain types (Commit, Branch, etc.)
│ │ └── util/ # Utilities (errors, git_ext, io)
│ └── Cargo.toml
│
├── packages/
│ ├── shared-types/ # TypeScript types (mirrors Rust types)
│ └── parsers/ # Diff/graph utilities
│
├── docs/
│ ├── decisions/ # Architecture Decision Records (ADRs)
│ └── screenshots/ # UI screenshots
- Frontend: React 19 + TypeScript + Tailwind + shadcn/ui + Zustand + React Query
- Backend: Rust + Tauri v2 + libgit2 (git2 crate) + notify (file watching)
- IPC: Tauri commands (request/response) + events (streaming progress)
- Performance: Virtualized rendering (react-virtual), Rust for heavy git ops, <100ms targets
Key Design Decisions:
- Single-repo model (like Sublime Merge, not multi-tab)
- libgit2 over shell git (speed, control)
- Keyboard-first UX (command palette, shortcuts)
- Minimal UI (information-dense without clutter)
- App launch: <2s
- Status refresh: <50ms (1000 files)
- Commit graph render: <100ms (1000 commits)
- Diff display: <100ms (1000 lines)
Before committing:
pnpm format # Format code
pnpm lint # Check lint (0 warnings required)
pnpm typecheck # TypeScript check
pnpm test # Run tests (>70% Rust, >60% frontend coverage)Testing Strategy:
- Unit tests: Rust (cargo test), React (Vitest)
- Integration: Playwright E2E
Code Review Checklist:
- Meets performance targets
- Tests included (unit + integration)
- Documentation updated
- CHANGELOG.md updated
MIT © Corey Floyd