An experimental version control software based on deltas.
Find a file
2026-02-11 03:49:08 +00:00
docs refactor: switch storage format from MessagePack to bincode 2026-02-10 21:03:53 +00:00
src show fingerprint instead of bare GPG fallback for gpg signatures 2026-02-10 21:56:01 +00:00
tests fix: GPG signed commit test fails in nix build 2026-02-10 21:53:31 +00:00
.envrc feat: project scaffolding with nix flake, direnv, and CLI skeleton 2026-02-06 17:55:42 +00:00
.gitignore chore: add .arc directory to gitignore 2026-02-06 18:07:35 +00:00
AGENTS.md docs: add AGENTS.md file 2026-02-11 03:49:08 +00:00
Cargo.lock feat: add backwards compatibility for legacy msgpack storage format 2026-02-10 21:09:58 +00:00
Cargo.toml feat: add backwards compatibility for legacy msgpack storage format 2026-02-10 21:09:58 +00:00
flake.lock feat: project scaffolding with nix flake, direnv, and CLI skeleton 2026-02-06 17:55:42 +00:00
flake.nix feat: optional SSH key commit signing (phase 10) 2026-02-08 16:34:05 +00:00
LICENSE.md chore: add license file 2026-02-09 23:58:40 +00:00
README.md refactor: switch storage format from MessagePack to bincode 2026-02-10 21:03:53 +00:00

arc license activity

A delta-based version control system written in Rust.

Unlike Git's snapshot-based model, Arc stores incremental deltas using ZSTD-compressed bincode files. Changes are automatically tracked without manual staging, and commits are immutable once created.

Arc uses a bookmark system instead of branches, and bridges to Git remotes for push, pull, clone, and sync operations via libgit2.

Features

  • Incremental delta storage (ZSTD + bincode)
  • Automatic change tracking (no staging step)
  • Bookmarks and immutable tags
  • Named stashes
  • Three-way merge and graft (cherrypick/rebase)
  • Git bridge for remote operations (push, pull, clone, migrate, sync)
  • Optional SSH commit signing
  • Per-repo and global YAML configuration with aliases
  • .arcignore / .ignore support

Building

Arc builds exclusively through Nix:

nix build

The flake uses nixpkgs-unstable, flake-parts, fenix, and crane.

A dev shell is available for iterative work:

nix develop

Usage

arc init [path]                        Initialize a new repository
arc commit <message>                   Commit current changes
arc status                             Show changes since last commit
arc diff [start..end]                  Show a diff of changes
arc log [start..end]                   Show commit history
arc show <mark|tag|commit>             Show details of a ref or commit
arc history <file> [start..end]        Show per-line modification history

arc switch <mark|tag>                  Switch worktree to a bookmark or tag
arc merge <mark|tag>                   Merge a bookmark or tag into the worktree
arc revert <commit|start..end>         Revert a commit or range
arc reset [file...]                    Reset worktree to the last commit
arc graft <target> --onto <dest>       Cherrypick commits onto a bookmark

arc mark add|rm|list|rename            Manage bookmarks
arc tag add|rm|list                    Manage tags
arc stash create|use|push|pop|rm|list  Manage named stashes

arc push [-r remote]                   Push to a git remote
arc pull [-r remote]                   Pull from a git remote
arc clone [-b branch] <url> [path]     Clone a git remote as an arc repo
arc migrate                            Convert a git repo to an arc repo
arc sync [-p]                          Sync bookmarks and tags with remote

arc remote add|rm|list                 Manage remotes
arc config set|get|show|unset [-g]     Manage configuration

Testing

nix develop -c cargo test
nix develop -c cargo clippy
nix develop -c cargo fmt --check

License

Blue Oak Model License 1.0.0