What's in the window

Twenty-odd views, grouped the way the sidebar groups them. Each one is here because I needed it while working on something else and got tired of leaving. If you'd rather see how to use them than what they are, the guide is the other door.

§ 01 — Graph

The graph, on canvas

Drawn on an HTML canvas rather than as DOM nodes, and only for the rows in the viewport, so a six-figure history scrolls at the same speed as a fresh repo. What the lines mean matters as much as the speed: a merge bends into the lane it opens, in that lane's colour, and a branch that rejoins an existing line bends back into it — so the shape on screen is the shape git recorded.

  • Branch lanes, merge curves, sync-state lines and author highlighting, all coloured from the active theme.
  • ⌘F or / filters by author, message or ref, and the graph re-lays out around the matches.
  • Ref badges coloured by kind — local branch, remote, tag, HEAD — the same colour here and in the commit detail.
  • Select a commit for its message, author, parents and changed files, with a per-file diff.
  • Three-way merge editor, interactive rebase, revert, amend, reset, cherry-pick and blame.
  • J / K walk commits without touching the mouse.
The commit graph: branch lanes, merge curves, ref badges and the commit detail pane
the commit graph, with the selected commit's files beside it
§ 02 — Changes

Staging, down to the line

The changes view is where most of a working day goes, so it takes keyboard input seriously. Hunks collapse, a file can be expanded to its full contents when three lines of context aren't enough, and single lines can be staged, discarded or stashed from the selection.

  • Collapse one hunk or all of them; expand a file to its whole contents and keep that view across a background refresh.
  • Stage, unstage or discard individual lines, or a Shift-selected range.
  • Arrow keys move the cursor, Space stages the file under it, Enter opens its diff.
  • A pencil on any row opens that file in the editor; ⌘E opens whatever the diff pane is showing.
  • Commits honour commit.gpgsign — SSH, GPG or X.509 — and Settings has a Test signing button that shows the real error.
  • Discard is careful with symlinks: a link is removed as a link, whatever it points at.
The changes view with hunks, per-line staging and a side-by-side diff
staging, down to individual lines
§ 03 — Branches & co.

Branches, tags, stashes, worktrees

Branches arrive as a folder tree, because feat/ and fix/ already are one. Star the ones you actually work on and they rise to the top of their own level — a starred feat/thing goes to the top of the feat folder rather than escaping it. A star belongs to the branch, not the ref, so starring develop lights up origin/develop too, and it lives in .beardgit/favorites.json so it survives a relaunch.

  • Local and remote branches, ahead/behind counts, and a chip on any branch whose upstream is [gone].
  • Branch cleanup: one dialog deletes the gone ones in bulk, with "merged into the default branch" as an opt-in second group.
  • Tags and releases, stashes with per-file diffs, and linked worktrees you can create, open in a tab or prune.
  • Compare any two refs — branch, tag or SHA, with autocomplete — for the commits one adds, an ahead/behind summary and a per-file diff.
  • Reflog with recovery actions, for the reset you regret.
The branch list as a folder tree, with starred branches at the top of their level
branches as a folder tree, starred ones first
The submodule panel listing a nested submodule under its parent, with each one’s status
submodules, including the ones inside submodules
The compare view with two refs picked, the commits one adds, and the changed files
compare — what this branch adds over the other one
The stash list with the diff of the selected stash
stashes, with what is actually in them
§ 04 — GitHub & GitLab

GitHub and GitLab

Both, properly, rather than one with the other bolted on. BeardGit talks to them through gh and glab, and ships its own copies of both inside every installer — the same versions for every user, whatever is on your PATH. Your existing login carries over, because those CLIs keep credentials in your own config and keyring, not in the binary.

  • Pull requests and merge requests: open, edit, comment, approve, merge, with per-file diffs and inline review threads. [ and ] walk the files.
  • Issues with labels, milestones and assignees; releases with streamed asset uploads.
  • Repo settings — description, homepage, topics, visibility, default branch, branch protection, labels — without opening a browser.
  • Self-hosted GitHub Enterprise and on-prem GitLab work as they are; auth is checked per host, so a VPN-only forge can't shadow a working one.
  • A personal gitlab.com and a corporate GitLab can be connected at the same time.
A pull request with its CI status, per-file diff and inline review threads
a pull request, reviewed without leaving the app
A GitLab merge request with its pipeline status and review threads
a GitLab merge request — the same view, the other forge
The issue list with labels and the selected issue open beside it
issues, with labels, assignees and comments
The release list with notes and attached assets
releases, published and uploaded from here
§ 05 — CI/CD

Pipelines, and the log you actually want

GitHub Actions runs and GitLab pipelines in the same view, with the job list underneath and its log in a pane you can keep open while you work. Wide build matrices are followed to the end rather than cut off at the first hundred jobs.

  • Trigger, retry, retry only the failed jobs, or cancel — from the row.
  • Job logs stream into a pane that keeps its place when you leave the view and come back.
  • Search chips filter by status, branch or ref.
  • The graph shows the pipeline status of a commit next to it, so a red build is visible where you already are.
A GitHub Actions run with its job list and streamed job log
a GitHub Actions run, jobs and log included
A GitLab pipeline with its stages and jobs
a GitLab pipeline, in the same view
§ 06 — AI

AI runs in a worktree

