gity vs Watchman
Meta's general-purpose file watcher versus a focused Git accelerator. Here's how to pick — and when running both makes sense.
When to pick gity
- Your only goal is fast Git operations on large repos
- You want one command to set up acceleration plus background prefetch and maintenance
- You work with multiple worktrees of the same monorepo
- You run CI on ephemeral machines and want a 'service one Git command and exit' mode
- You want a single small (~12 MB) binary you can drop in via every package manager
When to pick Watchman
- You already run Watchman for Jest, Mercurial, Buck, or other tooling
- You need the trigger system to run arbitrary commands on file changes
- You want a general file-watching framework, not a Git-specific tool
- You're on Meta-scale repos where Watchman has the most battle-testing
TL;DR
Both gity and Watchman implement Git’s fsmonitor v2 protocol and will speed git status up by roughly the same factor. The decision comes down to scope:
- Watchman is a general-purpose file watcher (powers Jest, Mercurial, Buck, etc.). Fsmonitor is one feature among many.
- gity is a focused Git accelerator with built-in scheduling for prefetch and maintenance, multi-worktree cache sharing, and a CI oneshot mode.
What they have in common
Both:
- Are long-running daemons listening to OS-native file events.
- Implement fsmonitor v2 (sub-millisecond IPC, binary protocol).
- Work on macOS, Linux, and Windows.
- Are free and open-source.
- Make
git statusin a 250k-file monorepo go from 8+ seconds to under 30 milliseconds.
What Watchman has
- A query language (think SQL for files).
- Bindings in Python, C, JavaScript, and Lua.
- A trigger system — run a shell command whenever files matching a pattern change.
- A decade of deployment at Meta scale.
- Integration with non-Git tools (Mercurial, Jest, Buck).
What gity has
- Background
git prefetch+git maintenanceon a CPU- and battery-aware scheduler. - Shared status cache across worktrees of the same object store.
- A
daemon oneshotmode for CI. - A pub/sub subscribe API for IDE integrations.
- A 12 MB single binary, installable via cargo / brew / npm / pip / .deb / .pkg / MSI / snap / choco.
- One-command setup:
gity register <path>.
A typical recommendation
If you already run Watchman, keep it. If you’re starting from zero and your only goal is fast Git operations, install gity.
For deeper details, see our full Watchman comparison post.
Frequently asked questions
Do gity and Watchman conflict?
Not really — they can coexist on the same machine. They both register inotify/FSEvents handles for files they watch, which doubles kernel resources. If both daemons are correctly tuned for their workloads the overhead is small, but it's cleaner to pick one for any given repo.
Is one faster than the other?
Within a few milliseconds of each other for the canonical `git status` use case. Both turn an 8-second walk into a sub-30ms IPC call. The architectural details differ but the user-visible speedup is essentially the same.
Does Watchman do background prefetch?
No. Watchman is a file watcher; it knows nothing about Git objects. If you want background `git prefetch` or `git maintenance`, you need a separate scheduler. gity bundles this in; with Watchman you'd run `git maintenance start` yourself.