macOS · Windows 지원 예정 계정 불필요 git CLI = 진실의 원천

터미널에서 친 것과
똑같은 결과를,
10만 커밋에서도.

uGit은 자체 Git 구현을 만들지 않습니다. 시스템 git을 그대로 실행하고, 실행·파싱·그래프 레이아웃을 별도 프로세스와 워커로 밀어냅니다. UI 스레드는 입력만 처리합니다.

ugit linux +
↶ Undo↷ Redo ⬇ Pull⬆ Push⎇ Branch▣ Stash ⌘P 검색
LOCAL
main
feature/y
feature/x
WORKTREES
../ugit-hotfix
STASHES · 2
WIP on main
WIP3 files
mainfeat: add graph worker
fix: parser NUL split
Merge branch 'feature/x'
x: finish diff renderer
feat: refs panel
feat: graph layout
WIP커밋 상세
UNSTAGED · 2
Mgraph/layout.ts
Agraph/ascii.ts
STAGED · 1
Mexec/GitExecutor.ts
커밋 메시지…
Commit ⌘⏎
⎇ main ↑2 ↓0git 2.50.1fetch 3분 전유휴 CPU 0%
<300ms1만 커밋 첫 그래프 (캐시 有)
1.3Mlinux 리포 커밋, 윈도잉 없이 스크롤
60fps프레임 >16ms 비율 1% 미만
0폴링·로그인·강제 계정
THE PROBLEM

GUI가 멈추는 건
리포가 큰 탓이 아닙니다.

대형 리포에서 클라이언트가 버벅이는 원인은 커밋 수가 아니라 아키텍처입니다. Git 호출과 파싱, 그래프 레이아웃, 그리기가 전부 UI와 같은 스레드·같은 프로세스에 얹혀 있으면, 커밋 1만 개에서 이미 프레임이 무너집니다.

그래서 유료 클라이언트들은 자체 Git 구현이나 인덱스 서버를 붙입니다. 빨라지는 대신 CLI와 결과가 갈라지고, 계정과 클라우드가 따라옵니다.

스레드 모델
보통 git 실행·파싱·레이아웃·그리기가 UI와 한 스레드
uGit 실행은 별도 프로세스, 레이아웃·그리기는 워커. UI 스레드는 입력만
유휴 CPU 0%
진실의 원천
보통 자체 Git 구현이나 인덱스 서버로 우회 → CLI와 결과가 갈라짐
uGit 시스템 git을 그대로 실행. 터미널에서 친 것과 같은 결과
git 2.38+
데이터 경계
보통 계정 로그인과 클라우드 동기화가 사실상 필수
uGit 로컬 SQLite 캐시만. 로그인 화면 없음, 텔레메트리는 opt-in
오프라인 동작
GRAPH LAYOUT

레인은 브랜치를 따라가고,
색은 커밋 체인에 붙습니다.

HEAD의 first-parent 체인은 항상 lane 0에 고정됩니다. 미병합 브랜치의 tip이 topo-order상 먼저 나와도 main은 왼쪽에 남습니다. 아래 그래프는 실제 layoutAll() 데모 출력과 같은 토폴로지입니다.

O(n · L) · L < 30
row 24px 고정 → O(1) 히트테스트
청크 400커밋 재생 검증 25종
COMMIT DETAIL ✓ signed

chore: bump version

oidm6f0d21… laneL0 · color 1 parentsm5 authorhyeon <hyeon@ugit.dev>
행을 클릭하면 우측 패널이 갱신됩니다 — 실제 앱에서는 commit.show 채널 응답입니다.
GRAPH ROW 계약
interface GraphRow {
  oid: string;
  lane: number; color: number;
  through: LaneRef[];   // 통과
  merging: LaneRef[];   // 합류·종료
  toParents: LaneRef[]; // 아래로
  width: number;
}
각 row는 자기 정보만으로 그려집니다. 그래서 가상화·스트리밍에서 전역 엣지 객체가 필요 없습니다.
DEEP DIVE

간판 기능 셋.

01 · CANVAS GRAPH

130만 커밋을 한 줄도 빼지 않고

레이아웃과 그리기가 OffscreenCanvas 워커에서 돌아갑니다. UI 스레드는 스크롤 위치만 보내고, 워커는 보이는 구간의 row만 그립니다. DOM 노드가 늘지 않으니 커밋 수는 스크롤 성능과 무관해집니다.

