9 releases (breaking)
| 0.10.1 | Jan 22, 2026 |
|---|---|
| 0.9.0 | Nov 12, 2025 |
| 0.8.0 | Mar 15, 2025 |
| 0.4.0 | Oct 9, 2024 |
| 0.1.0 | Aug 19, 2023 |
#44 in Embedded development
25,448 downloads per month
Used in 23 crates
(4 directly)
190KB
4.5K
SLoC
About
scm-record is a Rust library for a UI component to interactively select changes to include in a commit. It's meant to be embedded in source control tooling.
You can think of this as an interactive replacement for git add -p, or a reimplementation of hg crecord/hg commit -i. Given a set of changes made by the user, this component presents them to the user and lets them select which of those changes should be staged for commit.
The scm-record library is directly integrated into these projects:
- git-branchless: the
git record -icommand lets you interactively select and commit changes. - Jujutsu: as the built-in diff editor; see the
ui.diff-editorconfiguration option.
Standalone executable
scm-diff-editor is a standalone executable that uses scm-record as the front-end. It can be installed via cargo:
$ cargo install --locked scm-diff-editor
The scm-diff-editor executable can be used with these tools:
- Git: as a difftool.
- Mercurial: via the
extdiffextension. - Likely other source control systems as well.
Future work
Feature wishlist
Here are some features in the UI which are not yet implemented:
- Make the keybindings easier to discover (https://github.com/arxanas/scm-record/issues/25).
- Support accessing the menu with the keyboard (https://github.com/arxanas/scm-record/issues/44).
- Edit one side of the diff in an editor (https://github.com/arxanas/scm-record/issues/83).
- Multi-way split UI to split a commit into more than 2 commits (https://github.com/arxanas/scm-record/issues/73).
- Support for use as a mergetool.
- Commands to select ours/theirs for diffs representing merge conflicts.
Integration with other projects
Here's some projects that don't use scm-record, but could benefit from integration with it (with your contribution):
Dependencies
~13–20MB
~315K SLoC