finds.dev← search

// the find

creationix/js-git

★ 3,847 · JavaScript · MIT · updated Jun 2026

A JavaScript implementation of Git.

A JavaScript implementation of Git's object model and wire protocol, designed to run in browsers and other non-Node environments. It's built around a mixin pattern so you compose exactly the storage backends and capabilities you need — in-memory, IndexedDB, WebSQL, filesystem. The target audience is tooling authors who need Git semantics without shelling out to the native binary.

The mixin architecture is genuinely clever: you get a plain object and mix in only what you need, so a browser app using IndexedDB doesn't drag in filesystem code. The dual callback/generator API support means it wasn't locked to a specific async style. Network layer covers HTTP smart protocol, raw TCP, and a WebSocket proxy for constrained environments — more complete than most JS Git implementations attempt. The pack codec implementation in pure JS is non-trivial work that saves any consumer from having to touch binary formats themselves.

The README still talks about ES6 generators as a new feature and references Chrome flags that haven't existed for a decade — the docs haven't been updated to reflect that async/await made the gen-run pattern obsolete. No npm package.json exports field, no TypeScript types, and the API returns raw binary buffers with no ergonomic helpers for the common cases (reading a file as UTF-8 from HEAD requires four separate operations). The GitHub mount story is punted to a separate repo that appears even more abandoned. Test coverage is light — a handful of codec tests but nothing for the network layer or the composite filesystem that the README spends the most words on.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →