원문 캡처 · github.com
원문 캡처 · github.com

zig-wasm-git는 파일시스템이나 git 명령 없이 원격 Git 저장소를 읽고 쓰는 클라이언트다. 저장소를 개발 작업 공간으로 다루기보다 버전이 붙는 키-값 저장소로 활용하도록 설계됐다. 브랜치 하나가 키 공간이고 커밋 하나가 버전이며, 주요 기능은 read·write·fetch·push다.

제작자는 Git 프로토콜 엔진을 외부 의존성 없이 Zig로 구현했으며, WASM 바이너리 크기는 약 60KB라고 설명한다. SHA-1, 압축 처리, 팩 파싱과 Git smart HTTP 프로토콜을 지원한다. JavaScript API는 fetch, CompressionStream, crypto.subtle을 사용해 Node.js, 브라우저, Cloudflare Workers, Deno, Bun에서 실행할 수 있다.

npm 패키지는 npm install zig-wasm-git으로 설치한다. 기본 실행 조건은 Node 22.3 이상이며, 그보다 이전 버전에서는 WASM 엔진을 별도로 지정해야 한다. 브라우저에서 쓰려면 Git 서버가 CORS를 허용해야 한다. GitHub와 GitLab은 임의의 브라우저 출처에 smart HTTP 엔드포인트를 제공하지 않으므로 보통 같은 출처의 프록시가 필요하다.

읽기 작업도 로컬에 저장된 데이터가 없으면 원격 요청을 보낼 수 있다. 네트워크 접근 없이 캐시만 읽으려면 { local: true }를 지정한다. 저장소 인터페이스는 동기식이어야 하므로 IndexedDB, D1, R2 같은 비동기 저장소를 직접 연결할 수 없다.

병합은 지원하지 않으며 push는 fast-forward 방식만 허용한다. WASM 메모리 영역 때문에 쓰기 값은 왕복 기준 약 768KB, putMany 한 번의 배치는 약 1MB가 상한이다. 기본 메모리 저장소는 데이터를 삭제하지 않아 인스턴스가 오래 실행될수록 커진다. 자세한 프로토콜 지원 범위는 CAPABILITIES.md, 빌드와 테스트 정보는 CONTRIBUTING.md에서 확인할 수 있다.