SikaGit — Self-Hosted Git GUI for Developers
The open-source, self-hosted Git GUI client you run in Docker.
Visual commit graph, inline diff viewer, hunk-level staging, built-in terminal, AI commit messages — all from your browser.
A free alternative to GitKraken, Sourcetree, and GitHub Desktop that runs on your own machine.
GitKraken
Sourcetree
GitHub Desktop
SikaGit
Self-hosted
No
No
No
Yes
Runs in Docker
No
No
No
Yes
Visual commit graph
Yes
Yes
No
Yes
Hunk-level staging
Yes
Yes
No
Yes
Built-in terminal
No
No
No
Yes
AI commit messages
No
No
No
Yes
Run dev servers
No
No
No
Yes
Free for personal use
Limited
Yes
Yes
Yes
Open source
No
No
Partial
Yes
git clone https://github.com/AhmedSayedSk/sikagit.git
cd sikagit
docker compose up --build
Open http://localhost:3200 in your browser.
docker compose -f docker-compose.prod.yml up --build -d
Features — What Can SikaGit Do?
Visual Commit Graph — Lane-based rendering with color-coded branches, merge curves, and uncommitted changes
Inline Diff Viewer — Syntax-highlighted diffs with hunk-level staging and discarding
File Staging — Staged/unstaged panels with folder grouping and bulk actions
Commit Management — Author identity auto-detection from local, global, or host git config
Branch & Tag Support — Inline branch/tag labels with automatic remote default branch detection
Remote Operations — Push, pull (merge or rebase), fetch, and remote URL configuration
Multi-Repo Organization — Group repositories under projects with collapsible tree navigation
Run & Build — Execute dev servers and builds with real-time terminal streaming
Process Monitoring — Live CPU/memory stats, port auto-detection, and lifecycle management
AI Commits — Generate commit messages and smart commit grouping from staged changes
HMR in Docker — Polling-based file watching for Next.js, Vite, CRA, Angular
Binary Detection — Prevents diff viewer freeze on video, audio, and archive files
WSL Compatible — Seamless Windows Subsystem for Linux path handling
Clickable URLs — Ctrl+Click terminal links to open in browser
Service
Port
Description
Client
3200
Web interface
API Server
3001
Express + Socket.io
Reserved Dev Server Ports
The following ports are mapped through Docker so dev servers started by SikaGit are accessible from your host browser:
Ports
Typical Use
3000, 3002-3010, 3220
React, Next.js, Node.js
4200
Angular
5000-5001
Flask, .NET
8080-8090
Spring, Go, General
9000
PHP, Portainer
Configuration & Environment Variables
Variable
Default
Description
PORT
3001
API server port
CORS_ORIGINS
http://localhost:3200
Allowed CORS origins
DATA_DIR
/app/server/data
SQLite database path
VITE_API_URL
http://server:3001
Backend URL (client in Docker)
GIT_SSH_COMMAND
ssh -o StrictHostKeyChecking=no
SSH config for remotes
AZURE_DEVOPS_PAT
—
Azure DevOps token (optional)
Usage — How to Use SikaGit
Adding a Repository
Click + in the sidebar
Browse to your repository folder or paste the path
The repo appears in the sidebar with its git status
Organizing with Projects
Click New Project in the sidebar
Name your project and select repositories to include
Repos are grouped under the project with a collapsible view
Committing Changes
Select a repository from the sidebar
Review changed files in the Unstaged panel
Stage files individually or click Stage All
Click a file to view its diff — use Stage Hunk for partial staging
Write your commit message and click Commit
Running Dev Servers
Open repo settings and set a Run Command (e.g., npx next dev)
Optionally set a fixed Port to avoid conflicts
Click Play — terminal output streams in real-time
URLs in output are clickable (Ctrl+Click to open in browser)
HMR works automatically via polling-based file watching
Remote Operations
Configure the remote URL in repository settings
Use Push , Pull , or Fetch from the toolbar
Pull supports both merge and rebase strategies
SSH keys from ~/.ssh are automatically mounted into Docker
Frontend React 19 · Vite 6 · TailwindCSS 4 · Zustand · Radix UI · Lucide Icons
Backend Node.js 22 · Express · Simple-git · Socket.io
Database SQLite (better-sqlite3)
Infra Docker · Docker Compose · npm Workspaces
Language TypeScript 5.9 (shared types across client & server)
sikagit/
├── client/ React frontend (Vite)
│ └── src/
│ ├── components/
│ │ ├── diff/ Diff viewer & image preview
│ │ ├── files/ File staging panels
│ │ ├── graph/ Commit graph rendering
│ │ ├── layout/ Sidebar, MainContent
│ │ ├── log/ Commit list & detail
│ │ ├── operations/ Dialogs (commit, settings)
│ │ └── ui/ Reusable primitives
│ ├── lib/ API client, ANSI parser
│ └── store/ Zustand state stores
│
├── server/ Express API server
│ └── src/
│ ├── routes/ git, repos, projects, run, browse, ai
│ └── services/ Git, DB, storage services
│
├── shared/ Shared TypeScript types
├── data/ SQLite database (auto-created)
├── docker-compose.yml Development
└── docker-compose.prod.yml Production
API Reference
Method
Endpoint
Description
GET
/api/v1/repos
List all repositories
POST
/api/v1/repos
Add a repository
PATCH
/api/v1/repos/:id
Update repo settings
DELETE
/api/v1/repos/:id
Remove a repository
Method
Endpoint
Description
GET
/api/v1/projects
List all projects
POST
/api/v1/projects
Create a project
PATCH
/api/v1/projects/:id
Update project
DELETE
/api/v1/projects/:id
Delete a project
Method
Endpoint
Description
GET
/api/v1/git/graph
Commit graph with lane rendering
GET
/api/v1/git/status
Detailed file status
GET
/api/v1/git/status-summary
Batch status (multiple repos)
GET
/api/v1/git/branches
Branches and tags
GET
/api/v1/git/config
Git configuration
POST
/api/v1/git/config
Set config values
POST
/api/v1/git/stage
Stage files
POST
/api/v1/git/unstage
Unstage files
POST
/api/v1/git/stage-hunk
Stage a diff hunk
POST
/api/v1/git/discard-hunk
Discard a diff hunk
POST
/api/v1/git/commit
Create a commit
POST
/api/v1/git/push
Push to remote
POST
/api/v1/git/pull
Pull (merge or rebase)
POST
/api/v1/git/fetch
Fetch from remote
POST
/api/v1/git/remote-url
Set remote URL
POST
/api/v1/git/test-remote
Test remote connection
GET
/api/v1/git/diff
File diff
GET
/api/v1/git/file
File content at commit
Method
Endpoint
Description
POST
/api/v1/run/:id/start
Start dev server
POST
/api/v1/run/:id/stop
Stop dev server
GET
/api/v1/run/:id/status
Process status & port
GET
/api/v1/run/:id/output
Buffered terminal output
POST
/api/v1/run/:id/build
Start build
POST
/api/v1/run/:id/build/stop
Stop build
Real-time Events (Socket.io)
Event
Description
run:output:{repoId}
Terminal output lines
run:port:{repoId}
Detected dev server port
run:stats:{repoId}
CPU/memory (every 2s)
run:exit:{repoId}
Process exit code
Scripts
# Development
npm run dev # Client + server with hot reload
npm run docker:dev # Docker Compose (foreground)
npm run docker:dev:detach # Docker Compose (background)
# Production
npm run build # Build all packages
npm run docker:prod # Production (foreground)
npm run docker:prod:detach # Production (background)
# Utilities
npm run lint # Lint client and server
npm run docker:down # Stop containers
npm run docker:logs # Tail logs
We welcome contributions! Please read our Contributing Guide before submitting a pull request.
SikaGit is released under the Sikasio Source Available License .
Free for personal use. Commercial use requires a license from Sikasio .
git gui · git client · self-hosted git · docker git gui · visual commit graph · diff viewer · git staging tool · gitkraken alternative · sourcetree alternative · github desktop alternative · open source git gui · react git client · node.js git gui · wsl git gui · ai commit messages · git branch visualization · hunk staging · dev server manager · docker developer tools
Built by Sikasio — A design & development studio from Cairo, Egypt.