# facebook/sapling

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/facebook-sapling).**

6,885 stars · 370 forks · Rust · GPL-2.0

## Links

- GitHub: https://github.com/facebook/sapling
- Homepage: https://sapling-scm.com
- awesome-repositories: https://awesome-repositories.com/repository/facebook-sapling.md

## Description

Sapling is a scalable version control system designed to handle repositories with millions of files and commits, making it suitable for large monorepos. It reads and writes Git repositories natively, maintaining full interoperability with Git remotes and standard workflows, and provides an interactive commit graph for exploring repository history and state.

The system uses a bookmark-based branching model that eliminates named branches in favor of lightweight, movable labels for commits. It tracks how each commit was created, amended, rebased, or split through commit-graph-based mutation tracking, automatically rebasing dependent commits. Sapling organizes dependent changes into stacks with dedicated commands to create, navigate, edit, and submit them as GitHub pull requests, and provides a web-based commit graph GUI for visual repository exploration.

The tool includes on-demand data fetching and file checkout to speed up large repository operations, sparse checkout with team-shared inclusion and exclusion profiles, and cryptographic commit signing using GPG, SSH, or X.509 backends. It offers IDE integration through extensions for Visual Studio and VS Code, and provides configuration management, logging verbosity controls, and a development environment setup for contributors.

## Tags

### Part of an Awesome List

