sapling
jj
| sapling | jj | |
|---|---|---|
| 61 | 53 | |
| 6,654 | 23,142 | |
| 0.8% | 6.3% | |
| 10.0 | 10.0 | |
| 4 days ago | 7 days ago | |
| Rust | Rust | |
| GNU General Public License v3.0 only | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
sapling
- SourceFS: A 2h+ Android build becomes a 15M task with a virtual filesystem
The headline times are a bit ridiculous. Are they trying to turn https://github.com/facebook/sapling/blob/main/eden/fs/docs/O... or some git fuse thing into a product?
- Jujutsu for Everyone
You might be interested in how this problem was solved by our team at Meta, in EdenFS (https://github.com/facebook/sapling/blob/main/eden/fs/docs/O...) and Watchman: https://github.com/facebook/watchman.
What you're describing is reasonably similar to EdenFS, except EdenFS runs in userspace.
Watchman layers a consistent view of file metadata on top of inotify (etc), as well as providing stateless queries on top of EdenFS. It acts as a unified interface over regular filesystems as well as Eden.
Back in the day, Watchman sped up status queries by over 5x for a repo with hundreds of thousands of files: https://engineering.fb.com/2014/01/07/core-infra/scaling-mer... I worked directly on this and co-wrote this blog post.
In truth, getting these working was a very difficult systems problem with a ton of event ordering and cache invalidation concerns. For smaller repos, it is much simpler to do linear scans. Since it is really fast on modern hardware anyway, it is also the right thing to do, following the maxim of doing the simplest thing that works.
- Ask HN: Why Did Mercurial Die?:(
It's not really anything like Mercurial anymore. It superficially resembles "hg" but it's a very hacked fork. It's more like sappling. https://sapling-scm.com
- Sapling Version Control System
- Jujutsu for Busy Devs
How does this compare to sapling? https://github.com/facebook/sapling
- Sapling
- Pyrefly vs. Ty: Comparing Python's Two New Rust-Based Type Checkers
Coming from a Meta background (not speaking on behalf of Meta):
"package/dependency management" - Everything is checked into a monorepo, and built with [Buck2](https://buck2.build/). There's tooling to import/update packages, but no need to reinvent pip or other package managers. Btw, Buck2 is pretty awesome and supports a ton of languages beyond python, but hasn't gotten a ton of traction outside of Meta.
"linting, formatting" - [Black](https://github.com/psf/black) and other public ecosystem tooling is great, no need to develop internally.
"why is type checking the exception" - Don't know about Astral, but for Meta / Google, most everyone else doesn't design for the scale of their monorepos. Meta moved from SVN to Git to Mercurial, then forked Mercurial into [Sapling](https://sapling-scm.com/) because simple operations were too slow for the number of files in their repo, and how frequently they receive diffs.
There are obvious safety benefits to type checking, but with how much Python code Meta has, mypy is not an option - it would take far too much time / memory to provide any value.
- Firefox Moves to GitHub
Is it still used there? I know they did in the past, but reading up a bit on the background on all of this I found https://github.com/facebook/sapling
- Pyrefly
Sapling is actively developed, not "dead after 3 months": https://github.com/facebook/sapling/commits/main/
Have not tried building Buck2 (no personal use for it), but its also actively developed: https://github.com/facebook/buck2/commits/main/
- The next generation of Bazel builds
https://github.com/facebook/sapling/tree/main/eden
I'm still unsure if a complete, viable eden solution was released with all of its necessary components.
jj
- Jujutsu v0.36.0 Released
- Stacked Diffs with Git Rebase –Onto
Jujutsu comes in handy here for the same usecase:
https://github.com/jj-vcs/jj
https://www.stavros.io/posts/switch-to-jujutsu-already-a-tut...
- My Dev Tool List 2025
sudo apt install -y \ fzf \ fd-find \ ripgrep \ bat \ tmux # eza (modern ls) sudo apt install -y gpg sudo mkdir -p /etc/apt/keyrings wget -qO- https://raw.githubusercontent.com/eza-community/eza/main/deb.asc | sudo gpg --dearmor -o /etc/apt/keyrings/gierens.gpg echo "deb [signed-by=/etc/apt/keyrings/gierens.gpg] http://deb.gierens.de stable main" | sudo tee /etc/apt/sources.list.d/gierens.list sudo apt update && sudo apt install -y eza # delta (git pager) DELTA_VERSION="0.18.2" wget https://github.com/dandavison/delta/releases/download/${DELTA_VERSION}/git-delta_${DELTA_VERSION}_amd64.deb sudo dpkg -i git-delta_${DELTA_VERSION}_amd64.deb rm git-delta_${DELTA_VERSION}_amd64.deb # mise (version manager) curl https://mise.run | sh # jj (Jujutsu) curl -LsSf https://github.com/jj-vcs/jj/releases/latest/download/jj-x86_64-unknown-linux-musl.tar.gz | tar xzf - -C ~/.local/bin jj # gh (GitHub CLI) curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list sudo apt update && sudo apt install -y gh # Setup chezmoi and pull your dotfiles sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply YOUR_GITHUB_USERNAME
- A Gaggle of Agents
I'm using the jj VCS here, which I recommend looking into for this kind of setup, but you can use a standard git commit/git push flow instead if you prefer.
- Google Antigravity
Hadn't heard of jj, it's a source control tool that advertises that it's fast and compatible with the git on disk format. https://github.com/jj-vcs/jj
- Jujutsu v0.35.0 Released
- Jj v0.35.0 Released
- Jujutsu at Google • Martin von Zweigbergk JJ Con [video]
git has rere, but jj doesn't because its equivalent is built in. https://github.com/jj-vcs/jj/issues/175#issuecomment-1079831... is some discussion about the differences here.
- You Have a Git Server
Case one: you don't need staging. You can stash, or just commit and checkout HEAD^
Case two: you don't need staging. You can stash, and then unstash incrementally (I would be shocked if git doesn't have the equivalent of `hg unshelve --interactive` and its keyboard friendly TUI)
Case three: you don't need staging. You can just edit/amend the series (rebase --interactive I believe you guys call that).
That is to say, all that you want to put in your stash, you could commit directly to the DAG, and edit to your convenience, with the regular history-rewriting tools already at your disposal. And the off-DAG stuff can be handled by stash (and even there, a normal commit that you would rebase to its destination would perfectly do).
And what I described is incidentally what https://github.com/jj-vcs/jj does, which can be pretty-well described as "taking the best of all major VCSes"
What are some alternatives?
hermit - Hermit launches linux x86_64 programs in a special, hermetically isolated sandbox to control their execution. Hermit translates normal, nondeterministic behavior, into deterministic, repeatable behavior. This can be used for various applications, including replay-debugging, reproducible artifacts, chaos mode concurrency testing and bug analysis.
lazygit - simple terminal UI for git commands
dulwich - Pure-Python Git implementation
firefox - The official repository of Mozilla's Firefox web browser.
go-git - A highly extensible Git implementation in pure Go.
git-pr - A pastebin supercharged for git collaboration