row 24px 고정라벨은 DOM 오버레이ADR-003
linux · 1,342,001 commits 60 fps
충돌 2개 예상 ours result theirs HUNK 1 · ours <<<<<<< HEAD ======= >>>>>>> theirs ✓ 해결 · ours HUNK 1 · ours merge-tree --write-tree · 헝크 단위 채택
02 · CONFLICT RESOLVER

충돌은 드래그 전에 이미 압니다

머지를 끌어다 놓는 동안 merge-tree --write-tree로 결과를 미리 계산해 “충돌 N개 예상”을 띄웁니다. 실제 해결은 ours / result / theirs 3-pane에서 헝크 단위로, 수동 편집도 같은 창에서.

git 2.38+monaco 3-waybinary/ours-theirs
03 · INTERACTIVE REBASE

todo 파일을 그대로, 다만 눈으로

pick·reword·squash·fixup·drop을 드래그로 편집하면 그 결과가 실제 rebase todo로 나갑니다. 중간에 멈춰도 continue / skip / abort가 그대로 노출되고, 되돌리기는 ref 스냅샷 한 단계입니다.

GIT_SEQUENCE_EDITOR스냅샷 Undo작업 트리 무손상
git rebase -i main~5 pick m1cc03e pick m2718ad pick m39f120 pick squash m4fixup drop m5be014 편집 결과가 그대로 rebase todo로 나갑니다 Undo는 ref 스냅샷 한 단계 · 작업 트리 무손상
FEATURES

나머지 아홉 가지.

01

Canvas 워커 그래프

레이아웃과 그리기를 OffscreenCanvas 워커에서. DOM 그래프가 수만 커밋에서 무너지는 지점을 지나갑니다.

ADR-003
02

Worktree 1급 지원

좌측 패널에서 worktree 생성·삭제·전환. 다른 worktree에 체크아웃된 브랜치도 그래프에 표시합니다.

개선 07
03

머지 결과 미리보기

드래그 중 merge-tree --write-tree로 충돌을 사전 계산해 “충돌 N개 예상” 배지를 띄웁니다.

git 2.38+
04

리포 신뢰

처음 여는 리포는 hooks·fsmonitor·external diff·pager를 차단한 채로 엽니다. 신뢰 후에만 활성화.

개선 08
05

라인 단위 스테이징

선택한 라인만 담은 패치를 만들어 git apply --cached로 적용합니다. git add -p와 결과가 같습니다.

unidiff-zero
06

스냅샷 기반 Undo

ref·HEAD·index 트리를 스냅샷으로 남기고 update-ref/read-tree로 되돌립니다. 작업 트리는 건드리지 않습니다.

MutationLog
07

통합 검색

FTS5 메시지·작성자, 경로, 내용 변경(-S/-G), 커밋 범위를 한 입력창에서. 결과는 그래프에 하이라이트.

SQLite FTS5
08

Git 명령 타임라인

실행된 git 명령·소요 시간·종료 코드를 그대로 보여줍니다. 학습에도, 버그 리포트에도 씁니다.

개발자 모드
09

비활성 탭 언로드

5분 이상 안 쓴 리포는 워처·워커·쿼리를 정리하고, 탭으로 돌아오면 SQLite 캐시로 즉시 복원합니다.

메모리
STATUS

어디까지 왔나.

Phase 0–1스캐폴딩 · Git coreGitExecutor, 파서 7종, 그래프 레이아웃, SQLite 캐시, RepoWatcher. 실제 git 통합 테스트 102건.완료
Phase 2읽기 전용 UI탭, Canvas 그래프 + 라벨 오버레이, refs 패널, 커밋 상세, inline/split diff, 파일 히스토리.완료
Phase 3쓰기 작업라인 단위 스테이징, commit/amend, 브랜치 CRUD, stash, fetch/pull/push, 인증, Undo/Redo.완료
Phase 4고급 Gitinteractive rebase 편집기, 3-pane 충돌 해결기, cherry-pick/revert, worktree, DnD 매트릭스 전체.완료
Phase 5통합xterm 터미널, GitHub/GitLab PAT 계정과 PR 목록·생성·체크아웃, blame 히트맵, 리포 신뢰.완료
Phase 6배포mac universal dmg/zip, win nsis, Cloudflare R2 generic 피드 자동 업데이트, 즉시 로드 번들 0.73MB.완료
Post-v1i18n · 테마 · Provider 확장ko/en 문자열 추출, Bitbucket/Azure Provider, fork PR 체크아웃, 이미지 diff 실제 렌더, 플러그인.진행 예정
Post-v1Windows 실기 검증현재 macOS 실행 검증 + CI 매트릭스 커버. 경로·CRLF·NFC/NFD 시나리오 실기 확인이 남았습니다.진행 예정
STACK

