Beagle: git-compatible revision control, reworked

Beagle is a revision control system for modern workflows: a comfortable client for local multi-branch, multi-worktree development. Its data format and syncing protocol are 100% git, so it stays compatible with the existing mass of git repos; everything above that is reworked. The command language can express any git operation, but the model steers toward tree-structured, rebase-centric branching, and the project dogfoods from day one.

The be command language

The dispatcher is be. It uses standard URI arguments and the Verbs of the HTTP dictionary, which cover every data maneuver — not a zoo of flags. The verbs are orthogonal — one cannot supplement another — and uphold the Invariants.

URI structure

Every non-flag argument is one URI, scheme:host/path?query#fragment, and each component reflects one aspect of the command. Changing the URI shape changes the semantics — patch becomes merge, rebase, or cherry-pick depending on the shape.

Everyday use

The common loop is clone or switch, edit the worktree, stage, commit, then push — each one a be verb over a URI.

    be get ssh://host/repo.git   # clone: fetch + checkout
    be get ?feat/                # switch to branch feat
    vim file.c                   # edit the worktree
    be put file.c                # stage the change
    be post 'wonderful changes'  # commit on cur
    be post //origin             # ff-push to the remote

Projections

Apart from verbs, Beagle has projections — read-only, presentation-only verbless views. Projections accept URIs of any shape and never mutate, so they compose freely with the rest of the language; the full set is the Projector catalog.

The dogs

The repo is structured into dogs — each with its purview, the data and functions it owns, all following one Dog convention. Dogs coordinate to carry out complex tasks; new dogs may join, old dogs learn new tricks.

Quick start

Building Beagle needs libsodium, libcurl, lz4, zlib and cmake; ninja is recommended.

    mkdir build && cd build
    CC=clang CXX=clang++ cmake -GNinja \
        -DCMAKE_BUILD_TYPE=Release ..
    ninja && ls bin/

FAQ

Two framing questions about what Beagle is and how it is built.

Credits

Beagle stands on prior art for its indexing, scanning and storage layers.