BeardGit doesn't have a model or an API key. It drives your install of Claude Code, Codex or OpenCode, and it does it somewhere that can't ruin your afternoon: each background run gets its own ai/<provider>/<slug> branch in an isolated worktree, queued at a concurrency cap you set. Your checkout doesn't move while it works.

  • Read the transcript as it streams, then merge the branch, keep the worktree for later, or throw it away.
  • The run writes a Markdown report into the parent repository, so it survives discarding the worktree.
  • From any view the active provider can draft a commit message, review your staged changes, or review a pull request — and stays quiet when there's nothing to talk about.
  • Prompts go over stdin, so a large staged diff is reviewed whole instead of being cut at the command-line limit.
  • One switch in Settings turns the whole thing off: no CLI probing at launch, no AI views, no AI actions.
An AI session with its transcript, the worktree it ran in and the saved report
an AI run, in its own worktree, with the transcript kept
§ 07 — Requests

An .http workspace inside the repo

The request that reproduces a bug belongs next to the code that has the bug, not in a desktop app's private database. These are plain .http files under .beardgit/requests/: commit them and git pull hands them to the rest of the team.

  • Environments are commit-safe JSON under _env/: variables in the file, secrets by name only, with the values encrypted on your machine.
  • {{var}} autocomplete, JSON syntax highlighting, and a resolved preview before you send.
  • Response history per request, with a diff between any two responses you've had.
  • Copy as cURL, fetch, HTTPie or wget. Cancel actually cancels the in-flight request.
  • Private and loopback addresses are refused unless you opt in — the guide has the flag.
The .http request workspace with the request, the composed body and the environment picker
an .http request, committed next to the code that calls it
§ 08 — Editor

A file editor for the two-line fix

Not a replacement for your IDE — a place to fix the typo you just saw in the diff without changing windows. CodeMirror 6, with a gitignore-aware tree that lists one level at a time and keeps its open tabs, expanded folders and unsaved edits when you leave the view and come back.

  • Per-language snippets (Rust, TypeScript, JavaScript, Python, Go), keyword completion and indent guides.
  • JSON linting, with extra rules for package.json and tsconfig.json, and inline colour pickers in CSS.
  • Save writes to disk; save with Shift also stages the file for the next commit.
  • Reveal the active file in the tree, on by default: the folders open and the row scrolls into view.
  • Right-click a file in Changes, Branches or Reflog and open it here.
The in-app file editor with the repository tree, tabs and syntax highlighting
the file editor, for the fix that doesn't deserve a context switch
§ 09 — Bisect & reflog

Bisect and reflog, with buttons

Two commands worth having a face. Pick the good commit and the bad one and step through with buttons; or let auto-mode run your test command at every step and resolve it while you do something else. Bisect works inside a linked worktree or a submodule, which is where it used to silently do nothing.

  • The bisect log is on screen, so you can see what git has concluded so far.
  • Reflog lists every move of HEAD with recovery actions on the row — the safety net for a bad reset or a lost branch tip.
  • Interactive rebase is planned in a dialog and re-checked before it runs, so commits that landed while it was open can't be dropped.
A bisect session in progress with the current commit and the remaining steps
a bisect session, mid-hunt
The reflog with every move of HEAD and its recovery actions
the reflog — the undo you did not know you had
§ 10 — Themes

31 themes, and yours

Three original families — BeardGit, Fjord and Nebula — and the classics you already use in your editor: Rosé Pine, Everforest, Kanagawa, Ayu, Catppuccin, Dracula, Gruvbox, Nord, Tokyo Night, Solarized, Oxocarbon and more. The theme reaches the whole app, including the editor's syntax colours, the diff backgrounds and the graph lanes.

  • Every bundled theme clears the WCAG AA contrast floor on all three text levels, and a test keeps it that way.
  • A theme you write is measured too, and reported — never rewritten. The picker tells you which tokens fall short and by how much, and applies it anyway.
  • Your own theme is a TOML file with 18 colours; the accents, borders, graph lanes and editor palette are derived from them unless you pin your own.
  • Dark and light pair up, so the app can follow your OS.
The theme picker in Settings with the built-in themes and the contrast report
the theme picker, contrast measured
§ 11 — Keyboard

A command palette, and the keys behind it

⌘⇧P lists every view and every registered shortcut, and running one from the palette does exactly what the key does. It's the fastest way to learn the keyboard: find the thing by name, and the palette shows you the shortcut next to it.

  • Type a couple of words in any order — stash, unstage all — and pick the row.
  • ? opens the full cheat sheet, generated from the same registry, so it can't drift from what actually works.
  • On Linux and Windows every below reads as Ctrl.
  • The guide has the complete table — the palette and the cheat sheet are the same list.
The command palette open over the graph, listing views and shortcuts
the command palette — views and every shortcut
§ 12 — Privacy

Yours, and quiet

No account, no telemetry, no analytics endpoint anywhere in the app. Two switches in Settings → General → Integrations decide how much of it is even awake: one for GitHub and GitLab, one for AI. With both off, BeardGit is a git-only client whose only outbound request of its own is the update check — and that has a switch too.

  • Forge off: no saved token is validated at launch, the origin remote isn't resolved against a forge API, and every forge surface hides itself. Accounts are kept, not deleted.
  • AI off: no CLI probing, no AI views, no terminal process polling for an agent. Runs already going finish; history stays readable.
  • Multi-repo tabs load their heavy state only for the tab you're in, so a dozen open repos cost about what one does.
  • Logs are local, rotate daily and are purged after a week; the level is a setting, and secrets are redacted on the way in.
  • The guide lists every file the app writes, on your machine and inside your repo.
Settings showing the GitHub and GitLab connections and the bundled CLI status
the integrations page — and the switch that turns it all off

Now the how

Installing, connecting a forge, writing a theme, the full keyboard table, where your data lives and what to do when something misbehaves — all in the guide.

Read the guide