Just Another Git GUI is a lightweight desktop Git client built in Rust with egui.
It focuses on the everyday local workflow first—review changes, stage files, commit, switch branches, inspect history—and adds a practical GitHub flow on top: publish an existing folder, sign in with GitHub device flow, push branches, and jump straight into the relevant pull request page.
Download · Report Bug · Request Feature
This project aims to be a simple, fast, user-friendly Git desktop app without depending on the GitHub CLI.
The application combines:
- a native Rust desktop UI with
eframe/egui - local Git operations through
git2, with Git CLI use limited to history rendering - direct GitHub API integration for repository publishing and pull request actions
- secure GitHub session persistence through the operating system keychain / credential store
- Open an existing repository from disk
- View unstaged and staged changes in separate panes
- Stage / unstage individual files or use Stage All / Unstage All
- Drag and drop files between staged and unstaged lists
- Review diffs in a built-in changes view
- Write commits from the right-hand commit panel
- Optionally enforce Conventional Commits from a settings dialog
- Autocomplete Conventional Commit prefixes with inferred scopes from changed paths
- Switch branches from the toolbar
- Create a new branch from inside the app
- Create and push tags from
main/master - Browse commit history with a visual graph lane
- Resolve merge conflicts with built-in “Accept Ours / Theirs / Both” actions
- Pull and push directly from the main toolbar
- See unpushed local commits directly on the Push(n) button
- Automatically set upstream on first push for a new branch
- Publish a local folder to GitHub as a new repository
- Sign in to GitHub with OAuth Device Flow
- Persist GitHub sign-in securely in the system keychain
- Detect existing pull requests after push
- Open an existing PR or create a new one in the browser
- View sanitized application logs from inside the UI when an operation fails
Just Another Git GUI includes a built-in GitHub publishing and pull request flow:
- Publish Folder to GitHub initializes a repository if needed, creates the first commit, creates the GitHub repository, adds
origin, and pushesmain - Sign in to GitHub uses OAuth Device Flow and stores the session in the OS credential store
- GitHub pushes and pulls inside the app use that saved device-flow session consistently
- GitHub tag pushes inside the app use that same saved device-flow session
- After you push a branch, the app checks whether a pull request already exists
- If a PR exists, you get a shortcut to open it
- If not, you get a shortcut to create one
This is implemented directly in Rust without relying on gh.
For repositories that do not use GitHub, the app still uses git2 for local commit/branch work and for remote push/pull through the configured non-GitHub transport credentials.
- Rust 1.85 or later
- Git installed and available on your system
- On Linux, a working Secret Service / keychain environment is recommended for GitHub session persistence
git clone https://github.com/neisep/justanothergitgui.git
cd justanothergitgui
cargo build --releaseBinary:
target/release/justanothergitguigit clone https://github.com/neisep/justanothergitgui.git
cd justanothergitgui
cargo build --releaseBinary:
target\release\justanothergitgui.exe- Launch the app
- Open a repository or choose Publish Folder to GitHub...
- Review changes in the unstaged and staged panels
- Stage files, inspect diffs, and enter a commit message
- Commit from the right-side panel
- Switch branches or create a new one from the toolbar
- Use Pull / Push from the top-right area
- When the current branch has local commits that are not on the remote yet, the app shows them as Push(n)
- On
mainormaster, use Create Tag... to tag the current HEAD commit - If you are working with GitHub, sign in once and let the app handle publishing, tag pushes, and PR shortcuts
Use Settings... to leave commit message validation off or enable Conventional Commits.
When Conventional Commits is enabled:
- the first line of the commit message must match the Conventional Commits format
- invalid commit messages are blocked before commit or repository publish
- typing a prefix like
fixshows scope-aware suggestions such asfix(ui):orfix(ui,settings): - inferred scopes come from changed file paths and the repository / crate name when needed
- custom scopes from Settings... stay available in the suggestion list
- a plain no-scope option like
fix:is always available
The app uses GitHub OAuth Device Flow:
- the app shows a device code
- your browser opens GitHub’s approval page
- after approval, the session is stored in the OS credential store
On restart, the saved GitHub session is loaded automatically if the system keychain allows access.
For GitHub repositories, the in-app push, pull, and tag flow expects origin to use an HTTPS GitHub URL so the saved device-flow session can be reused consistently.
If an operation fails, the UI shows a short message and writes sanitized details to the application log. When logs exist, use the Logs / View Logs button in the app to inspect them.
src/
├── main.rs # Application entry point and native window setup
├── app.rs # Main app orchestration, dialogs, toolbar, GitHub flow
├── git_ops.rs # Git and GitHub operations
├── state.rs # Shared UI state and actions
├── worker.rs # Background worker for long-running operations
└── ui/
├── bottom_bar.rs # Status bar
├── commit_panel.rs # Commit editor panel
├── diff_panel.rs # Diff view and conflict resolution UI
├── file_panel.rs # Staged / unstaged file lists
└── history_panel.rs # Commit history and graph lane
- Simple local workflow for common Git tasks
- Friendly GitHub integration for publishing and pull requests
- Minimal external runtime dependencies
- Cross-platform desktop UX with Rust and
egui - Secure credential storage instead of plain-text tokens
Contributions are welcome.
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-change - Make your changes
- Run:
cargo fmt --all
cargo build
cargo test- Push your branch and open a pull request
Areas that would be valuable to improve next:
- richer branch and remote management
- stashes and cherry-pick support
- better repository settings and preferences
- improved history graph for more complex merge topologies
- release packaging for Linux and Windows
- screenshots and demo media for the GitHub project page
- egui - immediate mode GUI framework
- eframe - native app wrapper for egui
- git2-rs - Rust bindings for libgit2
- keyring-rs - secure credential storage
- GitHub REST API - repository and pull request integration