Kündigen Sie den Git GUI-Abonnement und führen Sie SauceCtrl lokal unter Linux aus.
SauceCtrl ist ein von Bun angetriebener Open-Source-Git-Client für Linux mit einer Seitenleiste für mehrere Repositorien, einem Commit-Graph, einem PTY-Terminal sowie AppImage-Paketierung – ohne monatliche Gebühr.
Ein lokaler, open-source Git-Client für Linux-Arbeitsabläufe: mehrere Repositorien sind gleichzeitig sichtbar, es gibt ein einziges Fenster, und es fallen keine wiederkehrenden Abonnementgebühren an.
Entwickler, die zwischen Debian, Fedora und anderen Distributionen wechseln, beibehalten oft dieselbe Gewohnheit auf verschiedenen Maschinen – mehrere Clones werden gleichzeitig geöffnet – und möchten den Zustand der Branches auf einen Blick sehen, ohne mit separaten Fenstern umgehen zu müssen. Viele kommerzielle Git-GUIs gehen davon aus, dass jeweils nur ein Projekt bearbeitet wird. Dieses Modell eignet sich schlecht, wenn die tägliche Arbeit mehrere Repositorien umfasst.
Auch die Abonnementpreise stellen einen Druck dar. Tools wie GitKraken sind zwar leistungsstark, doch eine Aufforderung zur Erneuerung kann die Frage aufwerfen: Wenn die eigentlichen Bedürfnisse das Wechseln zwischen Branches, ein Commit-Graph, das Staging sowie ein Terminal sind, rechtfertigt das dann eine weitere monatliche Gebühr?
SauceCtrl gibt darauf eine kurze Antwort. Er ist unter der MIT-Lizenz verfügbar, open source und läuft auf dem lokalen Rechner – anstatt als gehosteter SaaS-Client.
Distro-Shopping ist auf Linux-Desktops üblich: Derselbe Entwickler kann Debian auf einer Arbeitsstation, Fedora auf einem Laptop sowie eine unveränderliche Variante auf einem Rechner für unterwegs verwenden. Ein Client, der ohne eigenes Paketarchiv auf all diesen Systemen einwandfrei installiert werden kann, gehört zu den Produktanforderungen und nicht zu einer nachträglichen Überlegung.
Warum jetzt
Zwei Veränderungen im Ökosystem haben es ermöglicht, innerhalb eines Wochenendes eine Build-Prozess durchzuführen.
Die GitHub CLI (gh) übernimmt bereits die Authentifizierung sowie GitHub-Aufgaben direkt aus der Shell. In der Desktop-App ist kein eigenes OAuth-Verfahren nötig – man führt einfach gh auth login aus, beendet den Vorgang im Browser und kann fortfahren. SauceCtrl integriert ein echtes Terminal unten im Fenster, das genau für diese Befehle dient.
Bun bietet eine schnelle JavaScript-Ausführumgebung mit integriertem SQLite und FFI. Das ist wichtig, denn das eingebettete Terminal benötigt ein echtes PTY und nicht nur ein dekoratives Shell-Widget – node-pty funktioniert unter Bun nicht. Daher öffnet die Anwendung ein PTY mithilfe von openpty über bun:ffi. Die Einschränkung ist ungewöhnlich, doch das Ergebnis ist ein nutzbares Terminal.
Moderne, von KI unterstützte Editor haben außerdem den Build-Prozess verkürzt. Früher blieb kaum Zeit für eine persönliche Git-GUI; die Kombination aus Bun, gh sowie agentgestütztem Programmieren macht denselben Ansatz nun realisierbar.
Was es kann
SauceCtrl zeigt eine im Browser dargestellte Benutzeroberfläche in einem Desktop-Fenster an, während ein Bun-Prozess auf dem Host die eigentliche Arbeit erledigt – git aufruft, mit gh kommuniziert, Terminals verwaltet und Projektmetadaten unter ~/.sauce-ctrl/ in SQLite speichert.
Version 0.1 umfasst:
- Eine Mehr-Projekt-Seitenleiste zum Hinzufügen von Repositories und Wechseln dazwischen ohne Neustart der Anwendung
- Eine Branch-Steuerung, die lokale und entfernte Referenzen abdeckt sowie einen Auswahlfunktionen im Menü
- Eine auf Bahnen basierende DAG für die Commit-Geschichte, ähnlich wie bei kostenpflichtigen Kunden
- Detailsfenster zu Commits mit Informationen zum Nachrichtentext, Autor, Datum, Vorgängercommits sowie Statistiken pro Datei
- Vorgänge zum Markieren/Entmarkieren von Inhalten, Eingabe der Commit-Nachricht und Abschluss des Commits
- Eine integrierte Terminal-Ansicht, die auf dem aktiven Repository basiert und
gh auth loginoder andere Befehle ermöglicht - Einen GitHub-Einrichtungsweg, um
ghdirekt aus der Benutzeroberfläche zu installieren und zu authentifizieren
Nichts Exotisches – einfach alles, was man täglich braucht, an einem Ort.
Der AppImage-Teil
Es war unerwünscht, erneut einen empfindlichen Installationspfad pro Distribution zu versenden. Deshalb stellt SauceCtrl die Anwendung als AppImage zur Verfügung: ein einziger Download- und Ausführungsdatei, die die Anwendung zusammen mit dem Bun-Laufzeitumfeld enthält. Projektdaten und Einstellungen befinden sich weiterhin in ~/.sauce-ctrl/, egal ob man die Anwendung aus dem Quellcode oder über das AppImage startet.
Kompilierung aus dem Quellcode mit:
git clone https://github.com/rohit-gh/sauce-ctrl.git
cd sauce-ctrl
bun install
bun run build:appimage
Das Ergebnis liegt bei release/SauceCtrl-x86_64.AppImage. Das Build-Skript kann die Datei auch in den Downloads-Ordner kopieren und als ausführbar markieren. Ein System git ist weiterhin erforderlich (sowie gh, falls GitHub-Funktionen wichtig sind), doch die Unterschiede bei den Paketverwaltern zwischen den Distributionen verschwinden größtenteils.
Technische Stack-Elemente (für Neugierige)
Der Terminalverkehr über WebSockets wird in einem dedizierten Bun-Unterprozess isoliert. In der Praxis führte das Beibehalten dieses Pfades innerhalb von Nitros HTTP-Server dazu, dass Verbindungen blockiert wurden; die Dokumentation enthält eine Workaround-Lösung für Leser, die eine Diagnose wünschen.
Individuell anpassen
Weil das Projekt Open Source ist, können Teams Icons und Themen ändern, den Code forken oder ihre eigenen AppImages erstellen. Für strukturierte Unterstützung sind agentorientierte Kontextdateien wie AGENTS.md sowie Cursor-Regeln vorhanden.
Ziel ist es nicht, eine Funktionsgleichheit mit allen kommerziellen Clients zu erreichen. Stattdessen sollen mehrere Repositorien, ein einheitliches Ansichtskonzept, native Linux-Paketierung sowie keine Abonnementkosten entstehen. Falls dies zu Ihren Anforderungen passt, klonen Sie das SauceCtrl-Repository auf GitHub (Benutzer rohit-gh, Projekt sauce-ctrl) unter der MIT-Lizenz. Probleme und Pull Requests sind willkommen, falls etwas nicht funktioniert oder ein Workflow fehlt.