A cross-platform Git client inspired by Fork.
Warning This software is in alpha stage. It is not recommended for use in production environments or critical projects. Expect bugs, incomplete features, and breaking changes between versions. Use at your own risk.
Forky is a shameless clone of Fork because I (Calambrenet) wanted a graphical Git manager that worked on Linux and looked like Fork. So I built Forky.
This project is created with no pretensions of ever being stable, but I'm using it daily for my work and I'm gradually implementing features and fixing bugs as I go.
Built with:
- Backend: Rust + Tauri 2.0 + git2 (libgit2 bindings)
- Frontend: React 19 + TypeScript + Vite
- Styling: CSS with CSS variables (dark theme)
Coming soon
- Open and manage multiple Git repositories in tabs
- Auto-restore previously opened repositories on startup
- Real-time file watching with pending changes indicator
- Open repository in terminal
- View commit history with branch graph visualization
- Navigate to specific commits
- View commit details (author, date, message, files changed)
- Diff viewer with syntax highlighting
- Stage/unstage individual files
- Stage/unstage all files
- View diff for staged and unstaged changes
- Commit changes with message
- Amend last commit
- Discard changes
- Partial staging (hunks)
- Fetch (single remote or all remotes)
- Pull (with rebase and autostash options)
- Push (with force-with-lease and push tags options)
- Add new remote
- SSH host verification
- Credential management (username/password, SSH passphrase)
- Clone repository
- View local and remote branches in tree structure
- Checkout branch (double-click or context menu)
- Create new branch (from any branch)
- Rename branch (local and remote)
- Delete branch (with force delete option, local and remote)
- Track remote branch (create local from remote)
- Copy branch name to clipboard
- Fast-forward branch
- View tags in tree structure
- Create tag (lightweight or annotated)
- Push tags to remotes
- Navigate to tag commit
- Delete tag
- View stash list (sidebar and dropdown)
- Create stash (with optional message and stage new files option)
- Save snapshot (stash but keep changes in working directory)
- Apply stash (apply changes, keep stash)
- Pop stash (apply changes, remove stash)
- Drop stash (remove without applying)
- Initialize Git Flow
- Start/finish feature
- Start/finish release
- Start/finish hotfix
- View pull requests from GitHub/GitLab/Bitbucket
- Create pull request
- Review pull request
- Merge branch into current
- Rebase current branch on another
- Interactive rebase
- Conflict resolution window
- Visual merge tool integration
- Abort merge/rebase
- Settings/preferences window
- Configure keyboard shortcuts
- Configure external diff/merge tools
- Configure Git identity (name, email)
- Multi-language support (English, Spanish, French, Italian)
- Dark theme
- Activity log for Git operations
- Keyboard shortcuts (⌘B for new branch, ⌘T for new tag)
- Filter branches/tags in sidebar
- Sort remote branches
- Light theme
- Custom themes
- Submodule support
- Cherry-pick
- Blame view
- File history
Pre-built binaries will be available in the Releases section once we set up the official repository.
| Platform | Format |
|---|---|
| Windows | .msi, .exe |
| macOS Intel | .dmg (x64) |
| macOS Apple Silicon | .dmg (aarch64) |
| Linux (Debian/Ubuntu) | .deb |
| Linux (Universal) | .AppImage |
Linux (Debian/Ubuntu):
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file libssl-dev libayatana-appindicator3-dev librsvg2-devmacOS:
xcode-select --installWindows:
- Visual Studio Build Tools
- WebView2 (usually pre-installed on Windows 10/11)
# Clone the repository
git clone https://github.com/calambrenet/forky.git
cd forky
# Install frontend dependencies
npm install
# Run in development mode (with hot-reload)
npm run tauri dev
# Build for production
npm run tauri buildThe built application will be in src-tauri/target/release/bundle/.
# Run the app in development mode
npm run tauri dev
# Run only the frontend (without Tauri)
npm run dev
# Check Rust code
cd src-tauri && cargo check
# Format Rust code
cd src-tauri && cargo fmt
# Lint Rust code
cd src-tauri && cargo clippyThe app version is centralized in package.json. The tauri.conf.json references this file, so you only need to update the version in one place.
To bump the version:
# Patch release (0.1.0 -> 0.1.1)
npm version patch
# Minor release (0.1.0 -> 0.2.0)
npm version minor
# Major release (0.1.0 -> 1.0.0)
npm version majorTo access the version from the frontend:
import { getVersion } from '@tauri-apps/api/app';
const version = await getVersion(); // "0.1.0"Contributions are welcome! Since we don't have an official repository or website yet, here's how you can help:
- Fork the repository
- Create a branch for your feature or fix:
git checkout -b feature/amazing-feature
- Make your changes following the project conventions
- Test your changes thoroughly
- Commit with a descriptive message:
git commit -m "[FEATURE] Add amazing feature" - Push to your fork and open a Pull Request
Please read CONTRIBUTING.md for detailed guidelines.
- Rust: Format with
cargo fmt, lint withcargo clippy - TypeScript: Use TypeScript strict mode, avoid
any - Commits: Use prefixes like
[FEATURE],[FIX],[REFACTOR],[DOCS]
forky/
├── src/ # Frontend (React + TypeScript)
│ ├── components/ # UI components
│ ├── hooks/ # Custom React hooks
│ ├── stores/ # Zustand state stores
│ ├── types/ # TypeScript definitions
│ └── styles/ # Global styles
├── src-tauri/ # Backend (Rust)
│ └── src/
│ ├── git/ # Git operations (using git2)
│ ├── watcher/ # File system watcher
│ └── system/ # System utilities
└── .github/workflows/ # CI/CD pipelines
| Component | Technology |
|---|---|
| Framework | Tauri 2.0 |
| Frontend | React 19 |
| Language (Frontend) | TypeScript |
| Language (Backend) | Rust |
| Git Operations | git2 (libgit2 bindings) |
| Bundler | Vite |
| State Management | Zustand |
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
- Fork - The inspiration for this project. If you're on macOS or Windows and want a polished, stable Git client, go use Fork. It's excellent.
- Tauri - For making cross-platform desktop apps with web technologies actually good.
- libgit2 - For the Git implementation that powers this app.
José Luis Castro (@calambrenet)
Note: This is a personal project built for my own use. It works for me, but your mileage may vary. Bug reports and contributions are welcome, but please don't expect enterprise-level support.