Lightning-fast git, pure TypeScript, everywhere.
Pure TypeScript git — Node.js, browser, Deno, Bun, and Cloudflare Workers. Zero native deps. Zero WASM. Stable v1, semver-tracked — see BACKLOG for the roadmap.
npm install @scolladon/tsgitimport{openRepository}from'@scolladon/tsgit';constrepo=awaitopenRepository({cwd: process.cwd()});constcommits=awaitrepo.log({limit: 10});const{ clean, branch, changes, untracked }=awaitrepo.status();awaitrepo.dispose();| Runtime | Import |
|---|---|
| Node.js 22+ | @scolladon/tsgit |
| Browser (OPFS) | @scolladon/tsgit/auto/browser |
| Browser (no build) | https://unpkg.com/@scolladon/tsgit@3/dist/browser/tsgit.js |
| In-memory (tests) | @scolladon/tsgit/auto/memory |
| Deno | npm:@scolladon/tsgit |
| Bun | @scolladon/tsgit |
| Cloudflare Workers | @scolladon/tsgit/auto/memory |
→ Full quickstart per runtime · recipes — partial clone, sparse checkout, hooks, …
- Zero runtime dependencies — no transitive surface
- Pure TypeScript — no native code, no WASM, no
gitbinary required - Cross-runtime — Node 22+ · Deno · Bun · Cloudflare Workers · Browser (OPFS) · in-memory
- Tree-shakeable —
sideEffects: false; each primitive is an independent entry - CJS + ESM dual-publish, verified by
arethetypeswrong - 46 Tier-1 commands · 20+ AsyncIterable primitives · operator toolkit (
pipe,filter,map, …) - Snapshot+join surface — query tree / index / workdir / stash through one lazy, atomic-iteration pipeline (primer)
- Type-safe — branded
ObjectId/RefName/FilePath, discriminated-union errors, noany - AbortSignal lifetime —
repo.dispose()cancels in-flight work
→ Commands · primitives · snapshots · errors
tsgit is benchmarked nightly in CI. Current numbers, methodology, and trade-offs live in the performance analysis.
- 📖 Get started — Node, browser, memory, migration from isomorphic-git
- 🛠️ Use it — commands, primitives, recipes, errors
- 🧠 Understand it — architecture, design decisions, performance, security
See CONTRIBUTING.md.