- [Git and Version Control](https://awesome-repositories.com/f/awesome-lists/devtools/git-and-version-control.md) — Operates a source control system that reads and writes Git repositories natively, staying fully interoperable with Git remotes and workflows.
- [Large Monorepo Version Control Systems](https://awesome-repositories.com/f/awesome-lists/devops/monorepos/large-monorepo-version-control-systems.md) — Handles repositories with tens of millions of files and commits for large monorepos. ([source](https://sapling-scm.com/docs/category/working-at-scale))
- [Monorepo-Scale Version Control Systems](https://awesome-repositories.com/f/awesome-lists/devops/monorepos/monorepo-scale-version-control-systems.md) — Handles repositories with tens of millions of files and commits for large monorepos.

### Development Tools & Productivity

- [Git Interoperability Layers](https://awesome-repositories.com/f/development-tools-productivity/git-interoperability-layers.md) — Reads and writes Git repositories natively with full interoperability.
- [Bookmark-Based Commit Labeling](https://awesome-repositories.com/f/development-tools-productivity/branch-management/bookmark-based-commit-labeling.md) — Uses bookmarks as the sole method for labeling commits, eliminating named branches. ([source](https://sapling-scm.com/docs/introduction/differences-hg))
- [Lightweight Bookmark Pointers](https://awesome-repositories.com/f/development-tools-productivity/branch-management/lightweight-bookmark-pointers.md) — Creates and moves named pointers to commits as an alternative to traditional branches. ([source](https://sapling-scm.com/docs/category/overview))
- [Version Control Undo Operations](https://awesome-repositories.com/f/development-tools-productivity/change-tracking/undo-trees/operation-based-undo-history/version-control-undo-operations.md) — Reverts uncommitted or committed modifications, restoring files or the repository to a previous state. ([source](https://sapling-scm.com/docs/introduction/))
- [Working Directory Inspections](https://awesome-repositories.com/f/development-tools-productivity/commit-history-analysis/commit-history-integration/working-directory-inspections.md) — Displays the current commit, log, pending changes, and diff of the working directory. ([source](https://sapling-scm.com/docs/introduction/git-cheat-sheet))
- [Commit History Traversal](https://awesome-repositories.com/f/development-tools-productivity/commit-history-traversal.md) — Traverses the commit graph with interactive tools to inspect changes, branches, and relationships. ([source](https://sapling-scm.com/docs/overview/intro))
- [Commit Amendments](https://awesome-repositories.com/f/development-tools-productivity/commit-management/commit-message-annotations/commit-amendments.md) — Modifies the most recent commit's message or file contents without creating a new commit or rewriting history. ([source](https://sapling-scm.com/docs/introduction/))
- [Commit Mutation Trackers](https://awesome-repositories.com/f/development-tools-productivity/commit-management/commit-message-annotations/commit-amendments/commit-mutation-trackers.md) — Records how each commit was created, amended, rebased, or split, and automatically rebases dependent commits.
- [First-Class Commit Editings](https://awesome-repositories.com/f/development-tools-productivity/commit-management/commit-message-annotations/commit-amendments/first-class-commit-editings.md) — Provides built-in commands to amend, rebase, and otherwise modify commits, with recovery from manipulation mistakes. ([source](https://sapling-scm.com/docs/introduction/differences-hg))
- [Dependent Commit Stacks](https://awesome-repositories.com/f/development-tools-productivity/commit-message-generators/automated-commit-workflows/dependent-commit-stacks.md) — Organizes dependent changes into stacks for independent review and landing.
- [Commit Recording](https://awesome-repositories.com/f/development-tools-productivity/commit-recording.md) — Saves staged changes as a new commit in the repository history. ([source](https://sapling-scm.com/docs/category/commands))
- [Commit Finalization with Messages](https://awesome-repositories.com/f/development-tools-productivity/commit-recording/commit-finalization-with-messages.md) — Records a snapshot of selected file changes into the local commit history with a descriptive message. ([source](https://cdn.jsdelivr.net/gh/facebook/sapling@main/README.md))
- [Bookmark-Based Branching Models](https://awesome-repositories.com/f/development-tools-productivity/development-workflow/environment-branching-patterns/branch-naming-conventions/label-by-branch-name/bookmark-based-branching-models.md) — Uses lightweight, movable bookmarks as the sole method for labeling commits, eliminating named branches.
- [Git Repository Integrators](https://awesome-repositories.com/f/development-tools-productivity/git-repository-integrators/git-repository-integrators.md) — Reads and writes Git repositories natively, maintaining full interoperability with Git remotes and workflows. ([source](https://sapling-scm.com/docs/category/git-interop))
- [Rebase-Based Relocations](https://awesome-repositories.com/f/development-tools-productivity/history-rewriting/commit-rewriting-techniques/rebase-based-relocations.md) — Relocates a commit or stack onto a different parent commit to reorganize history. ([source](https://sapling-scm.com/docs/category/overview))
- [Git Push Operations](https://awesome-repositories.com/f/development-tools-productivity/local-file-syncing/remote-repository-syncing/git-push-operations.md) — Pushes local commits to a remote repository, targeting a specific branch. ([source](https://sapling-scm.com/docs/introduction/git-cheat-sheet))
- [Merge Conflict Resolution](https://awesome-repositories.com/f/development-tools-productivity/merge-conflict-resolution.md) — Guides users through conflict resolution with clear prompts and automated suggestions during merges. ([source](https://cdn.jsdelivr.net/gh/facebook/sapling@main/README.md))
- [Interactive Conflict Resolution Guides](https://awesome-repositories.com/f/development-tools-productivity/merge-conflict-resolution/interactive-conflict-resolution-guides.md) — Guides the user through merge or rebase conflicts with a step-by-step interface that shows both sides of each conflict. ([source](https://sapling-scm.com/docs/overview/intro))
- [Scalable](https://awesome-repositories.com/f/development-tools-productivity/monorepo-managers/scalable.md) — Manages massive repositories with millions of files and commits, enabling teams to work efficiently on a single codebase.
- [Git History Visualizations](https://awesome-repositories.com/f/development-tools-productivity/project-history-navigation/git-history-visualizations.md) — Displays an interactive graph of commits and branches to explore the repository's history and state. ([source](https://cdn.jsdelivr.net/gh/facebook/sapling@main/README.md))
- [Remote Repository Cloning](https://awesome-repositories.com/f/development-tools-productivity/remote-repository-managers/remote-repository-cloning.md) — Clones a remote repository into a local working copy, pulling a subset of remote branches. ([source](https://sapling-scm.com/docs/introduction/git-cheat-sheet))
- [Remote Repository Operations](https://awesome-repositories.com/f/development-tools-productivity/remote-repository-managers/remote-repository-operations.md) — Fetches the latest changes from a remote repository, optionally rebasing local commits on top. ([source](https://sapling-scm.com/docs/introduction/git-cheat-sheet))
- [Remote Repository Synchronization](https://awesome-repositories.com/f/development-tools-productivity/remote-repository-synchronization.md) — Pushes and pulls changes to and from a remote repository, handling stack structure and metadata. ([source](https://sapling-scm.com/docs/overview/intro))
- [Staging and Commit Interfaces](https://awesome-repositories.com/f/development-tools-productivity/staging-and-commit-interfaces.md) — Stages and commits file changes without requiring an explicit staging index or a new branch declaration. ([source](https://sapling-scm.com/docs/introduction/getting-started))
- [Version Operation Undo](https://awesome-repositories.com/f/development-tools-productivity/undo-systems/version-operation-undo.md) — Reverts common actions like commit, amend, or hide with dedicated commands, and previews the repository state before undoing multiple steps. ([source](https://sapling-scm.com/docs/introduction/differences-git))
- [Commit Log Displays](https://awesome-repositories.com/f/development-tools-productivity/version-control-history/commit-log-analysis/commit-log-displays.md) — Displays a chronological log of commits and repository events. ([source](https://sapling-scm.com/docs/category/commands))
- [Commit History Restructuring Operations](https://awesome-repositories.com/f/development-tools-productivity/version-control-repository-tools/version-control-managers/git-utilities/commit-cherry-picking-tools/commit-history-refinement/commit-history-restructuring-operations.md) — Rebases, cherry-picks, splits, folds, reorders, and absorbs commits to reorganize the project history. ([source](https://sapling-scm.com/docs/introduction/git-cheat-sheet))
- [Commit Graph Visualizers](https://awesome-repositories.com/f/development-tools-productivity/version-control-repository-tools/version-control-managers/repository-utilities/history-analysis-visualization/commit-graph-visualizers.md) — Renders an interactive, visual commit graph in the browser for exploring history, branches, and repository state.
- [Commit Graph Traversal](https://awesome-repositories.com/f/development-tools-productivity/version-control-repository-tools/version-control-managers/repository-utilities/history-analysis-visualization/commit-graph-visualizers/commit-graph-traversal.md) — Traverses the commit history as an interactive, visual graph to inspect branches, merges, and ancestry. ([source](https://sapling-scm.com/docs/overview/intro))
- [Interactive History Browsers](https://awesome-repositories.com/f/development-tools-productivity/version-control-repository-tools/version-control-managers/repository-utilities/history-analysis-visualization/commit-graph-visualizers/interactive-history-editing/interactive-history-browsers.md) — Displays a visual, interactive graph of commits and branches to explore the repository's history. ([source](https://cdn.jsdelivr.net/gh/facebook/sapling@main/README.md))
- [Version Control Systems](https://awesome-repositories.com/f/development-tools-productivity/version-control-systems.md) — A scalable version control system designed for large monorepos.
- [Working Copy Management](https://awesome-repositories.com/f/development-tools-productivity/working-copy-management.md) — Adds, removes, renames, copies, reverts, and cleans files tracked by the version control system. ([source](https://sapling-scm.com/docs/introduction/git-cheat-sheet))
- [Versioned File History](https://awesome-repositories.com/f/development-tools-productivity/automatic-file-tracking/versioned-file-history.md) — Shows the lineage of a file across commits, including renames and content changes over time. ([source](https://sapling-scm.com/docs/overview/intro))
- [Commit Squashing Tools](https://awesome-repositories.com/f/development-tools-productivity/branch-management/commit-squashing-tools.md) — Combines multiple commits into a single commit, preserving the combined changes. ([source](https://sapling-scm.com/docs/category/commands))
- [Branchless Workflows](https://awesome-repositories.com/f/development-tools-productivity/branching-workflows/branchless-workflows.md) — Manages commits as an unlabeled stack using hide and unhide instead of branch deletion. ([source](https://sapling-scm.com/docs/introduction/differences-git))
- [Reversible Commit Hiding](https://awesome-repositories.com/f/development-tools-productivity/commit-history-analysis/hidden-commit-enumeration/reversible-commit-hiding.md) — Marks commits as hidden or visible without stripping them from the repository, allowing reversible removal from the log. ([source](https://sapling-scm.com/docs/category/overview))
- [Line Annotations](https://awesome-repositories.com/f/development-tools-productivity/commit-management/commit-message-annotations/commit-amendments/line-annotations.md) — Shows which commit last modified each line of a file, including author and date. ([source](https://sapling-scm.com/docs/category/commands))
- [Stack Commit Editings](https://awesome-repositories.com/f/development-tools-productivity/commit-management/commit-message-annotations/commit-amendments/stack-commit-editings.md) — Checks out any commit in a stack to amend, split, or fold it, automatically restacking remaining commits. ([source](https://sapling-scm.com/docs/introduction/differences-git))
- [Metadata Editings](https://awesome-repositories.com/f/development-tools-productivity/commit-management/commit-message-annotations/commit-amendments/stack-commit-editings/metadata-editings.md) — Changes the message, user, or date of an existing commit without altering its content. ([source](https://sapling-scm.com/docs/category/commands))
- [Pattern-Based Staging and Deletions](https://awesome-repositories.com/f/development-tools-productivity/developer-utilities-libraries/file-processing-utilities/staged-file-processors/pattern-based-staging-and-deletions.md) — Stages new files and deletes tracked files that match given patterns in a single operation. ([source](https://sapling-scm.com/docs/category/commands))
- [Graphical Repository Explorers](https://awesome-repositories.com/f/development-tools-productivity/file-explorers/git-repository-explorers/graphical-repository-explorers.md) — Provides a web-based graphical interface for navigating commit history and repository state. ([source](https://sapling-scm.com/docs/category/add-ons))
- [Profile-Based](https://awesome-repositories.com/f/development-tools-productivity/file-pattern-matching/sparse-checkouts/profile-based.md) — Stores inclusion and exclusion rules in a checked-in profile for team-wide sparse checkout consistency. ([source](https://sapling-scm.com/docs/introduction/differences-git))
- [Tracked File Removals](https://awesome-repositories.com/f/development-tools-productivity/file-tracking-management/tracked-file-removals.md) — Deletes files from version control and the working directory. ([source](https://sapling-scm.com/docs/category/commands))
- [Race-Free Push Operations](https://awesome-repositories.com/f/development-tools-productivity/local-file-syncing/remote-repository-syncing/git-push-operations/race-free-push-operations.md) — Implements a race-free push that rebases commits on the server to allow concurrent pushes. ([source](https://sapling-scm.com/docs/introduction/differences-git))
- [Multi-Dimensional Scaling Tools](https://awesome-repositories.com/f/development-tools-productivity/multi-dimensional-scaling-tools.md) — Addresses multiple dimensions of scale including data volume, team size, and repository complexity. ([source](https://sapling-scm.com/docs/category/working-at-scale))
- [Organizational Scalability Tools](https://awesome-repositories.com/f/development-tools-productivity/organizational-scalability-tools.md) — Adapts to increasing numbers of engineers without degrading developer tool performance. ([source](https://sapling-scm.com/docs/category/working-at-scale))
- [Stacked Change Review Interfaces](https://awesome-repositories.com/f/development-tools-productivity/pull-request-review-interfaces/stacked-change-review-interfaces.md) — Provides a dedicated interface for reviewing GitHub pull requests that are part of a stack of dependent changes. ([source](https://sapling-scm.com/docs/category/add-ons))
- [Repository GUI Launches](https://awesome-repositories.com/f/development-tools-productivity/shell-command-execution/browser-launch-commands/repository-launches/repository-gui-launches.md) — Ships a command to open an interactive commit graph GUI in the default browser. ([source](https://sapling-scm.com/docs/introduction/getting-started))
- [Source Control Integration Samples](https://awesome-repositories.com/f/development-tools-productivity/source-control-integration-samples.md) — Ships dedicated extensions for Visual Studio and VS Code source control integration. ([source](https://sapling-scm.com/docs/category/add-ons))
- [Work Stashing](https://awesome-repositories.com/f/development-tools-productivity/work-stashing.md) — Temporarily stashes uncommitted changes from the working copy and restores them later by name. ([source](https://sapling-scm.com/docs/category/overview))

### DevOps & Infrastructure

- [Stacked Pull Request Managers](https://awesome-repositories.com/f/devops-infrastructure/version-control-management/version-control-workflows/pull-request-management/stacked-pull-request-managers.md) — Creates, updates, and manages stacks of dependent pull requests directly from the command line. ([source](https://sapling-scm.com/docs/category/git-interop))
- [Git-Native Storage Engines](https://awesome-repositories.com/f/devops-infrastructure/version-control-management/version-control/git-native-storage-engines.md) — Reads and writes Git repositories directly, maintaining full interoperability with Git remotes and workflows.
- [In-Graph](https://awesome-repositories.com/f/devops-infrastructure/cicd-pipeline-automation/cicd-pipeline-management/continuous-integration-integrations/pull-request-status-trackers/in-graph.md) — Shows the review status of GitHub pull requests directly in the commit graph and configures the review domain. ([source](https://sapling-scm.com/docs/introduction/getting-started))
- [Untracked File Removals](https://awesome-repositories.com/f/devops-infrastructure/configuration-management/file-based-configuration/managed-file-removal/untracked-file-removals.md) — Deletes files not tracked by version control from the working directory. ([source](https://sapling-scm.com/docs/category/commands))
- [Commit Stack Editings](https://awesome-repositories.com/f/devops-infrastructure/container-stack-management/commit-stack-editings.md) — Modifies, reorders, or splits a series of stacked commits as a single unit for cleaner patch management. ([source](https://sapling-scm.com/docs/category/overview))
- [Sparse Checkouts](https://awesome-repositories.com/f/devops-infrastructure/sparse-checkouts.md) — Populates working directory files only as they are accessed, using checked-in inclusion/exclusion rules shared across the team.
- [On-Demand File Checkouts](https://awesome-repositories.com/f/devops-infrastructure/sparse-checkouts/on-demand-file-checkouts.md) — Populates working directory files only as they are accessed for faster checkouts. ([source](https://cdn.jsdelivr.net/gh/facebook/sapling@main/README.md))
- [Interactive Change Selections](https://awesome-repositories.com/f/devops-infrastructure/version-control-management/version-control/staging-areas/selective-staging-interfaces/interactive-change-selections.md) — Commits or amends only part of the working copy by interactively selecting changes, or simulates a staging area with temporary commits. ([source](https://sapling-scm.com/docs/introduction/differences-git))

### Repository Format

- [Branch Checkouts](https://awesome-repositories.com/f/repository-format/branch-checkouts.md) — Switches the working directory to a different branch or commit, updating files accordingly. ([source](https://cdn.jsdelivr.net/gh/facebook/sapling@main/README.md))

### Software Engineering & Architecture

- [Stack-Based](https://awesome-repositories.com/f/software-engineering-architecture/project-management-governance/project-governance/contribution-guidelines/pull-request-workflows/pull-request-submissions/stack-based.md) — Creates a separate GitHub pull request for each commit in a local stack of dependent changes. ([source](https://sapling-scm.com/docs/introduction/getting-started))
- [Stacked Change Workflows](https://awesome-repositories.com/f/software-engineering-architecture/stacks/stacked-change-workflows.md) — Organizes dependent commits into linear stacks with dedicated commands to create, navigate, edit, and submit them as pull requests.
- [Change Absorptions](https://awesome-repositories.com/f/software-engineering-architecture/stacks/stacked-change-workflows/change-absorptions.md) — Merges uncommitted changes into the nearest ancestor commit in a stack to keep history linear. ([source](https://sapling-scm.com/docs/category/commands))

### User Interface & Experience

- [Commit Stack Navigations](https://awesome-repositories.com/f/user-interface-experience/navigation-routing/hierarchical-navigation-stacks/commit-stack-navigations.md) — Moves the working copy to any commit in the graph using shortcuts or commands for quick context switching. ([source](https://sapling-scm.com/docs/category/overview))
- [Commit Stack Creations and Navigations](https://awesome-repositories.com/f/user-interface-experience/bottom-sheets/stack-navigator-embeddings/commit-stack-creations-and-navigations.md) — Creates, navigates, and tracks a linear stack of commits with commands to move between them. ([source](https://sapling-scm.com/docs/introduction/getting-started))
- [Stack Managers](https://awesome-repositories.com/f/user-interface-experience/dialogs/stack-managers.md) — Organizes multiple dependent commits into a stack and provides tools to reorder, rebase, or edit them. ([source](https://sapling-scm.com/docs/category/introduction))
- [Focus History Navigation](https://awesome-repositories.com/f/user-interface-experience/workspace-layout-navigation/focus-history-navigation.md) — Shows the commit log starting from the current commit rather than the entire repository, providing a focused view of recent changes. ([source](https://sapling-scm.com/docs/introduction/differences-hg))

### Business & Productivity Software

- [Remote Bookmark Synchronizations](https://awesome-repositories.com/f/business-productivity-software/remote-connection-bookmarks/remote-bookmark-synchronizations.md) — Maintains immutable local copies of server bookmarks that update only on pull, separating local and remote bookmark states. ([source](https://sapling-scm.com/docs/introduction/differences-hg))

### Web Development

- [Repository On-Demand Fetching](https://awesome-repositories.com/f/web-development/data-fetching-caching/on-demand-loaders/package-on-demand-fetching/repository-on-demand-fetching.md) — Clones and pulls only essential data initially, retrieving additional content on demand. ([source](https://sapling-scm.com/docs/introduction/differences-git))
