A desktop diff viewer for git repositories. View any diff between refs, review changes, and prepare commits. Built with Tauri (Rust + libgit2) and Svelte.
Staged lets you view diffs between any two git refs—branches, commits, tags, or the working tree. Select a base and head ref, browse changed files, and see side-by-side diffs with syntax highlighting.
Key concepts:
main..HEAD, HEAD..@ for uncommitted changes)@ = working tree: Use @ as a ref to include uncommitted changesInstall with a single command:
curl -fsSL https://raw.githubusercontent.com/baxen/staged/main/install.sh | bash
The installer will:
/Applications/staged.appNote: This will build from source, which takes a few minutes. Requires git to be installed.
This project uses Hermit to manage development tools (Rust, Node.js, just). Hermit ensures everyone uses the same tool versions without global installs.
First time setup:
source bin/activate-hermit # Activate hermit environment
rustup default stable # Set the default Rust toolchain
After activation, cargo, node, npm, and just are all available from the hermit-managed versions.
just install # Install npm + cargo dependencies
just dev # Run in development mode (hot-reload)
just dev # Run app in dev mode with hot-reload
just build # Build for production
just frontend # Run just the frontend (quick UI iteration)
# Code quality
just fmt # Format all code (Rust + TypeScript/Svelte)
just lint # Lint Rust with clippy
just typecheck # Type check TypeScript + Svelte + Rust
just check-all # Run all checks (format, lint, typecheck)
# Maintenance
just install # Install all dependencies
just clean # Remove build artifacts
src-tauri/src/
├── diff/ # Core diff engine
│ ├── git.rs # Git operations (libgit2)
│ ├── types.rs # Data structures
│ ├── actions.rs # File actions (stage, discard, etc.)
│ ├── review.rs # Review session storage
│ └── watcher.rs # File system watching
├── lib.rs # Tauri commands (API surface)
└── refresh.rs # Debounced refresh coordination
src/
├── App.svelte # Main app shell
└── lib/
├── Sidebar.svelte # File list with status indicators
├── DiffViewer.svelte # Side-by-side diff display
├── DiffSelectorModal.svelte # Ref picker UI
└── services/ # Frontend services
MIT