Installing Code Maat
Overview Link to heading
Code Maat is a forensic analysis tool for version control data, created by Adam Tornhill (author of “Your Code as a Crime Scene”). It analyzes git logs to identify hotspots, temporal coupling, code age, and other metrics. These are my notes and install instructions as I got it setup on my local machine.
- Repository: https://github.com/adamtornhill/code-maat
- Book: “Your Code as a Crime Scene” by Adam Tornhill
Installation Link to heading
1. Install Java Link to heading
Code Maat is a Clojure application packaged as a JAR file, so it requires Java.
brew install openjdk
Add to your shell profile (~/.zshrc or ~/.bashrc):
export PATH="$(brew --prefix)/opt/openjdk/bin:$PATH"
Or create a system-wide symlink:
sudo ln -sfn $(brew --prefix)/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
Verify installation:
java -version
2. Download Code Maat Link to heading
mkdir -p ~/tools/code-forensics
cd ~/tools/code-forensics
curl -sL https://github.com/adamtornhill/code-maat/releases/download/v1.0.4/code-maat-1.0.4-standalone.jar -o code-maat.jar
Verify installation:
java -jar ~/tools/code-forensics/code-maat.jar -h
3. Optional: Create an alias Link to heading
Add to your shell profile:
alias code-maat="java -jar ~/tools/code-forensics/code-maat.jar"
Usage Link to heading
Step 1: Generate Git Log Link to heading
Code Maat requires a specially formatted git log. Run this in your project directory:
git log --all --numstat --date=short \
--pretty=format:'--%h--%ad--%aN' \
--no-renames > gitlog.txt
Step 2: Run Analysis Link to heading
All commands assume you’re in the project directory with gitlog.txt.
Change Frequency (Hotspots) Link to heading
Find files that change most often:
java -jar ~/tools/code-forensics/code-maat.jar -l gitlog.txt -c git2 -a revisions
Temporal Coupling Link to heading
Find files that change together:
java -jar ~/tools/code-forensics/code-maat.jar -l gitlog.txt -c git2 -a coupling
Authors / Ownership Link to heading
Who changed what:
java -jar ~/tools/code-forensics/code-maat.jar -l gitlog.txt -c git2 -a authors
Primary author per file:
java -jar ~/tools/code-forensics/code-maat.jar -l gitlog.txt -c git2 -a entity-ownership
Code Age Link to heading
When files were last changed:
java -jar ~/tools/code-forensics/code-maat.jar -l gitlog.txt -c git2 -a age
Code Churn Link to heading
Lines added/removed per file:
java -jar ~/tools/code-forensics/code-maat.jar -l gitlog.txt -c git2 -a abs-churn
Summary Link to heading
Repository overview:
java -jar ~/tools/code-forensics/code-maat.jar -l gitlog.txt -c git2 -a summary
Available Analyses Link to heading
| Analysis | Description |
|---|---|
| revisions | Change frequency per file |
| coupling | Temporal coupling between files |
| authors | Who changed what |
| entity-ownership | Primary author per file |
| entity-effort | Effort distribution |
| age | Code age |
| abs-churn | Lines added/removed |
| author-churn | Churn per author |
| communication | Communication patterns |
| summary | Repository overview |
Output & Visualization Link to heading
Code Maat outputs CSV to stdout. Save to a file:
java -jar ~/tools/code-forensics/code-maat.jar -l gitlog.txt -c git2 -a revisions > revisions.csv
Tornhill provides D3.js visualization templates at: https://github.com/adamtornhill/code-maat#visualization
Quick Analysis Script Link to heading
One-liner to generate log and run all common analyses:
#!/bin/bash
# Run from your project directory
MAAT="java -jar ~/tools/code-forensics/code-maat.jar"
OUTDIR="code-forensics-output"
mkdir -p $OUTDIR
# Generate git log
git log --all --numstat --date=short \
--pretty=format:'--%h--%ad--%aN' \
--no-renames > $OUTDIR/gitlog.txt
# Run analyses
$MAAT -l $OUTDIR/gitlog.txt -c git2 -a revisions > $OUTDIR/revisions.csv
$MAAT -l $OUTDIR/gitlog.txt -c git2 -a coupling > $OUTDIR/coupling.csv
$MAAT -l $OUTDIR/gitlog.txt -c git2 -a authors > $OUTDIR/authors.csv
$MAAT -l $OUTDIR/gitlog.txt -c git2 -a age > $OUTDIR/age.csv
$MAAT -l $OUTDIR/gitlog.txt -c git2 -a abs-churn > $OUTDIR/churn.csv
$MAAT -l $OUTDIR/gitlog.txt -c git2 -a summary > $OUTDIR/summary.csv
echo "Results saved to $OUTDIR/"
Uninstall Link to heading
To remove Code Maat:
rm -rf ~/tools/code-forensics
To remove Java (if no longer needed):
brew uninstall openjdk