entviz¶
entviz turns a high-entropy value — a cryptographic key or signature, a UUID, a blockchain address, a post-quantum key, a genome — into a compact SVG diagram that an ordinary person with reasonably good vision can compare at a glance. The goal is simple: let a human decide "are these two blobs of entropy the same or different?" without reading 88 characters of base64 one symbol at a time.
Every value is rendered across several redundant visual channels — text cells, a per-cell surround pattern, nucleus colors, a fingerprint-derived color bar, blank-cell markers, and an ellipse overlay — so that even a single-bit difference in the input is obvious, and so that color-blind viewers and monochrome displays still get a reliable signal.
Explore¶
- Specification — the full algorithm (current: v15): normalization, tokenization, the fingerprint, geometry, and every visual channel.
- Gallery — entvizes across real input types (UUIDs, hex, blockchain addresses, SSH keys, ULIDs, LEIs, snowflakes) and avalanche pairs.
- Paper — the longer-form analysis and design rationale.
- Developers (README on GitHub) —
install with
uv, run the CLI, run the tests, and cut releases.
A threat model covering the comparison guarantees is also available.
Implementations¶
entviz is a language-independent specification; every implementation below passes the same shared conformance corpus. ▶ Try it live in the browser — the JavaScript/React playground lets you render a value and compare two.
| Language | Repository | Package | API docs |
|---|---|---|---|
| Python (reference) | entviz | PyPI entviz |
this site + spec.md |
| Rust | entviz-rs | crates.io entviz |
docs.rs |
| TypeScript / JS | entviz-js | npm @entviz/core |
TypeDoc |
| React | entviz-js packages/react |
npm @entviz/react |
— |
| Java | entviz-java | Maven io.github.dhh1128:entviz |
javadoc.io |
| Go | entviz-go | pkg.go.dev | pkg.go.dev |
At a glance¶
- Losslessly represents up to 512 bits in the text channel; larger inputs show head + a domain-separated fingerprint readout in the middle + tail, and bind the whole input through the fingerprint.
- Amplifies single-bit differences via a SHA-512 fingerprint, even when the input itself has no avalanche effect.
- Usable under red-green, blue-yellow, and complete color blindness.
- Trivial to implement, with no significant dependencies.