Skip to content
gitlapse

terminal timelapse · git history · complexity

Watch your codebase heat up, frame by frame.

gitlapse replays a repository's history like a video: per-function cognitive complexity, animated commit by commit, so you can watch hotspots ignite — and cool. Straight from the object database, no checkouts.

gitlapse
gitlapse file-search-on            frame 87/240  ▶ 8x
5d2897c  2026-06-02  feat: archive readers
files 214   functions 1102   cognitive 5804

▁▁▂▂▃▃▄▄▅▅▅▆▆▇▇█▇▇▆▆▆▅▅▅▄▄▅▅▆▆▆▇▇▇

COG  CYC  Δ     HOTSPOT
38   21   ▲ +6  parseQuery  query.go:86
24   17         walkTree    walk.go:112
6    5    ▼ -3  readAttrs   attrs.go:41

what you get

A video player for your repo's history.

No checkouts, ever

Historical file contents stream straight from the git object database — ls-tree plus one persistent cat-file --batch. Your worktree is never touched.

Fast by content address

Parse results are cached by blob SHA, so a file is only re-analysed on frames where it actually changed. 240 frames of a 591-file repo compute in seconds.

17 languages

Go via the standard library's AST; sixteen more through pure-Go tree-sitter grammars, powered by codemetrics.

Video-player controls

Play, pause, step, jump to either end, and change speed from 1 to 30 fps — while frames keep computing in the background.

Hotspot deltas

Every frame ranks the most cognitively complex functions and marks movement — ▲ igniting, ▼ cooling, or newly born.

Headless export

Render the same UI off-screen to an asciinema cast or an animated GIF — drop your repo's history straight into a README.

17

languages analysed per frame

0

checkouts — history is read in place

~8s

to compute 240 frames of a 591-file repo

Languages: go · python · javascript · typescript · rust · java · ruby · c · c++ · c# · php · swift · kotlin · scala · perl · r · matlab

get it

Install.

Requires git on your PATH. The container image ships with it.

brew brew install --cask richardwooding/tap/gitlapse
go go install github.com/richardwooding/gitlapse@latest
docker docker run -it --rm -v "$PWD:/repo" ghcr.io/richardwooding/gitlapse /repo
# replay the repo you're in
gitlapse

# replay another repo, denser timeline
gitlapse --max-frames 500 ~/src/somerepo
# keys
space  play / pause
← →    step one frame
[ ]    slower / faster (1–30 fps)
g G    jump to start / end
q      quit

share it

Export the timelapse.

The exporter renders every frame through the same terminal UI as live playback — what you watched is exactly what you ship.

# asciinema v2 cast — play or embed
gitlapse --export cast --out repo.cast

# animated GIF for your README (needs agg)
gitlapse --export gif --out repo.gif
# pacing and canvas
gitlapse --export gif \
  --fps 15 --width 120 --height 40

# machine-readable timeline, no TUI
gitlapse --dump > timeline.tsv