Furgit is a fast implementation of Git in pure Go, extracted from an internal package of Lindenii Villosa.
Furgit is in initial development, does not have tagged releases yet, and guarantees that the API will break every now and then. Do not use in production.
Currently, Furgit is very basic; it supports reading objects from loose objects and packfiles. There is some infrastructure for writing loose objects and packfiles in the tests but they need to be refactored.
Furgit is aggressively optimized for performance. As of November 2025, for large repos such as Linux, it is:
- close to the performance of upstream git,
- faster than libgit2, and
- faster than go-git by 3 orders of magnitude.
- We only aim to support UNIX-like operating systems that have syscall.Mmap.
- Currently, this version of Furgit only supports SHA-1 hashes. However, the upstream Villosa project only uses SHA-256 hashes. You may edit two lines in hash.go to trivially switch to SHA-256.
- Main SourceHut repository and public inbox for patches and discussions
- GitHub mirror (issues and PRs are welcome here too)
I was thinking of names and I accidentally typed "git" as "fur" (i.e., left shifted one key on my QWERTY keyboard).
Currently, GNU Affero General Public License, version 3 only.
As an exception, pack_idx.go (responsible for .idx files which index packfiles) is public domain; I'd be happy to see a port of it to go-git, although achieving the same level of performance likely requires memory mapping.
.png)
