57ff74bcd28c is a nightmare to read aloud. abdu.mimzy.overdrinking isn't. See the math →
.NET Global Tool · Open Source

Twelve hex characters
nobody can say out loud.
Three words anyone can.

WhatThreeGits encodes a Git commit hash into three memorable words — and back again, exactly. Read your commit in a standup. Drop it in a ticket. Never spell out 5‑7‑f‑f‑7‑4 character by character again.

wtg — encode / decode
> WTG encode --short # short hash
57ff74bcd28c abdu.mimzy.overdrinking
> WTG decode abdu.mimzy.overdrinking
abdu.mimzy.overdrinking 57ff74bcd28c
>
The problem

A hash is built for machines.
You have to say it to people.

Git identifies every commit with a hexadecimal SHA. Perfect for a computer, hostile to a human voice. Read one over a call and someone transposes a digit; paste one in a message and it means nothing until it's clicked. The information is fine — the encoding is wrong for the way teams actually talk.

Reading a hash aloud

57ff74bcd28c

“five — seven — eff — eff — seven — four — bee — cee — dee — two… wait, was that two effs?”

Reading three words aloud

abdu.mimzy.overdrinking

“abdu, mimzy, overdrinking.” Said once, heard right, typed back without a second glance.

How it works

Three words in. The same hash out.

WhatThreeGits maps the part of a hash Git actually needs onto a large word list, then reverses the mapping on demand. No lookup service, no database — the same input always produces the same words.

STEP 01

Take the short hash

Git only needs the first 7–12 hex characters to pin down a commit in most repos — around 28–48 bits. Run WTG encode --short and that's what it reads.

STEP 02

Map it to three words

Those bits are spread across three positions, each drawn from a ~40,000-word list. 57ff74bcd28c becomes abdu.mimzy.overdrinking — speakable, memorable, unambiguous.

STEP 03

Decode, exactly

Run WTG decode abdu.mimzy.overdrinking and you get 57ff74bcd28c back, bit for bit. The transform is deterministic and fully reversible.

By the numbers

Why three words is enough

~40k
Words per position
6.4×1013
3-word combinations
~46 bits
Address space covered
3 words
Zero ambiguity
The Math

The same idea behind What3Words

What3Words gives every 3 m × 3 m square on Earth a unique triplet of words. WhatThreeGits does the same for commit hashes. Here is the arithmetic that says three words is plenty — and where the honest limits are.

01 — Covering the planet

What3Words

Every 3 m × 3 m square on the surface of the Earth must receive a unique triplet.

Aearth 510 × 106 km2
squares = 510 × 106 × 1063 × 3 5.7 × 1013
n3 5.7 × 1013 n 5.7 × 1013 3,819
A list of ≈ 4,000 words would cover the entire globe. What3Words uses ~40,000 in practice, for redundancy and error-correction margin.
02 — The full SHA-1

Encoding a whole Git hash

A Git commit hash is 160 bits. Squeezing all of it into three words is a different story.

combinations = 2160 1.46 × 1048
n3 = 1.46 × 1048
n = 1.46 × 1048 1.14 × 1016
That's 10 quadrillion distinct words per position — more than any language could supply. Three words can't hold a full SHA-1.
03 — The practical compromise

Where three words wins — and where you add more

Short hashes. Git resolves a commit from 7–12 hex characters in most repos (≈ 28–48 bits). Three words from a 40k vocabulary swallow that whole:

40,0003 6.4 × 1013 > 246
Comfortably covers the full 48-bit space. This is the everyday mode.

Full hashes. With a 32,768-word list (215 ≈ 15 bits per word) the entire 160-bit SHA-1 fits in:

16015= 11 words + 1 CRC word
Eleven words plus a checksum word represents any commit hash in full, with error detection built in.
What you get

Small tool. Exact behaviour.

WhatThreeGits does one thing and does it predictably — a global .NET tool that turns hashes into words and back with no surprises.

Deterministic & reversible

The same hash always maps to the same three words, and those words always decode back to the exact hash. No state, no service.

Checksummed full hashes

Full 160-bit mode adds a CRC word, so a mistyped or misheard sequence is caught rather than silently decoding to the wrong commit.

Short-hash mode

--short gives you three words for the part Git actually needs — the fast path for standups, reviews and tickets.

Runs entirely offline

Pure local computation. No network calls, no accounts, no telemetry — safe to run against private repositories on any machine.

Cross-platform CLI

Ships as a .NET global tool: dotnet tool install -g WTG on Windows, macOS or Linux and it's on your PATH.

A carefully sized dictionary

~40,000 real words per position: enough to cover every short hash uniquely, chosen to stay pronounceable rather than cryptic.

Get started

Installed in one command

WhatThreeGits is a .NET global tool. Install it, encode a hash, decode it back — and uninstall just as cleanly when you're done.

Install
$ dotnet tool install -g WTG --add-source .\
Encode & decode
$ WTG encode --short # short hash 57ff74bcd28c → abdu.mimzy.overdrinking $ WTG decode abdu.mimzy.overdrinking abdu.mimzy.overdrinking → 57ff74bcd28c
Uninstall
$ dotnet tool uninstall -g WTG

Give every commit
three words.

Speakable, memorable, exact. Install WhatThreeGits and stop reading hashes one character at a time.