Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitParallax

Your entire git universe, on a grid.

Branches on the Y axis. Commits on the X axis. Every state your repo has ever been in is a coordinate — searchable, inspectable, and safe to manipulate. Merges, rebases, and cherry-picks run as animated dry runs first, so you see exactly what will happen — including every conflict — before anything is real.

            X → commit history
  Y ↓
  main       ●───●───●───────●  ⌖ YOU ARE HERE
                      \
  feature/A   ●───●────●───●      drag a lane onto another = merge (simulated first)
  feature/B   ────●───●           shift-drag a commit = cherry-pick

Install & run

go install github.com/wolfigs/gitparallax/cmd/gitparallax@latest

gitparallax ui                # open the grid for the current repo
gitparallax ui ~/code/myrepo  # or any repo

Requires git ≥ 2.38 on PATH (simulation uses git merge-tree --write-tree).

New to git, or teaching someone? Generate the interactive tutorial repo:

gitparallax sandbox ~/git-playground
gitparallax ui ~/git-playground

Three lanes, one guaranteed-clean merge, one guaranteed conflict — drag them and watch what git actually does.

What you can do

Action How What happens
Navigate drag to pan, ⌘-scroll to zoom 60 fps canvas over thousands of commits
Search the universe search bar: message / author / sha / path / code (-S) matching coordinates glow; Enter flies between them
Inspect a coordinate click any commit subject, author, lanes containing it, files with churn
N-way file lineage click a file in the inspector the same file across all lanes — shared regions collapsed, divergent regions stacked per branch
Merge drag a lane label onto another lane animated dry run: base found, per-file clean/conflict, verdict
Rebase right-click lane → rebase onto ghost commits lift and replay one by one; stops red on the conflicting commit
Cherry-pick shift-drag a commit to a lane single-commit dry run with the same treatment
Apply for real the button appears only when the dry run is clean runs in a throwaway worktree — your checkout is never touched
Undo History panel → Undo every operation is journaled with pre-op SHAs; rollback is one guarded update-ref
Understand Explain toggle every simulation step narrated in plain language
Spot rot Drift toggle lanes heat up by divergence (line churn × staleness)

Safety model

  1. Simulate first, always. Real operations refuse to run if their dry run conflicts. Simulations use merge-tree and synthetic commit-tree objects — no ref moves, no working-tree writes.
  2. Your checkout is sacred. Real operations run in temporary worktrees. Operations targeting the branch you have checked out are refused, not sneaked behind your back.
  3. Journal before mutate. Pre-op SHAs are appended to ~/.gitparallax/transactions.jsonl before any ref moves. Rollback uses compare-and-swap update-ref and refuses if the branch has moved since.

Architecture

One Go binary, zero runtime dependencies beyond git itself:

cmd/gitparallax        CLI: ui | serve --stdio | sandbox
internal/gitx          git plumbing: graph+lanes, search, lineage (Myers/patience),
                       merge-tree simulation, worktree ops, transaction journal
internal/rpc           JSON-RPC 2.0 dispatcher (stdio + HTTP transports)
internal/httpui        localhost server for the embedded UI
web/                   canvas grid UI (TypeScript, no framework, ~18 kB)

gitparallax serve --stdio exposes the full RPC surface for editor plugins or a future desktop shell.

Development

make ui       # build web UI (Node 18+)
make build    # build the binary
make test     # Go e2e suite (runs against generated sandbox repos)

License

MIT © Wolfigs

About

Your entire git universe on a coordinate grid — branches on Y, commits on X

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages