- Category
- Developer Tools
- Rank
- No. 1065Tools index
Previous survey · No. 1076 ·
- Pricing
- Open Source
- Type
- TOOL
- Use case
- Coding
- Interfaces
- CLI
- GitHub
- 986 stars
- Latest release
- v0.0.14
- Date
About
Gat adds Git-LFS-style large file versioning without requiring a dedicated LFS server: it points at an S3, Azure Blob, or GCS bucket (or a plain directory) and lets normal git commands like commit, push, pull, and clone continue to work unchanged. A gat.lock file tracks which large files belong to each commit, and git hooks installed by gat init run a sync step after checkout, merge, pull, or rebase so the working tree always matches the locked state.
What it does
Gat splits a heavy asset into two halves: its identity and its bytes. Each tracked path gets a content ID, a BLAKE3 hash of the bytes, and Git versions only that small mapping. The bytes sit in a local cache keyed by that ID and, when configured, in object storage you already own. Switching branches changes which IDs belong at which paths, and Gat restores the matching files from the cache, downloading only what is missing. Identical bytes share one stored object across paths and revisions.
Why it's ranked here
It removes the part of Git LFS that teams resent: the dedicated server. Storage is any of five backends (S3 and compatible services, Azure Blob, Google Cloud Storage, Alibaba OSS, or a local directory), and there is no clean or smudge filter rewriting files behind your back. The engineering is unusually disciplined for a young tool: Apache 2.0, written in Rust, with every pedantic and nursery lint set to deny, and interruption handling that finishes consistency-critical writes before exiting. The documented migration path from Git LFS needs no history rewrite or force-push.
What's good
Sync refuses to overwrite local edits: if replacing or removing a file would discard changes, it reports a conflict instead, and a dry-run flag previews the plan. Because identity is the hash, renaming a tracked file reuses cached content rather than re-uploading it. Cached versions restore offline. The storage docs are candid about sharp edges, for example that S3 needs an explicit signing region and that AWS SSO profiles must be exported first. A docs-only MCP server lets an AI assistant search the documentation.
Tradeoffs
Hooks cover checkout, merge, pull and rebase, but after a hard reset or a restore you must run sync yourself. The status command compares metadata, not file contents, so an edited asset looks unchanged until you add it again. Every clone needs its own init. Routes and mounts are marked experimental. It does not replace Git LFS file locking, and history from before a migration still needs LFS and its old storage. Credentials pasted into a remote URL are saved as entered, so keep them in environment variables.
How to use it well
Fit: a team versioning model weights, datasets or media alongside code, with a bucket already paid for. Run init in every clone, push bytes with Gat before pushing commits with Git so teammates never fetch a commit whose content is missing, and set a default remote, since adding one does not select it. Keep the default copy strategy or reflinks for files you edit; hardlinks and symlinks share bytes with the cache. It is not a data pipeline tool: no DVC-style stages, just storage and restore.
Technical notes+
Cargo.toml defines a workspace split into gat-core (pure domain types, documented in gat-core/src/lib.rs as touching no I/O), gat-io, gat-engine, gat-command and the root binary; storage goes through opendal with s3, azblob, gcs, oss and fs services, local state through rusqlite. gat-engine/src/lib.rs pins its private surface with compile_fail doctests so internal types cannot leak. src/main.rs builds one sized Rayon pool and Tokio runtime, keeps dispatch synchronous, and maps interruption to exit codes 130 and 143 per docs/concepts/how-gat-works.mdx. The release profile uses fat LTO and a single codegen unit.
Observed
- License
- Apache-2.0 (Cargo.toml)
- Language
- Rust, with a declared minimum supported Rust version
- Interface
- Command-line tool; docs-search MCP server that does not run commands
- Install
- Shell and PowerShell install scripts with checksum verification, or cargo install from source
- Storage backends
- S3 and S3-compatible, Azure Blob, Google Cloud Storage, Alibaba OSS, local directory
- Content addressing
- BLAKE3 hash of file bytes, per docs/concepts/how-gat-works.mdx
- Lints
- Clippy all, pedantic, nursery and cargo groups set to deny
Read from README.md, Cargo.toml, docs/concepts/how-gat-works.mdx, docs/quickstart.mdx, docs/references/remote-providers.mdx, docs/guides/migrating-from-git-lfs.mdx, src/main.rs, src/cli.rs, gat-engine/src/lib.rs, gat-engine/src/transfer/mod.rs, gat-core/src/lib.rs, docs/guides/use-gat-mcp.mdx.
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.