Two ecosystem shapes
Git's ecosystem is sprawling, market-driven, and uneven. Mercurial's is smaller, deliberate, and more cohesive. The trade-off is comprehensive availability versus focused quality.
Hosting
Git hosting is everywhere: GitHub (~100M users), GitLab, Bitbucket, Gitea, Forgejo, sourcehut, self-hosted options at every price point. Mercurial hosting has thinned dramatically: Bitbucket dropped Mercurial in 2020; SourceForge supports it; Heptapod offers Mercurial hosting on a GitLab fork. New Mercurial projects find hosting choices limited.
CI/CD integrations
Every major CI service supports Git natively - GitHub Actions, GitLab CI, CircleCI, Buildkite, Jenkins, Drone. Mercurial support exists but is patchy. Self-hosted Jenkins and similar handle Mercurial fine; modern hosted CI typically requires Git.
IDE support
VS Code, JetBrains, Vim, Emacs, Sublime Text, Visual Studio - all have first-class Git integration with rich features (blame, PR review, commit graph, history filtering). Mercurial integration in the same editors is functional but seldom matches the polish of Git's.
Extension architectures
Mercurial extensions plug into a stable Python API. Notable extensions:
histedit- interactive history editing.mq- patch queues.shelve- stash equivalent.evolve- first-class history mutation tracking.largefiles- LFS-equivalent.
Git's extensibility is via plumbing commands and hooks. Notable third-party tools:
git-lfs- large file storage.git filter-repo- history rewriting.gh,glab,gitlab-cli- host clients.delta,diff-so-fancy- improved diffs.tig,lazygit- terminal UIs.- Hundreds of GitHub Actions for any workflow imaginable.
Hooks
# Git: shell scripts in .git/hooks/
cat > .git/hooks/pre-commit <<'EOF'
#!/usr/bin/env bash
npm test
EOF
chmod +x .git/hooks/pre-commit
# Mercurial: configured in hgrc, can be Python or external
# .hg/hgrc
[hooks]
pretxncommit.tests = npm test
Mercurial's hook configuration is centralised; Git's is per-script. Both work; Mercurial's is easier to share, Git's is easier to script.
Programming-language libraries
Git has libraries for every major language: libgit2 (C), JGit (Java), gitoxide (Rust), pygit2 (Python), nodegit (Node), go-git (Go). Mercurial has its Python core and bindings - fewer alternative implementations.
Documentation and learning materials
Pro Git, the GitHub documentation, the Atlassian guides, and innumerable courses and YouTube tutorials cover Git. Mercurial's documentation is good but smaller; the user community is correspondingly smaller, and answers to obscure questions take longer.
Security tooling
Secret scanning (gitleaks, trufflehog), supply chain attestation (cosign, in-toto), commit signing (gitsign, sigstore), automated dependency updates (Dependabot, Renovate) - all target Git first. Mercurial equivalents exist for some but not all categories.
AI and developer tooling
Modern AI assistants and code generation tools assume Git. Cursor, GitHub Copilot, code review bots all integrate with Git semantics (diffs, branches, PRs). Mercurial users have to bridge or adapt.
Where Mercurial's ecosystem wins
- Heptapod (Mercurial-friendly fork of GitLab) provides a polished hosting and CI experience.
- Mercurial's
evolveextension offers history-mutation tracking that Git lacks - useful for stacked diff workflows. - Sapling, Meta's Mercurial-inspired tool, is the most advanced monorepo client today.
The honest assessment
Network effects are real and self-reinforcing. Git's ecosystem advantage is so large that, for most teams, "use Git" is the right answer not because Git is technically superior but because the auxiliary tools you will need - hosting, CI, IDE, security - are all immediately available. Mercurial remains a fine system; choosing it now means choosing self-reliance for tooling.