터미널에서 친 것과
똑같은 결과를,
10만 커밋에서도.
uGit은 자체 Git 구현을 만들지 않습니다. 시스템 git을 그대로 실행하고, 실행·파싱·그래프 레이아웃을 별도 프로세스와 워커로 밀어냅니다. UI 스레드는 입력만 처리합니다.
GUI가 멈추는 건
리포가 큰 탓이 아닙니다.
대형 리포에서 클라이언트가 버벅이는 원인은 커밋 수가 아니라 아키텍처입니다. Git 호출과 파싱, 그래프 레이아웃, 그리기가 전부 UI와 같은 스레드·같은 프로세스에 얹혀 있으면, 커밋 1만 개에서 이미 프레임이 무너집니다.
그래서 유료 클라이언트들은 자체 Git 구현이나 인덱스 서버를 붙입니다. 빨라지는 대신 CLI와 결과가 갈라지고, 계정과 클라우드가 따라옵니다.
레인은 브랜치를 따라가고,
색은 커밋 체인에 붙습니다.
HEAD의 first-parent 체인은 항상 lane 0에 고정됩니다. 미병합 브랜치의 tip이 topo-order상 먼저 나와도 main은 왼쪽에 남습니다. 아래 그래프는 실제 layoutAll() 데모 출력과 같은 토폴로지입니다.
chore: bump version
commit.show 채널 응답입니다.interface GraphRow {
oid: string;
lane: number; color: number;
through: LaneRef[]; // 통과
merging: LaneRef[]; // 합류·종료
toParents: LaneRef[]; // 아래로
width: number;
}
간판 기능 셋.
130만 커밋을 한 줄도 빼지 않고
레이아웃과 그리기가 OffscreenCanvas 워커에서 돌아갑니다. UI 스레드는 스크롤 위치만 보내고, 워커는 보이는 구간의 row만 그립니다. DOM 노드가 늘지 않으니 커밋 수는 스크롤 성능과 무관해집니다.
충돌은 드래그 전에 이미 압니다
머지를 끌어다 놓는 동안 merge-tree --write-tree로 결과를 미리 계산해 “충돌 N개 예상”을 띄웁니다. 실제 해결은 ours / result / theirs 3-pane에서 헝크 단위로, 수동 편집도 같은 창에서.
todo 파일을 그대로, 다만 눈으로
pick·reword·squash·fixup·drop을 드래그로 편집하면 그 결과가 실제 rebase todo로 나갑니다. 중간에 멈춰도 continue / skip / abort가 그대로 노출되고, 되돌리기는 ref 스냅샷 한 단계입니다.
나머지 아홉 가지.
Canvas 워커 그래프
레이아웃과 그리기를 OffscreenCanvas 워커에서. DOM 그래프가 수만 커밋에서 무너지는 지점을 지나갑니다.
Worktree 1급 지원
좌측 패널에서 worktree 생성·삭제·전환. 다른 worktree에 체크아웃된 브랜치도 그래프에 표시합니다.
머지 결과 미리보기
드래그 중 merge-tree --write-tree로 충돌을 사전 계산해 “충돌 N개 예상” 배지를 띄웁니다.
리포 신뢰
처음 여는 리포는 hooks·fsmonitor·external diff·pager를 차단한 채로 엽니다. 신뢰 후에만 활성화.
라인 단위 스테이징
선택한 라인만 담은 패치를 만들어 git apply --cached로 적용합니다. git add -p와 결과가 같습니다.
스냅샷 기반 Undo
ref·HEAD·index 트리를 스냅샷으로 남기고 update-ref/read-tree로 되돌립니다. 작업 트리는 건드리지 않습니다.
통합 검색
FTS5 메시지·작성자, 경로, 내용 변경(-S/-G), 커밋 범위를 한 입력창에서. 결과는 그래프에 하이라이트.
Git 명령 타임라인
실행된 git 명령·소요 시간·종료 코드를 그대로 보여줍니다. 학습에도, 버그 리포트에도 씁니다.
비활성 탭 언로드
5분 이상 안 쓴 리포는 워처·워커·쿼리를 정리하고, 탭으로 돌아오면 SQLite 캐시로 즉시 복원합니다.
어디까지 왔나.
렌더러는 git-core를 import하지 않습니다. 모든 프로세스 경계는 zod 계약으로 입출력을 런타임 검증합니다.
지원 플랫폼과 전제 조건.
시스템에 설치된 git을 실행하므로 별도 Git 설치가 필요합니다. 자동 업데이트는 Cloudflare R2 피드를 씁니다.
--porcelain=v2 의존).자주 묻는 것.
- 제품
- macOS · Windows용 데스크톱 Git 클라이언트 (Electron)
- 버전
- 0.2.0 · MIT 라이선스 · 무료
- Git 엔진
- 시스템
gitCLI 직접 실행 — 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 항목입니다.
계정 없이, 지금 바로.
설치하고 리포를 열면 끝입니다. 로그인 화면도, 라이선스 확인도 없습니다.