{"slug": "ingit-git-gui-that-runs-in-the-browsers", "title": "Ingit – Git GUI that runs in the browsers", "summary": "Ingit, a Git GUI that runs in the browser, has been released as a vibecoded alternative to ungit. The tool features a commit graph, optimistic mutations, time machine, GitHub integration, and agent session detection, and is available via npm for Linux and macOS.", "body_md": "A fast, animated git GUI that runs in your browser — a **vibecoded alternative to ungit**.\n\nYes, vibecoded: this codebase is written entirely by AI coding agents, steered by a human with strong opinions about how a git client should feel. If that offends you, ungit is lovely and hand-crafted. If you're curious what an agent-built tool looks like when it's used daily by its author, read on.\n\n**Commit graph**— smooth, virtualized history graph with lanes, edges, and ref labels. Loads thousand-commit windows and paginates on scroll.**Optimistic mutations**— checkout, merge, rebase, cherry-pick, revert, uncommit, branch move/reset animate*immediately*with a predicted graph layout, then reconcile against the real result. Failures roll back.**Time Machine**— a reflog view that shows where HEAD has been and lets you recover \"lost\" commits and deleted branches with one click.** Working tree**— stage/unstage files (or everything), see staged vs unstaged at a glance.** Push / fetch / force-push**— non-fast-forward pushes surface a typed error with a one-click`--force-with-lease`\n\nescape hatch.**GitHub integration**— PRs linked to commits, live CI status dots that poll until check-runs settle (set`GITHUB_TOKEN`\n\nfor private repos / rate limits).**Agent sessions**— detects running** Claude Code**and** Codex**sessions on your machine (terminal, VS Code, cursor…), shows which repo each one works in, its live conversation title, and whether it's busy doing inference right now. Click to focus the exact terminal window or IDE workspace where the agent lives. On GNOME Wayland this uses the[Window Calls](https://extensions.gnome.org/extension/4724/window-calls/)shell extension — ingit offers a one-click install via GNOME's native consent dialog.**Repo browser**— folder tree with git-repo detection, recent repos, and path autocomplete.\n\nRequires [Node.js](https://nodejs.org/) 18+ and `git`\n\n. Install the CLI from npm:\n\n```\nnpm install --global @ingit/cli\n```\n\nThe npm package installs a small launcher and a prebuilt, self-contained ingit binary for Linux or macOS (x64/arm64). Bun is embedded in the binary and does not need to be installed separately.\n\n```\ningit                 # open the repo in the current directory\ningit ~/code/my-repo  # open a specific repo\ningit --port 9000 --no-open\n```\n\nFrom source (needs [bun](https://bun.sh)):\n\n```\ngit clone https://github.com/capaj/ingit\ncd ingit-vibe\nbun install\nbun dev               # server on http://127.0.0.1:8488 + vite dev client\n```\n\nLinux and macOS are supported. Agent detection reads `/proc`\n\non Linux and uses\nthe system `ps`\n\nand `lsof`\n\ntools on macOS. The git UI itself is platform-agnostic.\n\nClick any preview to watch the full recording.\n\n## 01-switch-branches.mp4\n\n## 02-merge-preview.mp4\n\n## 03-rebase-branch.mp4\n\n## 04-cherry-pick.mp4\n\n## 05-time-machine-recover.mp4\n\n## 06-create-branch.mp4\n\n## 07-move-branch.mp4\n\nBun workspaces monorepo:\n\n```\napps/\n  client/       React + Vite + Zustand UI — graph canvas, optimistic layout prediction\n  server/       node:http + WebSocket server, serves the built client and the RPC API\n  cli/          standalone executable via `bun build --compile`, bundles client + server\npackages/\n  git-core/     spawns real git (rev-list/cat-file batch processes), parsers, repo sessions\n  graph-core/   lane allocation + edge building for the commit graph\n  rpc-contract/ zod-typed oRPC contract shared by client and server — single source of truth\n```\n\nClient and server talk over a WebSocket using [oRPC](https://orpc.unnoq.com/) with zod schemas — add an endpoint to `packages/rpc-contract`\n\n, implement it in `apps/server/src/rpc-router.ts`\n\n, call it type-safe from the client.\n\nNo database. No daemon. Plain git under the hood — everything ingit shows you is derivable from your repo, and everything it does is a git command you could have typed.\n\nPRs welcome. Ground rules:\n\n**bun, not npm**— package management and scripts all run through bun.`bun run typecheck`\n\nmust pass (project references,`tsc --build`\n\n).- Tests live next to code (\n`*.test.ts`\n\n,`bun test`\n\n). - The workflow here is agent-first: it's perfectly acceptable (encouraged, even) to develop your contribution with Claude Code, Codex, or whatever you drive — you'll fit right in, and ingit will happily show your agent in its own sidebar while it works on itself. Review what you ship; you own the diff.\n\nGood first areas:\n\n- macOS window focusing (AppleScript can target Terminal/iTerm tabs by tty — cleaner than what Wayland allows).\n- KDE Wayland focusing backend (\n`kdotool`\n\n). - More agents (Gemini CLI, Amp, opencode…) — detection lives in\n`apps/server/src/agent-sessions.ts`\n\nand is ~20 lines per agent. - Diff view polish, partial-file staging.\n\nUse ungit! It's great. ingit exists because I wanted: a faster graph on huge repos, a reflog UI, CI status inline, and a control tower for the half-dozen AI agents working across local checkouts. None of that fit ungit's architecture cleanly, and rewriting from scratch with agents doing the typing took just a few sessions, not months.\n\nModels used: mostly codex with GPT-5.5, some with opus 4.8\n\n- Linux (\n`/proc`\n\nagent detection and GNOME/X11 window focusing) - macOS (\n`ps`\n\n/`lsof`\n\nagent detection; window focusing is not yet implemented)\n\nMIT", "url": "https://wpnews.pro/news/ingit-git-gui-that-runs-in-the-browsers", "canonical_source": "https://github.com/capaj/ingit", "published_at": "2026-07-09 23:51:00+00:00", "updated_at": "2026-07-10 00:06:11.720401+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["Ingit", "Node.js", "GitHub", "Claude Code", "Codex", "GNOME", "Bun", "npm"], "alternates": {"html": "https://wpnews.pro/news/ingit-git-gui-that-runs-in-the-browsers", "markdown": "https://wpnews.pro/news/ingit-git-gui-that-runs-in-the-browsers.md", "text": "https://wpnews.pro/news/ingit-git-gui-that-runs-in-the-browsers.txt", "jsonld": "https://wpnews.pro/news/ingit-git-gui-that-runs-in-the-browsers.jsonld"}}