A high-performance, lightweight Git client built with Rust and Svelte.
Website • Features • Screenshots • Installation • Development • Architecture • Translations • License
GitFerrum is a native desktop Git client designed as a fast, minimal alternative to tools like GitKraken and SourceTree. It leverages gitoxide (pure Rust) for ultra-fast Git reads and Tauri v2 for a tiny, secure native app.
- Commit Graph Visualization - SVG-based branch graph with color-coded lanes, merge curves, and infinite scroll
- Multi-Repository - Open, switch between, and close multiple repos from the sidebar
- Changes Panel - View staged, modified, and untracked files with one-click staging and inline commit
- Discard Changes - Discard individual file changes via right-click context menu or discard all unstaged/untracked changes at once, with confirmation dialog
- Smart Push - Automatically detects when a branch has no upstream and offers to create it on the remote
- Diff Viewer - Unified diff view with syntax-colored additions/deletions and line numbers
- Clone Repositories - Clone from any URL directly from the app
- Branch Management - Create, rename, delete (local and remote), merge, and checkout branches via context menu
- Tag Management - Create (lightweight and annotated), delete (local and remote) tags
- Stash Management - Push, apply, and drop stashes
- Merge & Conflict Resolution - Merge branches with automatic conflict detection and abort support
- Cherry-pick & Revert - Cherry-pick commits or revert them with conflict handling
- Amend Commits - Amend the last commit message
- Reset - Soft, mixed, and hard reset to any commit
- Remote Branch Management - Right-click context menu to create local branches, create with custom name, or browse in detached HEAD
- Fetch / Pull / Push - Toolbar buttons with badge indicators showing commits ahead/behind
- Git Configuration - Configure global Git identity (user.name and user.email) from the Settings dialog
- Auto Updates - Automatic update checking on startup with in-app download and install
- File Watcher - Automatic status refresh when files change externally (500ms debounce)
- Multi-Language - English, Spanish, and Portuguese with auto-detection
- Keyboard Shortcuts -
Cmd+Oopen repo,Cmd+Entercommit,Escapeclose panels
| Layer | Technology |
|---|---|
| Framework | Tauri v2 |
| Backend | Rust, gitoxide (gix), Tokio, Rayon |
| Frontend | Svelte 5, TypeScript, Tailwind CSS v4 |
| Icons | Lucide |
| Build | Vite 6 |
| Tests | Vitest (frontend), Cargo test (backend) |
Download the latest release from the Releases page or visit gitferrum.com for more info:
- macOS:
.dmg(Apple Silicon & Intel) - Windows:
.msi/.exe - Linux:
.deb/.AppImage
Prerequisites:
- Rust (latest stable)
- Node.js 18+
- pnpm (recommended) or npm
- Tauri CLI prerequisites
git clone https://github.com/trisecode/gitferrum.git
cd gitferrum
pnpm install
pnpm tauri buildThe built app will be at src-tauri/target/release/bundle/.
# Install dependencies
pnpm install
# Run in development mode (hot reload)
pnpm tauri dev
# Run tests
pnpm test # Frontend (Vitest)
cd src-tauri && cargo test # Backend (Rust)
# Type checking
pnpm check # Svelte
cd src-tauri && cargo check # Rust
# Production build
pnpm tauri build
pnpm tauri build -- --debug # Debug buildGitFerrum uses your system's SSH configuration. Make sure your SSH key is loaded in the agent before pushing:
ssh-add ~/.ssh/your_keygitferrum/
├── src/ # Frontend (Svelte 5 + TypeScript)
│ ├── lib/
│ │ ├── components/ # 20+ Svelte components
│ │ │ ├── sidebar/ # Repo switcher, branches, remotes, tags
│ │ │ ├── graph/ # Commit graph, SVG lanes, commit rows
│ │ │ └── detail/ # Commit detail, file list, diff view
│ │ ├── stores/ # Reactive state (Svelte 5 runes)
│ │ ├── services/ # Tauri IPC wrappers
│ │ ├── i18n/ # en, es, pt translations
│ │ └── utils/ # Graph layout, time formatting
│ └── App.svelte # Root + keyboard shortcuts
│
├── src-tauri/ # Backend (Rust)
│ └── src/
│ ├── commands.rs # Tauri command handlers
│ ├── git/ # Git operations
│ │ ├── graph.rs # Commit graph + lane assignment algorithm
│ │ ├── diff.rs # Unified diff parsing
│ │ ├── actions.rs # Push, pull, fetch, commit, clone, discard, config
│ │ ├── status.rs # Working directory status
│ │ └── refs.rs # Branches, tags, remotes (pure gitoxide)
│ ├── state.rs # Multi-repo state management
│ └── watcher.rs # File system watcher
│
└── tests/fixtures/ # Test repo with branches, merges, tags
- Git reads (graph, refs, history) use gitoxide — a pure Rust Git implementation for maximum speed
- Git writes (push, pull, commit, clone) shell out to git CLI for reliability and SSH compatibility
- Frontend <-> Backend communication via Tauri's
invoke()IPC with typed commands - Network operations run in dedicated OS threads with 60-second timeouts
- State is managed with Svelte 5 runes (
$state,$derived) in singleton stores - Multi-repo support: each repo maintains independent state (graph, branches, status)
GitFerrum supports 3 languages with automatic detection based on your system locale:
| Language | Code |
|---|---|
| English | en |
| Espanol | es |
| Portugues | pt |
Translations live in src/lib/i18n/. To add a new language, create a new file following the pattern of en.ts.
45 automated tests covering the core Git operations and frontend utilities:
Rust (25 tests):
- git::graph — commit graph, pagination, lane assignment, edges, refs
- git::diff — unified diff parsing, hunk headers, file status
- git::refs — branch/tag listing, HEAD detection, ref mapping
- git::status — working directory status, branch detection
- git::actions — stage, commit, checkout, stash
Frontend (20+ tests):
- i18n — all locales have same keys, plural/singular, functions
- graph-layout — lane colors, positions, constants
- time — relative time formatting per locale
- types — TypeScript interfaces match Rust structs
- Color Palette: Deep Night
#0f1117background, Rust Orange#f97316accent, Slate#e2e8f0text - Typography: Inter (UI) + JetBrains Mono (code/hashes)
- Layout: Three-pane — collapsible sidebar | commit graph | changes/detail panel
- Graph: Thin SVG lines with 8-color lane palette, Bezier curves for merges
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Commit your changes
- Push to the branch
- Open a Pull Request
See LICENSING.md for details.
Built with Rust and Svelte by Trisecode
