Suture
A version control system that understands your file formats.
Unlike Git, which treats every file as opaque bytes, Suture uses semantic drivers to perform intelligent merges on JSON, YAML, CSV, XML, TOML, Markdown, DOCX, XLSX, and PPTX files.
Why Suture?
- No more false merge conflicts on JSON. Two people edit different keys in a config file — Git produces a conflict. Suture merges them cleanly at the field level.
- Structural YAML/TOML merge. DevOps teams working on Kubernetes manifests or Cargo.toml files can edit different sections in parallel without conflicts.
- Office document merge. DOCX, XLSX, and PPTX files are parsed via OpenXML so changes to different paragraphs, cells, or slides merge automatically.
- Patch-based history. Changes are modeled as patches in a DAG, not whole-file snapshots. Conflicts are detected by logical address overlap, not line overlap.
Install
From source (primary):
Binary releases (Linux x86_64/aarch64, macOS x86_64/aarch64):
# Downloads and installs to ~/.local/bin
|
Or grab the tarball from GitHub Releases directly.
Quick Start
# Install
# Init a repo and set your identity
# Create a JSON config file and commit it
# Create a branch and change one key
# Switch back and change a different key
# Merge — both changes are combined, zero conflicts
# {"host": "staging.example.com", "port": 8080}
That's the demo. Suture understood the JSON structure and merged both sides — host from staging, port from main — without conflict markers. Git would have produced a merge conflict on every line.
The same semantic merge works for YAML, TOML, CSV, XML, Markdown, DOCX, XLSX, and PPTX files.
Semantic Drivers
| Format | Extensions | What it does |
|---|---|---|
| JSON | .json |
Field-level diff and merge via RFC 6901 paths |
| YAML | .yaml, .yml |
Key-level structural merge |
| TOML | .toml |
Table and key-aware merge |
| CSV | .csv |
Row-level merge |
| XML | .xml |
Element-aware structural merge |
| Markdown | .md |
Section-aware merge |
| DOCX | .docx |
Word document merge via OpenXML |
| XLSX | .xlsx |
Spreadsheet merge via OpenXML |
| PPTX | .pptx |
Presentation merge via OpenXML |
| OTIO | .otio |
OpenTimelineIO editorial merge |
Files without a matching driver fall back to line-based diff and merge, same as Git.
Git Merge Driver
Suture can be used as a Git merge driver to get semantic merging inside existing Git workflows — no need to switch VCS. Configured file types (JSON, YAML, TOML, etc.) are merged at the field level instead of line-by-line.
CLI Reference
| Command | Description |
|---|---|
suture init [path] |
Initialize a new repository |
suture add <paths> |
Stage files |
suture commit <msg> |
Create a commit |
suture status |
Show working tree status |
suture diff |
Show changes (semantic when driver matches) |
suture log [--graph] |
Show commit history |
suture branch <name> |
Create or list branches |
suture checkout <branch> |
Switch branches |
suture merge <branch> |
Merge a branch |
suture rebase [-i] <branch> |
Rebase (interactive supports pick/reword/edit/squash/drop) |
suture cherry-pick <hash> |
Apply a commit onto HEAD |
s revert <hash> |
Revert a commit |
suture stash [pop|list|apply] |
Stash and restore changes |
suture push / pull |
Remote sync |
suture remote add <name> <url> |
Manage remotes |
suture tag <name> |
Create tags |
suture blame <path> |
Per-line attribution |
suture fsck |
Verify repository integrity |
suture drivers |
List available semantic drivers |
Run suture --help for the full list.
Architecture
Suture stores content as BLAKE3-hashed blobs (with Zstd compression) and models changes as patches in a directed acyclic graph, persisted to SQLite in WAL mode. Each patch records the logical addresses it modifies; two patches conflict only when those address sets overlap.
The codebase is split into focused crates — core engine, CLI, semantic drivers (one per format), Hub server, TUI, LSP, and more. See docs/ for detailed design documentation.
Comparison
| Suture | Git | Pijul | |
|---|---|---|---|
| Merge model | Patch DAG with semantic drivers | Line-based three-way merge | Patch DAG, line-level only |
| Structured data | Native support for 10+ formats | Opaque bytes | Opaque bytes |
| Office documents | DOCX/XLSX/PPTX merge | Binary blob conflicts | Binary blob conflicts |
| Conflict detection | Logical address overlap | Line overlap | Line overlap |
| Language | Rust | C | Rust |
| Maturity | Early | Production | Early |
Contributing
See CONTRIBUTING.md for development setup, coding conventions, and pull request workflow.
License
Apache License, Version 2.0. See LICENSE for details.