arc/README.md
hanna a6b1a027c8
refactor: switch storage format from MessagePack to bincode
- Replace rmp-serde with bincode 1.x in Cargo.toml
- Update store.rs serialization/deserialization and ID hashing
- Rename model.rs helpers from to_msgpack/from_msgpack to to_bytes/from_bytes
- Consolidate MsgPack/MsgPackDecode error variants into single Bincode variant
- Remove skip_serializing_if on ssh_signature (incompatible with bincode)
- Update all documentation to reflect bincode storage format
2026-02-10 21:03:53 +00:00

2.7 KiB

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