pijul
A distributed version control system built on a mathematically sound theory of patches — fast, composable, and correct by construction.
Independent changes can be applied in any order without changing the
result or the version identifier. No more git rebase ceremony.
Feature branches are often just changes in Pijul. Keeping history clean is the default.
Strong guarantees on merges. The order between lines is always preserved, unlike 3-way merge which can silently shuffle content.
When order is genuinely unknown, Pijul surfaces a conflict — never silently wrong output.
Once resolved, conflict resolutions applies to the same two changes everywhere. Conflicts never come back.
Conflicts are not a failure to merge in Pijul, they happen between two changes and are resolved by one change. Just like everything else.
Commutation makes it possible to clone only a subset of a repository. Working on a partial clone produces changes that merge cleanly into the full repo.
Ideal for monorepos: work on just the parts you care about.
quick install
$ cargo install pijul --version "~1.0.0-beta"
clone source
$ pijul clone https://nest.pijul.com/pijul/pijulmore install options →
repository
nest.pijul.com/pijul/pijulHosted on the Nest — Pijul's own repository hosting platform.
free hosting ↗[main (root-commit) 46fcdd3] base 1 file changed, 2 insertions(+) create mode 100644 f.txt
Switched to a new branch 'alice'
[alice abfb5f1] add G at top 1 file changed, 1 insertion(+)
G A B
[alice 77d3d8d] add A,B at top 1 file changed, 2 insertions(+)
A B G A B
Switched to branch 'main'
Switched to a new branch 'bob'
[bob 09b6f67] insert X between originals 1 file changed, 1 insertion(+)
Switched to branch 'main'
Updating 46fcdd3..77d3d8d Fast-forward f.txt | 3 +++ 1 file changed, 3 insertions(+)
Auto-merging f.txt Merge made by the 'ort' strategy. f.txt | 1 + 1 file changed, 1 insertion(+)
A X B G A B
Repository created at /tmp/nix-shell-1298810-1981740624/tmp.F9gcxNycmD/pijul
Tracked 1 path(s)
Hash: 3WW3T5GBOOR3OCU2IDEVHHA7GGXMOHJDOYHCH7L5BWUGHUBHHQIQC
Reset given paths to last recorded change
Hash: GBO3OSMXODHKWDCJRYG3SFVKZH6LZLHJY7L7VUPDQKXO2266P3EQC
G A B
Hash: 6CIUP2TSLW6IXCX7G4RZR3WHY5SEM5BIU7U4LJX6TLOPY3XUYSOQC
A B G A B
Reset given paths to last recorded change
Reset given paths to last recorded change
Hash: F5CAUHH7IA2QMSRPNMX7LDQLCMKJKKKEGGACTZ7OXTSHYPDE3WFAC
Reset given paths to last recorded change
Reset given paths to last recorded change
A B G A X B