A browser-based Git GUI client — Git, but pleasant. Built with Nuxt 4 and the Bun runtime.
SauceCtrl runs as a local, desktop-style app: the browser renders the UI while a local Nitro (Bun) server does the real work — running git, talking to the GitHub CLI (gh), spawning interactive terminals, and caching state in SQLite.
Originally started by @rohit-gh as a side project — ideas, feedback, and contributions are always welcome.
- Projects sidebar — add and switch between multiple local repositories
- Header — selected project, branch dropdown (local + remote) with checkout
- Commit history graph — GitKraken-style lanes, nodes, and merge edges
- Commit details — message, author, date, parents, per-file change stats
- Staging & commit — stage/unstage files and commit with a message
- Integrated terminal — real PTY at the repo location (bottom panel)
- GitHub setup — install/authenticate
ghin an embedded terminal - SQLite cache — projects and settings in
~/.sauce-ctrl/
bun install
cp .env.example .env # optional
bun run devOpen the printed URL (e.g. http://localhost:3001). See docs/getting-started.md for full setup and troubleshooting.
Prefer not to keep a dev environment running? You can build a single AppImage — one portable file you double-click or launch from your app menu, with no separate install step.
bun install
bun run build:appimageWhen it finishes, the AppImage is ready to run in two places:
release/SauceCtrl-x86_64.AppImage(in the project)- your Downloads folder — copied there and made executable for you, so you can run it straight away
~/Downloads/SauceCtrl-x86_64.AppImageThe AppImage bundles SauceCtrl and the Bun runtime together. You still need git on your machine (and gh if you want GitHub features). Your projects and settings live in ~/.sauce-ctrl/ as usual.
More detail — including what happens on launch and machines without FUSE — is in Package as a Linux app in the getting-started guide.
| Doc | Description |
|---|---|
| docs/README.md | Knowledge base index |
| docs/getting-started.md | Install, run, AppImage, env vars |
| docs/architecture.md | System design and constraints |
| docs/project-map.md | File index and API reference |
| AGENTS.md | Quick guide for AI coding agents |
| .cursor/rules/ | Cursor rules (architecture, frontend, server) |
- Bun ≥ 1.2
git- Linux with
libutilandsetsid(PTY) ghoptional (installable from the app)
Copy .env.example to .env. The main SauceCtrl variable:
| Variable | Default | Purpose |
|---|---|---|
SAUCE_WS_PORT |
3009 |
Terminal WebSocket server port |
ssr: false— client-rendered SPA; server is a local API host- Terminal — FFI
openptyviabun:ffi; WebSocket on a dedicated Bun child process (server/terminal-server.ts) - Git — thin wrappers over the
gitCLI inserver/utils/git.ts
Full details: docs/architecture.md
Contributions are welcome! See CONTRIBUTING.md.
Please read our Code of Conduct. Security issues: SECURITY.md.
This project was created with Cursor, the AI-powered code editor.
MIT © SauceCtrl Contributors