Open-Git-Control is a free, open-source desktop Git client for Windows, macOS, and Linux. It combines a visual commit graph, staging, diff inspection, conflict resolution, GitHub pull requests, releases, project planning, secret scanning, recovery tools, and optional AI assistance in one local-first application.
Language: English | Deutsche Version: README.de.md
Use Open-Git-Control when you want more than a minimal Git GUI, but still want a transparent, local-first alternative to commercial desktop clients.
- Free and open source under the GNU GPL license
- Git operations run locally against your repositories
- Visual commit graph with branch, tag, merge, reset, rebase, cherry-pick, revert, and recovery actions
- Staging, stash, hunk-based diffs, file history, blame, and conflict resolution in one workflow
- GitHub authentication, repository cloning/forking, pull requests, CI status, workflows, and release publishing
- Project planning board with local REST and MCP-style API for agent-assisted work
- Optional AI support through Ollama or Google Gemini for commit messages, auto-commits, and release notes
- Secret scanning before pushes, allowlists, safe prompts for dangerous operations, and local encrypted token storage when available
Always-current release page:
github.com/timbornemann/Open-Git-Control/releases/latest
Current latest release: v1.3.0, published 2026-06-30.
The badge and latest release page stay current automatically. The direct binary links below are versioned by GitHub asset name and are refreshed by the release workflow after a new stable release is published.
| Platform | Package | Direct GitHub download |
|---|---|---|
| Windows x64 | NSIS installer .exe |
Open-Git-Control-1.3.0-win-x64.exe |
| Linux x64 | AppImage | Open-Git-Control-1.3.0-linux-x86_64.AppImage |
| Linux amd64 | Debian package .deb |
Open-Git-Control-1.3.0-linux-amd64.deb |
| macOS x64 | Disk image .dmg |
Open-Git-Control-1.3.0-mac-x64.dmg |
| macOS x64 | Zip archive | Open-Git-Control-1.3.0-mac-x64.zip |
The latest*.yml and .blockmap files in GitHub Releases are update metadata for the auto-updater. Most users should download one of the installers above.
- Git must be installed and available in your
PATH. - GitHub CLI (
gh) is optional and only required for the one-click GitHub login method. - Ollama or a Gemini API key is optional and only required for AI features.
- Development from source requires Node.js and npm. CI currently uses Node.js 20.
- Why Open-Git-Control?
- Downloads
- Requirements
- Screenshots
- Feature Reference
- Typical Workflows
- Local Planning API and MCP
- Install Git
- Development
- Release Builds
- Data Storage and Security
- Troubleshooting
- License
- Open local repositories and set the active working session.
- Initialize folders that are not yet Git repositories with
git init. - Keep a persistent repository workspace with recent repositories, favorites, active repository, and sorting.
- Search and sort local repositories by last opened date, name, creation date, ascending, or descending order.
- Pin repositories, close repositories, and switch between known repositories quickly.
- Detect unavailable repositories and handle missing repository paths gracefully.
- Reset stored layout dimensions from settings.
- Resize the main sidebar and the graph/inspector split.
- Persist collapsed sidebar panels per repository for remotes, branches, tags, and submodules.
- List local and remote branches with search/filtering.
- Create branches, check out local branches, rename branches, and delete branches.
- Force-delete unmerged branches only after an explicit confirmation.
- Create branches from the graph and from selected commits.
- Merge branches from the topbar or context menu with:
- default merge
- no-fast-forward merge
- squash merge
- fast-forward-only merge
- Fetch all remotes with pruning and tags.
- Auto-fetch on a configurable interval and refresh when the app becomes visible again.
- Show remote health states:
- no remote configured
- no tracking branch
- local ahead
- remote ahead
- diverged
- up to date
- fetch error
- Add, remove, rename, and update remote URLs.
- Set upstream for the current branch.
- Handle missing GitHub remotes by removing invalid
originmappings and returning the repo to local/offline mode. - Create lightweight or annotated tags.
- Search, select, delete, and push tags.
- Show recursive submodule status.
- Run
git submodule update --init --recursive. - Run
git submodule sync --recursive. - Open submodules in the file system.
- Fetch.
- Merge selected branch with selectable merge mode.
- Pull with:
- default pull
- pull with rebase
- no-fast-forward pull
- fast-forward-only pull
- Push with:
- default push
- set upstream (
-u) - force-with-lease
- push tags
- Open the codebase timeline.
- Open the release creator.
- Open the staging/commit panel.
- Access compact "more actions" variants when the window is narrow.
- Visual commit graph with branch and merge topology.
- Paged commit loading for larger histories.
- Working tree row above history with staged, unstaged, and untracked counts.
- Async commit statistics for files, additions, and deletions.
- Search commits by:
- all fields
- subject
- author
- hash
- refs
- Navigate search matches forward/backward.
- Select commits and inspect changed files, commit body, file history, blame, and patch.
- Commit context menu actions:
- checkout as new branch
- detached checkout
- create branch
- create tag
- cherry-pick
- revert
- revert merge commit with
-m 1 - reset
--soft - reset
--mixed - reset
--hard - interactive rebase with editable todo list
- merge selected ref into current branch
- copy commit hash
- Tag selection jumps to the tagged commit.
- Timeline view reconstructs repository file changes over commit history.
- Canvas-based file tree visualization.
- Highlights added, modified, deleted, and renamed files.
- Playback controls:
- play/pause
- reset to start
- skip to end
- timeline slider
- speed selector from very slow to very fast
- Shows active commit hash, author, date, subject, and current position in the history.
- Run forensic history searches directly from the graph:
- string search with
git log -S - regex search with
git log -G - line range search with
git log -L
- string search with
- Use path suggestions from the working tree and repository history.
- Inspect result commits and jump into diffs.
- Recovery Center based on reflog:
- filter reflog entries
- inspect lost or moved commits
- create a recovery branch from a reflog entry
- detached checkout
- hard reset with explicit danger confirmation
- Working directory panel with sections for:
- conflicts
- staged files
- unstaged files
- untracked files
- Search changed files.
- Show staged and unstaged file statistics.
- Stage and unstage individual files.
- Stage all and unstage all.
- Stage all untracked files.
- Discard individual files or all changes.
- Delete untracked files.
- Add files, folders, top-level folders, or file-type patterns to
.gitignore. - Stash with optional message.
- Apply, pop, and drop stashes.
- Create a branch from a stash.
- Commit with title and optional description.
- Commit with
--amend. - Commit with
--signoff. - Enable commit signoff by default in settings.
- Use a configurable commit template.
- Commit with
Ctrl+Enterin commit fields.
- Open staged, unstaged, and commit-specific diffs.
- Unified and side-by-side diff modes.
- Syntax-style highlighting for common code tokens.
- Hunk navigation with current hunk counter.
- Hunk actions:
- stage hunk
- unstage hunk
- discard hunk
- Blame overlay inside the diff viewer.
- Click blame entries to navigate to the responsible commit.
- File inspector tabs:
- History
- Blame
- Patch
- File history lists previous commits for the selected file.
- Blame loads in chunks and can load additional 500-line pages.
- Patch tab opens the diff in the main pane.
- Large diff protection:
- byte and line limits
- truncated rendering
- full-copy action where available
- Binary file detection for common binary extensions and Git binary patches.
- Dedicated conflict resolver view for merge and rebase conflicts.
- Opens automatically when conflicts are detected.
- Shows conflict file list and conflict block navigation.
- Side-by-side current/incoming conflict blocks.
- Resolve one block at a time:
- accept current
- accept incoming
- take both versions
- Resolve all blocks:
- accept all current
- accept all incoming
- Manual editor with conflict marker and line-gutter feedback.
- Reload file from disk.
- Save edits.
- Save and mark as resolved.
- Discard changes.
- Continue or abort merge.
- Continue or abort rebase.
- Prevent commits while unresolved conflicts remain.
- Authenticate with:
- Personal Access Token
- OAuth Device Flow
- one-click login through GitHub CLI (
gh)
- Reconnect from saved GitHub session.
- Log out and clear saved auth.
- Configure GitHub OAuth Client ID for Device Flow.
- Configure GitHub host for GitHub Enterprise style hosts.
- List GitHub repositories with search, pagination, and refresh.
- Detect whether GitHub repositories are already cloned locally.
- Clone GitHub repositories with progress modal.
- Clone any HTTP, HTTPS, or SSH Git remote URL.
- Fork a GitHub repository by URL and clone the fork locally.
- Create a new GitHub repository from a local repo without
origin. - Connect the created GitHub repo as
origin. - Replace invalid remote mapping when the upstream repository no longer exists.
- Pull request list for the active GitHub repository.
- Filter PRs by open, closed, or all.
- Create pull requests with title, body, head branch, and base branch.
- Open PRs in the browser.
- Copy PR URLs.
- Check out PR branches locally.
- Merge PRs with:
- merge commit
- squash
- rebase
- CI evaluation per PR:
- success
- failure
- pending
- neutral
- unknown
- Show workflow runs and status checks.
- Show recent GitHub Actions workflow runs for the current branch.
- Filter workflow runs and open them in the browser.
- Dedicated release view from the topbar.
- Reads GitHub release context:
- repository URL
- existing tags
- latest release tag
- commits since latest release
- target branch or commit
- Suggests the next semantic version tag.
- Choose version bump:
- major
- minor
- patch
- Configure:
- tag name
- release name
- target commitish
- release body in Markdown
- draft flag
- prerelease flag
- Generate release notes with AI.
- Tune AI notes:
- language English/German
- exclude merge commits
- group into sections
- more technical details
- breaking changes section
- append automatic commit list
- show commit hashes
- Publish the release directly to GitHub.
- Planning view for repository-backed projects and future projects.
- Board columns:
- Idea
- Bug
- Planned
- In progress
- Blocked
- Done
- Planning items support:
- title
- description
- priority
- status
- tags
- Filter planning items by search, priority, status, and tag.
- Create, edit, move, and delete planning items.
- Create future projects without a Git repository.
- Edit or delete projects.
- Materialize a future project by selecting a parent directory, creating a project folder, running
git init, and keeping the planning project linked. - Repository removal can also remove linked planning items after confirmation.
- Local HTTP server bound to
127.0.0.1. - Preferred port:
2990; if occupied, the app uses the next available local port. - API docs:
http://127.0.0.1:2990/api/ - OpenAPI JSON:
/api/openapi.json - MCP JSON-RPC endpoint:
/mcp - REST wrapper for MCP-style tools:
GET /api/mcp/toolsPOST /api/mcp/tools/call
- All data and MCP endpoints require a token.
- Public health and docs endpoints are available without protected data.
- Token can be sent as:
x-open-git-control-token: <TOKEN>Authorization: Bearer <TOKEN>
- Settings show:
- API status
- host
- port
- base URL
- API docs URL
- OpenAPI URL
- MCP URL
- token header
- current token
- token source
- token expiry
- Generate persistent API tokens for:
- 1 day
- 1 month
- 1 year
- forever
- Persistent API tokens are stored with Electron
safeStoragewhen OS encryption is available. - Temporary session tokens are used when no persistent token exists.
- Environment controls:
OPEN_GIT_CONTROL_API_PORT=2990OPEN_GIT_CONTROL_API_DISABLED=trueOPEN_GIT_CONTROL_API_TOKEN=<TOKEN>
- REST planning endpoints include:
GET /api/healthGET /api/projectsPOST /api/projectsGET/PATCH/DELETE /api/projects/:projectIdGET/POST /api/projects/:projectId/todosGET /api/repositoriesPOST /api/repositories/ensureGET /api/repositories/todosGET/POST /api/todosGET /api/todos/nextGET/PATCH/DELETE /api/todos/:todoIdPOST /api/todos/:todoId/moveGET /api/tabsGET/POST /api/tabs/:tab/todosGET /api/agent/next
- MCP-style tools:
list_tabslist_projectslist_repositorieslist_todosget_next_todoscreate_projectensure_repository_projectcreate_todoupdate_todomove_tododelete_todo
- Git and GitHub operations are deliberately not exposed through the local API or MCP surface.
- Providers:
- Ollama
- Google Gemini
- Configure Ollama base URL.
- Store, replace, and remove Gemini API key securely when OS encryption is available.
- Test provider connection.
- Load available models.
- Select or type a model manually.
- Configure commit-message style:
- Conventional Commits
- plain
- detailed
- Configure commit-message language:
- auto
- German
- English
- Generate an AI commit message from user notes.
- AI auto-commit:
- analyzes the working tree
- groups changed files logically
- creates commit messages
- commits groups automatically
- reports phases such as snapshot, grouping, committing, retry, fallback, done, failed, and cancelled
- can be cancelled
- AI release notes from commit history and release context.
- Optional confirmation prompts for dangerous Git operations.
- Explicit danger confirmations for destructive reset, discard, delete, force-delete, and similar actions.
- Git command policy limits what the renderer can ask the main process to run.
- External link policy opens allowed URLs through the main process.
- Diff preview policy normalizes safe diff commands.
- Secret scan before push:
- scans staged diffs
- scans to-push diffs
- can include tags
- supports cancellation
- reports findings with rule, severity, file, line, and sanitized context
- Secret scan strictness:
- low
- medium
- high
- Secret scan allowlist formats:
path:...regex:...- plain text
- comment lines with
#
- GitHub token, Gemini key, and persistent Planning API token are stored OS-encrypted through Electron
safeStoragewhen available. - If OS encryption is unavailable, secrets are not stored persistently.
- General settings:
- theme
- language
- default branch
- layout reset
- secondary history
- commit signoff default
- commit template
- auto-fetch interval
- Themes:
- Copper Night
- Midnight Teal
- Graphite Blue
- Forest Copper
- Porcelain Light
- Ember Slate
- Arctic Mint
- Mono Dark Red
- Mono Light Red
- Mono Dark Green
- Mono Light Green
- Integrations settings:
- AI provider
- AI model
- AI message style/language
- Ollama URL
- Gemini API key
- GitHub OAuth Client ID
- API & MCP settings:
- runtime API status
- copyable URLs and token values
- token generation and deletion
- example cURL commands
- example MCP server config
- Security settings:
- dangerous operation confirmations
- secret scan before push
- strictness
- allowlist
- System settings:
- installed app version
- updater status
- available version
- download progress
- background update toggle
- one-click update
- release notes
- job center
- Job Center tracks recent operations such as:
- clone
- fetch
- pull
- push
- stage
- commit
- stash branch
- secret scan
- AI auto-commit
Ctrl+1..4: switch main sidebar tabsCtrl+Shift+F: fetchCtrl+Shift+P: command paletteCtrl+Enter: commit from commit fields- Command palette with keyboard navigation, search,
Enterto run, andEscto close - Copy buttons for hashes, URLs, tokens, API examples, and PR links
- Virtualized lists for larger file and commit detail views
- Open the Local Repositories tab.
- Choose a folder.
- If it is not a Git repository yet, confirm initialization.
- Switch to the Repository tab and start working.
- Fetch or pull from the topbar.
- Create or switch a branch.
- Review changed files in the working directory.
- Open diffs, stage files or hunks, and optionally stash work.
- Create a commit with title and description.
- Push, set upstream, push tags, or force-with-lease when needed.
- Start a merge, pull, rebase, cherry-pick, or other operation that produces conflicts.
- Open the Conflict Resolver when it appears.
- Resolve each block by choosing current, incoming, or both.
- Use the manual editor when the result needs fine-tuning.
- Save and mark files as resolved.
- Continue or abort merge/rebase from the resolver.
- Sign in through PAT, Device Flow, or GitHub CLI one-click login.
- Make sure
originpoints to a GitHub repository. - Create a pull request from the repo sidebar.
- Inspect PR CI and workflow status.
- Open, copy, checkout, merge, squash, or rebase the PR.
- Open Release from the topbar.
- Refresh release context.
- Pick major, minor, or patch.
- Adjust tag, release name, target, and Markdown body.
- Optionally generate AI release notes.
- Publish as a normal release, draft, or prerelease.
- Open Recovery Center in the graph area.
- Filter reflog entries.
- Create a recovery branch from the relevant entry.
- Use detached checkout or hard reset only when you are sure.
- Start Open-Git-Control.
- Open Settings -> API & MCP and copy the MCP URL plus token.
- Configure an external agent with the MCP URL or REST endpoints.
- Ask the agent for
get_next_todosorGET /api/agent/next. - Let the agent create or move planning items.
- Keep Git and GitHub operations inside the desktop app.
Example: get next todos for a repository.
curl "http://127.0.0.1:2990/api/agent/next?repoPath=<REPO_PATH_URL_ENCODED>&limit=10" \
-H "x-open-git-control-token: <TOKEN>"Example: list MCP-style tools over JSON-RPC.
curl -X POST "http://127.0.0.1:2990/mcp" \
-H "x-open-git-control-token: <TOKEN>" \
-H "content-type: application/json" \
-d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}"Example MCP server config:
{
"mcpServers": {
"open-git-control": {
"type": "http",
"url": "http://127.0.0.1:2990/mcp",
"headers": {
"x-open-git-control-token": "<TOKEN>"
}
}
}
}Git must be installed and available in your PATH.
- Download Git from git-scm.com/downloads.
- Run the Windows installer.
- Keep "Git from the command line" enabled.
- Restart your terminal or computer if
gitis not found immediately.
Homebrew:
brew install gitApple Command Line Tools:
xcode-select --installDebian/Ubuntu:
sudo apt update && sudo apt install git -yFedora:
sudo dnf install git -yArch:
sudo pacman -S gitgit --version
git config --global user.name "Your Name"
git config --global user.email "your@email.com"Install dependencies:
npm installRun Vite and Electron in development:
npm run devBuild the application:
npm run buildRun tests:
npm run test
npm run test:coverage
npm run test:ciAvailable scripts:
| Script | Purpose |
|---|---|
npm run dev |
Run Vite and Electron together |
npm run electron:dev |
Build Electron process and start Electron against Vite |
npm run build |
TypeScript, Vite build, and Electron process build |
npm run build:electron |
Compile Electron main/preload process |
npm run dist |
Build packaged app for the current platform |
npm run dist:win |
Build Windows NSIS x64 package |
npm run dist:linux |
Build Linux AppImage and deb packages |
npm run dist:mac |
Build macOS dmg and zip packages |
npm run release:win |
Build and publish Windows release assets |
npm run release:linux |
Build and publish Linux release assets |
npm run release:mac |
Build and publish macOS release assets |
npm run preview |
Preview Vite build |
npm run electron:start |
Start Electron after the Electron process has been built |
npm run test |
Run unit tests |
npm run test:coverage |
Run tests with coverage |
npm run test:ci |
Compile, test with coverage, and build |
Local package artifacts are written to release/.
npm run dist
npm run dist:win
npm run dist:linux
npm run dist:macGitHub publishing is handled by .github/workflows/release.yml. Publishing a GitHub Release with a tag such as vX.Y.Z triggers platform builds for Windows, Linux, and macOS, derives the package version from the tag, validates expected artifact names, attaches assets to the release, and refreshes the README download links.
Expected release assets:
Open-Git-Control-<version>-win-x64.exeOpen-Git-Control-<version>-linux-x86_64.AppImageOpen-Git-Control-<version>-linux-amd64.debOpen-Git-Control-<version>-mac-x64.dmgOpen-Git-Control-<version>-mac-x64.zip- updater metadata such as
latest.yml,latest-linux.yml,latest-mac.yml, and blockmaps
- Git commands operate on the selected local repository.
- Repository workspace state is stored in the Electron user-data directory.
- Settings are stored locally.
- Planning projects and planning items are stored locally.
- The Planning API binds to
127.0.0.1. - Planning API token-protected endpoints are intended for local processes on the same machine.
- GitHub token, Gemini key, and persistent Planning API token are stored with OS-backed encryption through Electron
safeStoragewhen available. - If OS encryption is unavailable, secrets are not persisted.
- The local API exposes planning data only; it does not expose Git or GitHub actions.
- Install Git.
- Restart your terminal or computer.
- Verify with
git --version.
- Install GitHub CLI from cli.github.com.
- Verify with
gh --version. - Use PAT or Device Flow if you do not want to use GitHub CLI.
- Set a GitHub OAuth Client ID in Settings -> Integrations.
- Alternatively set
GITHUB_OAUTH_CLIENT_IDbefore starting the app.
- Make sure
originpoints to a GitHub repository. - Sign in to GitHub in the GitHub tab.
- Refresh the repository and PR panel.
- Inspect the reported file and line.
- Remove the secret or rotate it if it was committed accidentally.
- Add a narrow allowlist rule only for intentional dummy/example values.
- Auto-update only works in installed production builds.
npm run devand local unpackaged builds do not use the updater.
- Another local process may already use the port.
- Check Settings -> API & MCP for the actual port.
- Set
OPEN_GIT_CONTROL_API_PORT=<PORT>before starting the app if you want a different preferred port.
- For Ollama, verify the Ollama server URL and model name.
- For Gemini, store a valid API key and select a supported model.
- Use "Test connection" and "Load models" in Settings -> Integrations.
Open-Git-Control is licensed under the GNU General Public License.