렌더러는 git-core를 import하지 않습니다. 모든 프로세스 경계는 zod 계약으로 입출력을 런타임 검증합니다.

Electron44.2.0
TypeScript6.0.3
React19.2.8
electron-vite5.0.0
TanStack Query5.102.8
zustand5.0.15
zod4.5.4
better-sqlite313.0.3
xterm6.0.0
monaco-editor0.56.0
Biome2.5.12
Playwright1.63.0
DOWNLOAD · 0.2.0

지원 플랫폼과 전제 조건.

시스템에 설치된 git을 실행하므로 별도 Git 설치가 필요합니다. 자동 업데이트는 Cloudflare R2 피드를 씁니다.

PLATFORMFORMATSIZE요구 사항상태
macOS (Apple Silicon).dmg / .zip112 MBmacOS 13+실기 검증
macOS (Intel).dmg / .zip112 MBmacOS 13+universal
Windows x64.exe (nsis)Windows 10+지원 예정
Windows arm64.exe (nsis)Windows 11지원 예정
Linux미지원
Windows 빌드는 실기 검증 중입니다 — Linux는 Post-v1 항목입니다.
git 2.38 이상 권장 (머지 미리보기·--porcelain=v2 의존).
FAQ

자주 묻는 것.

제품
macOS · Windows용 데스크톱 Git 클라이언트 (Electron)
버전
0.2.0 · MIT 라이선스 · 무료
Git 엔진
시스템 git CLI 직접 실행 — libgit2·isomorphic-git 미사용
전제 조건
git 2.35 이상 설치 (2.38 이상 권장)
그래프 렌더
OffscreenCanvas 워커 — 130만 커밋에서 60fps
첫 그래프
커밋 1만 개 기준 300ms 미만 (캐시 有)
계정
불필요 — 로그인 화면 없음, 오프라인 동작
데이터
로컬 SQLite 캐시만 · 텔레메트리 opt-in

uGit은 무엇인가요?

macOS와 Windows용 데스크톱 Git 클라이언트입니다. 자체 Git 구현 대신 시스템 git CLI를 그대로 실행해 터미널과 동일한 결과를 보장하고, Git 실행·파싱은 별도 프로세스에서, 그래프 레이아웃과 렌더는 OffscreenCanvas 워커에서 처리합니다.

대형 리포에서도 빠른가요?

커밋 그래프를 DOM이 아니라 Canvas로 그리고, 보이는 구간의 row만 렌더합니다. 커밋 1만 개 리포는 캐시가 있을 때 300ms 안에 첫 그래프를 표시하고, linux 리포(약 130만 커밋)에서도 스크롤 중 프레임이 16ms를 넘는 비율이 1% 미만입니다.

계정이 필요한가요?

필요하지 않습니다. 로그인 화면과 라이선스 확인이 없고, 모든 로컬 기능은 계정 없이 동작합니다. GitHub/GitLab 연동, 아바타 로드, 텔레메트리, 크래시 리포트는 모두 opt-in입니다.

Git을 따로 설치해야 하나요?

네. PATH의 시스템 git을 실행하므로 git 2.35 이상이 필요하고, 머지 결과 미리보기 등 일부 기능은 2.38 이상을 요구합니다.

내 작업 트리가 안전한가요?

Undo는 ref·HEAD·index 트리 스냅샷을 update-ref/read-tree로 되돌릴 뿐, 작업 트리 파일은 건드리지 않습니다. 터미널에서 리포가 바뀌면 스택을 무효화하고 그 사실을 알립니다.

GitKraken 같은 기존 클라이언트와 무엇이 다른가요?

세 가지가 다릅니다. 자체 Git 구현이나 인덱스 서버를 쓰지 않아 CLI와 결과가 갈라지지 않고, 커밋 그래프가 DOM이 아닌 Canvas 워커에서 그려져 커밋 수가 스크롤 성능에 영향을 주지 않으며, 계정 로그인이 없고 데이터는 로컬 SQLite 캐시에만 남습니다.

무료인가요?

MIT 라이선스로 무료입니다. 좌석 과금이나 팀 라이선스가 없고, 로그인도 요구하지 않습니다.

Linux를 지원하나요?

v1 범위 밖입니다. macOS(universal)는 실기 검증을 마쳤고 Windows(x64/arm64) 빌드는 검증 중이며, Linux는 Post-v1 항목입니다.

계정 없이, 지금 바로.

설치하고 리포를 열면 끝입니다. 로그인 화면도, 라이선스 확인도 없습니다.