Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

270 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tsgit

CI npm License: MIT

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.

Install

npm install @scolladon/tsgit

60-second quickstart

import { openRepository } from '@scolladon/tsgit';

const repo = await openRepository({ cwd: process.cwd() });
const commits = await repo.log({ limit: 10 });
const { clean, branch, changes, untracked } = await repo.status();
await repo.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, …

Capabilities

  • Zero runtime dependencies — no transitive surface
  • Pure TypeScript — no native code, no WASM, no git binary 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
  • 43 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, no any
  • AbortSignal lifetime — repo.dispose() cancels in-flight work

Commands · primitives · snapshots · errors

Why tsgit

Competitive with isomorphic-git, the mainstream pure-TypeScript git library — faster on some paths, slower on others (notably cold-cache / clean-tree reads, where tsgit pays a security-containment lstat cost it is working to amortise):

Scenario tsgit vs isomorphic-git
log (5000-commit walk) 18.6× faster
readBlob (cold pack, 5000-commit repo) 8.6× faster
status (dirty tree) 1.26× faster
clone (small repo) 1.10× (parity)
readBlob (cold cache, small pack) 0.82× (slower)
status (clean tree) 0.40–0.46× (slower)

Measured on a GitHub Actions runner; ±20% variance — trust direction, not absolute numbers.Full benchmarks + methodology

Documentation

  • 📖 Get started — Node, browser, memory, migration from isomorphic-git
  • 🛠️ Use it — commands, primitives, recipes, errors
  • 🧠 Understand it — architecture, design decisions, performance, security

Contribute

See CONTRIBUTING.md.

License

MIT

About

Pure TypeScript git library — Node + browser, zero deps.

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages