Sapling is a [[GPLv2]] licensed version control system written in [[Rust]] and [[Python]]. - [Website](https://sapling-scm.com/) - [Source](https://github.com/facebook/sapling) - Documentation > Sapling SCM is a cross-platform, highly scalable, Git-compatible source control system. # Notability Despite it's tagline, Sapling is actually a fork of [[Mercurial]]. # Philosophy Sapling began as a fork of Mercurial. > The Sapling CLI, `sl`, was originally based on [Mercurial](https://www.mercurial-scm.org/), and shares various aspects of the UI and features of Mercurial. But then, due to Facebook's need for centralized control, built a dedicated server system for it. To enable [[Perforce]]-like checkout notifications, they built a virtual file system. Unfortunately, the server and virtual file system do "not build in an open source context". Whatever the hell that means. So the source is out there, but presumably, the build toolchain is completely fubar. > Building the Sapling CLI requires Python 3.8, Rust, CMake, and OpenSSL for the main cli, and Node and Yarn for the ISL web UI. I mean, even that is pretty hairy. And this messy blending and layered requirements of multiple full ecosystems is getting to be exceedingly common. ## License If it had not been built atop Mercurial, I highly doubt it would have ended up being licensed GPL. I find it really interesting that they decided to extend Mercurial and keep the license rather than building their own. # Platform Support # Features - Friendlier command line than [[git|git]], thanks to [[Mercurial|hg]] roots - Dedicated server software (which is mainly due to Facebook's need to centralize everything) - Dedicated virtual file system which could be really cool if it weren't centralized ## VFS > EdenFS is a virtual file system for managing Sapling checkouts. > EdenFS speeds up operations in large repositories by only populating working directory files on demand, as they are accessed. This makes operations like `checkout` much faster, in exchange for a small performance hit when first accessing new files. This is quite beneficial in large repositories where developers often only work with a small subset of the repository at a time. # Tips ## Vs Git - [Comparison vs Git Commands](https://sapling-scm.com/docs/introduction/git-cheat-sheet/) # References