Releases: gitgusilva/gitbox
Release list
1.1.7
A one-bug release, for a bug that stopped GitBox from starting at all: on Linux, v1.1.4 through v1.1.6 only ran on machines that happened to already have a compatible OpenSSL loaded. If yours did not, the app died before its first window.
Fixed
GitBox starts on Linux again — undefined symbol: EVP_des_ede3_cbc. Native SSH, added in v1.1.4, brought in libssh2 with its OpenSSL crypto backend. The vendor script builds a static OpenSSL for it, but binding.gyp only ever linked libssh2.a, so about 97 OpenSSL symbols were left undefined in the addon — and libssh2 holds them as data relocations, which the loader has to resolve the moment the addon is opened. Nothing complained: linking a shared object with undefined symbols is legal, so the build passed, and plain node exports the OpenSSL it links statically, so the addon quietly borrowed those symbols in development. Electron ships BoringSSL and exports no EVP_des_ede3_cbc, so the packaged app survived only where the system had already mapped a compatible libcrypto into the process. That is why it ran on Fedora and died on Ubuntu 24.04. The vendored static libcrypto.a is now linked into the addon, which keeps the same shared-library set and the same glibc floor as before — the binary stays as portable as it was.
Windows was never affected: SSH is still built off there. Reported by @HermesSantos in #1.
Improved
The addon is audited for self-containment before it is packaged. "Does it load?" is not a valid test for this bug — on any host with a system libcrypto, the broken binary loads fine. So the new test suite reads the built binary's imported symbols instead: it fails if anything from the vendored git, SSH or crypto libraries is imported rather than linked in, if any imported symbol resolves to something outside the C runtime and N-API, or if it needs a shared library beyond the C/C++ runtime. Run against a deliberately broken build, the three symbol tests fail while both load tests still pass.
Linux and Windows build on every pull request. Both workflows now compile the addon and run that audit before packaging, not after — on a tag push electron-builder publishes as it packages, so a check that runs afterwards cannot gate a release.
Downloads
- Linux — AppImage,
.deb,.rpm,.pacman - Windows —
.exe(NSIS installer) or.msi
Existing installs update in place through the built-in updater. Linux users on v1.1.4–v1.1.6 who cannot start GitBox at all will need to download an installer directly.
1.1.6
A release about things that were wired to nothing: a theme that stopped at the commit graph, menu entries with no action behind them, and three panels that could not be scrolled or reached.
Added
Open a repository in an external terminal or file manager. Both entries were in the main menu, bound to empty actions, advertising Alt+T and Alt+O shortcuts that had never been registered. They work now. The terminal is the one picked in Settings, falling back to whichever is installed, and the working directory is passed explicitly where the emulator supports it — inheriting it is unreliable for the ones that talk to a background server.
Your Gravatar photo in Git settings. The same photo the commit history shows, resolved from your git email, with a note that it lives on Gravatar rather than in GitBox and a link to manage it there.
Tooltips on the filter toggle and the sync counters. The ahead/behind arrows had none at all — an arrow and a number do not say what they count — so one tooltip now names how many commits there are to pull and to push.
Fixed
The commit graph follows the active theme. No built-in theme declared a graph palette, so all of them fell back to the same one and the graph looked identical under Dracula, Nord, Monokai and the rest. Each theme now carries its own, drawn from its own identity; GitBox Dark keeps the colours it shipped with, and GitBox Light gets darker, saturated lanes, because the neon ones tuned for a #1E1E1E background wash out on white. A theme with no palette of its own — a community import, or a copy made before this — now falls back by theme type rather than to one dark-tuned set. Editing a graph colour in the Appearance editor recolours the graph without a reload.
Off-branch commits, the dot outline and the merge glyph are themed too. They were hardcoded greys and whites, and drew a bright halo around every dot on any background that was not near-black.
The title bar stays usable while a dialog is open. The dialog backdrop covers the whole window, and that included the drag region and the minimize, maximize and close buttons — so with a dialog open, the window could not be moved or closed. The bar now sits above the backdrop, dimmed but working, and ignores clicks on the tabs beneath: switching repository under an open dialog would have re-aimed it at a different repo.
The AI commit analysis keeps its headings in your language. Asked only to answer in another language, every provider still copied the English headings out of the prompt, so the analysis came back with English titles over translated text. The headings are now sent already translated.
A blank tab no longer leaves the previous repository loaded. The path stayed behind it, so the menu's terminal and file-manager entries and the sync actions all acted on a repository the tab was not showing.
Settings return to the top when you switch sections. Every section shares one scroller, so a short section opened already scrolled past its own heading.
The keyboard shortcuts sheet scrolls. The list runs past the dialog, and the rest of it could not be reached.
The sidebar and the history filter bar use the same filter icon. They were two different glyphs for the same feature.
Downloads
- Linux — AppImage,
.deb,.rpm,.pacman - Windows —
.exe(NSIS installer) or.msi
Existing installs update in place through the built-in updater.
1.1.5
A fix release about state GitBox was losing: a repository that moved, a terminal's scrollback, and the sizes you set yourself.
Fixed
A repository that was moved, renamed or deleted no longer leaves a raw error on screen. Every git call answered with libgit2's could not find repository at '<path>', which reached the banner as-is while the previous repository's branches, history and graph stayed on screen — the existing guard only recognised two other phrasings, so this one went straight through. GitBox now asks the filesystem what happened, which is what separates moved or deleted from this folder is not a repository. A path that vanished clears the repo-derived state, closes its tab and drops the dead entry from the recent list; a folder that simply is not a repository keeps its tab and says so. It is reported once per path, so the background poll does not nag, and the check covers the poll and every action rather than only the initial load.
Opening a folder that is not a repository says so. It used to open a tab that showed the previous repository's data.
Terminals stop losing their scrollback. Two separate causes. Output was delivered to whichever window had focus, so with the merge editor in front or the app in the background, bytes went to a window with no terminal for that session and were gone for good — they now go to the window that spawned the shell, and the shell is closed when that window is. Separately, the terminal was being resized while hidden or minimized, where it measures as nothing and the fit addon proposes a 2×2 minimum: resizing to that reflowed the entire scrollback into two-column lines and discarded the overflow. GitBox now refuses to fit a terminal that is not really on screen, and refits and repaints when one comes back.
Maximizing the terminal panel works. It was a no-op: the panel carried a static relative alongside a conditional absolute, and the static rule wins on ordering, so the panel stayed in flow at its natural height. Maximized, it now covers the same area the Command Log fills.
History columns follow the cursor. The Author and Time handles sat on the right edge of their column — an edge that never moves, because the subject column absorbs the change — so the column grew away from the cursor while the handle stayed put. That is what made the columns feel unresizable. The handles are now on the edge that actually moves and the divider tracks the cursor one to one, with a visible separator in the header. Each drag is clamped to the room the list really has, so dragging far enough no longer pushes the date column out of the row, and the fixed columns shrink proportionally when the list itself narrows — opening the detail panel or resizing the window used to hide the date column behind the overflow.
Panel and column sizes are remembered across restarts. They are clamped when read, so a layout saved on a larger screen cannot push a pane off the window.
Downloads
- Linux — AppImage,
.deb,.rpm,.pacman - Windows —
.exe(NSIS installer) or.msi
Existing installs update in place through the built-in updater.
1.1.4
A release about signing in once: GitBox authenticates to your remotes over HTTPS and SSH, remembers the credentials per host, and needs no system git to do it.
Private remotes were the gap. A self-hosted GitLab, Gitea or Azure repository has no OAuth flow to fall back on, so fetch, pull and push against one had nowhere to get a credential from.
Added
Per-host credentials, encrypted through the OS keychain. Tokens are stored outside the settings file, in an owner-only file encrypted with safeStorage, and the plaintext never returns to the renderer. Clone, fetch, pull and push resolve a credential in order: an OAuth token for the hosts that have an integration, otherwise the stored one for that host, otherwise your own configured git credential helper — read from global and system config only, never from a repository's own .git/config. When a remote refuses what it was given, GitBox asks for the credential and retries the operation rather than failing outright. Manage them from Settings › Credentials.
SSH remotes work in the packaged build. libssh2 and OpenSSL are linked statically into the native addon, so SSH is a transport GitBox carries with it rather than something it borrows from the system.
The theme gallery works offline, and remembers your favourites. Preview images are cached on disk as data URLs, with a skeleton while they load and a colour-based preview when there is nothing to show. Favourited themes sort to the top of the gallery.
Fixed
Packaged and dev builds no longer disagree about where your data lives. Electron caches userData on first access, and the application name was being set after the first read — so the two builds resolved to different store directories, and an account connected in one appeared disconnected in the other, with remote operations failing to authenticate. The name is now set first, the legacy store is adopted on upgrade so no integrations, repositories or preferences are lost, and any token still sitting in the settings file is migrated into the encrypted store. An unreadable config is kept as a .corrupt copy instead of being overwritten, so a bad write cannot erase settings that could still be recovered.
Focus outlines no longer paint the system accent colour over the UI. They were drawn over inputs, menus and dialogs, including ones rendered outside the main tree.
Downloads
- Linux — AppImage,
.deb,.rpm,.pacman - Windows —
.exe(NSIS installer) or.msi
Existing installs update in place through the built-in updater.
1.1.3
A fix release: when GitBox cannot do something, it now says which file and what to do about it.
Two errors started this. pull failed with 1 conflict prevents checkout, naming nothing. discardFile failed with unable to create file docker/mysql/.gitignore: Permission denied, naming a cause the app never explained. Neither told the user what to do next.
Fixed
A pull blocked by local changes names them, and offers a way through. libgit2 answers a refused checkout with a count — "1 conflict prevents checkout" — and no paths, which is nothing to act on. GitBox now collects the paths and reports local changes would be overwritten by pull: <files>, then offers to stash them, fast-forward, and restore them. If the restore conflicts, the stash is kept: popping is the step that can fail halfway, and someone who was just told "we stashed your work" has to be able to find it again.
Discarding a file no longer needs a system git. It shelled out to git checkout HEAD -- and git clean, which a packaged GitBox has no git to run, and which reported raw CLI stderr when it failed. It now runs through libgit2, picking the operation from whether HEAD knows the path — which also fixes discarding a file that was staged as new, where the old checkout could never match.
Permission failures explain themselves. Files a container created belong to another user, and no git implementation can write them. GitBox now names the file, and hands over the exact command to fix the ownership — scoped to that path and its parent, with a warning against adding -R on a directory a container writes to. The app does not run it: this is a privileged change to files it does not own, and that decision stays with you.
Errors read like errors again. Everything crossing Electron's IPC came back as Error invoking remote method 'gitbox:discardFile': Error: <the real thing>. That prefix names an internal channel and pushed the actual cause past the edge of the error banner. It is now stripped everywhere.
Restoring a stash is safe and matches git. libgit2's stash_pop drops the entry even when the apply leaves conflict markers behind — the only copy of the work would be a half-merged working tree. The entry is now kept in that case, as git stash pop does. Restored changes also come back unstaged rather than staged.
Added
Release notes after an update. The first launch on a new version shows what changed, pulled from that version's GitHub release — so there is no second copy of the notes to keep in sync. It appears once, and Settings › Updates can reopen it any time.
Downloads
- Linux — AppImage,
.deb,.rpm,.pacman - Windows —
.exe(NSIS installer) or.msi
Existing installs update in place through the built-in updater.
1.1.2
A cleanup release: GitBox stops reporting situations it already handles as errors.
Reading a real Command Log turned up 90 error entries — 74 of them for operations that had actually succeeded, or that could never have run in the first place.
Fixed
Discarding an untracked file logged two errors for an operation that worked. The discard fired three git commands in sequence and swallowed the failures, but the log is written before the caller sees them — so every discard of an untracked file left two pathspec did not match any file(s) known to git entries behind. GitBox now checks the path's status and runs only the command that applies. This alone was 64 of the 90.
A repository with no remote is no longer an error. It is a normal local repo. The background fetch ran every minute regardless and failed with remote 'origin' does not exist, and the toolbar surfaced the same failure as a red banner. Fetch, pull and push are now disabled with a tooltip explaining why, the background fetch is skipped, and the working tree still refreshes.
Stashing selected files could half-succeed. If a path had gone stale since the file list was rendered — deleted, discarded, or stashed from another tab — git created the stash for the valid paths and then failed, so the operation reported an error after having done the work. Paths are now revalidated against the live status before the command runs, for stage, unstage, stash and discard alike.
A diverged pull is an action, not a failure. It opens the merge/rebase dialog, so that is what the log now says. Merge conflicts are likewise reported as the expected outcome of a merge.
Failures that are genuinely failures — a stash apply onto a busy index, a rejected push, a conflicted merge — are still reported as such. The Command Log is useful precisely because it shows what actually ran.
Downloads
- Linux — AppImage,
.deb,.rpm,.pacman - Windows —
.exe(NSIS installer) or.msi
Existing installs update in place through the built-in updater.
1.1.1
A correctness fix for the merge editor. If you resolve conflicts inside GitBox, this one matters.
Fixed
The two sides of a conflict were swapped. Git writes <<<<<<< to open ours — the branch you are on — and >>>>>>> to close theirs, the branch being merged in. GitBox read them the other way round, so the merge editor labelled your local side Incoming and the branch you were merging Current.
"Accept all" acted on the wrong side. The same swap reached the bulk-resolve paths: asking for accept all incoming wrote the local side into the file, and accept all current wrote the remote one — silently, with no error. Keep both also emitted theirs before ours, against git's own ordering.
The panes themselves were always laid out correctly (left is local, right is incoming); they were being handed the wrong content. Nothing else about the merge flow changed.
If you resolved conflicts in bulk with an earlier build, it is worth reviewing those merges — the result may hold the opposite side of what you picked.
Downloads
- Linux — AppImage,
.deb,.rpm,.pacman - Windows —
.exe(NSIS installer) or.msi
Existing installs update in place through the built-in updater.
1.1.0
GitBox v1.1.0 introduces Projects — a way to group the repositories you work with, so switching context is one click instead of reopening tabs.
Projects
- A project owns its own set of repository tabs, including which one was active. Switching projects swaps the whole tab bar.
- Every repository you open while a project is active belongs to it and inherits its colour.
- Each project has a colour of its own, shown on the switcher and as a hairline across the toolbar.
- The folder button in the toolbar is now the project switcher, listing every project with its colour, repository count and edit/delete actions. Past 8 projects it gains a search box.
- New shortcuts:
Ctrl+Shift+Popens the menu,Alt+PageUp/Alt+PageDowncycle,Alt+1…Alt+9jump straight to a project.
Existing installs migrate automatically: the tabs you already have open become your first project.
Keyboard shortcuts sheet
Rebuilt: grouped by category, two columns, searchable, and translated into all supported languages.
Fixes
- Command Log did not render its list at all, and large entries had no scrollbar — both the list and an expanded command's output now scroll.
- Command Log recorded every git command twice; a duplicate IPC listener was counting each event two times.
- Command Log always reopened on the Error tab instead of the one you last used.
- History graph: branches you added to the filter were drawn dimmed, as if they had not been filtered.
- Hide icon labels in Settings had no effect on the toolbar actions.
- Expanding a log entry with no output now says so instead of opening an empty box.
Downloads
- Linux — AppImage,
.deb,.rpm,.pacman - Windows —
.exe(NSIS installer) or.msi
Existing installs update in place through the built-in updater.
1.0.1
release: v1.0.1 - error handling: central reportError() → banner + Command Log, generic toast - stash: persist include-untracked default; warn when only untracked selected - changes/history: refinements to ChangesView + HistoryCommitChanges - tabs: use accent design tokens; keep active-tab close icon visible - remove the What's New / Changelog view and its version gate - bump app version to 1.0.1
1.0.0
GitBox 1.0.0 is the first public release — a fast, native desktop Git client.
Highlights
- AI-powered commit messages — generate commit messages, explain changes, and draft PR summaries (bring your own provider/API key, or use a local CLI).
- Native Git engine — fully self-contained, built on a statically linked libgit2. No system Git installation required.
- Native branch merge — real merges with a dedicated conflict editor that opens in its own window.
- Advanced diff viewer — side-by-side and inline modes.
- High-performance history — virtual scrolling with a multi-branch history filter and cherry-pick support.
- Integrated terminal — for advanced Git operations.
- Theming — design-token theme system with an in-app Appearance editor and a community theme registry browser.
- Native auto-updates — powered by electron-updater and GitHub Releases.
- Multi-repository & branch management.
Downloads
Choose the installer for your platform:
Windows
GitBox-1.0.0-x64.exe— NSIS installer (recommended)GitBox-1.0.0-x64.msi— MSI installer
Linux
GitBox-1.0.0-x86_64.AppImage— portable, runs anywhereGitBox-1.0.0-amd64.deb— Debian / UbuntuGitBox-1.0.0-x86_64.rpm— Fedora / RHEL / openSUSEGitBox-1.0.0-x64.pacman— Arch Linux