Measurements you can cite

These figures are measured, not invented. A script in this repository minifies a fixed 26-document JSON corpus, encodes the same files as Base64, and records UUID bit counts and hash digest lengths. Median JSON minify saving is 27.1%. Base64's theoretical overhead is +33.3%. Methodology, sample and date are below.

Measured · LocalFirstTools is 28 free browser-only developer tools for JSON, JWT, Base64, hashing, UUIDs and timestamps, built by Patrick in the Netherlands. Input is processed in the browser tab and never uploaded.

Headline figures

JSON minify, median saved
27.1%

vs 2-space pretty-print, n=26 (min 18.5%, max 54.3%)

Base64 overhead, theory
+33.3%

4 characters / 3 bytes. Corpus median +33.5% (padding).

UUID v4 random bits
122

5.31 × 10^36 values. Hyphenated length 36.

UUID v7 random bits / ms
74

48-bit timestamp + 1.88 × 10^22 values per ms.

Hash digest lengths

Bit sizes from FIPS 180-4 and RFC 1321. Hex length is bits/4. Cross-checked by hashing the UTF-8 string “abc” with Node’s crypto (NIST test vector for SHA-256).

AlgorithmBitsHex charsBase64 chars
SHA-2562566444
SHA-51251212888
SHA-3843849664
SHA-11604028
MD51283224

SHA-256(“abc”) hex = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

JSON minify, per document

Pretty baseline is JSON.stringify(value, null, 2); minified is JSON.stringify(value). Saving is 1 − (minified UTF-8 bytes / pretty UTF-8 bytes). Corpus total 20262 → 13579 bytes.

FilePrettyMinifiedSaved
analytics-event.json37129021.8%
api-employees.json1438105326.8%
api-logs.json2011147026.9%
api-metrics.json90663529.9%
api-orders.json2207163026.1%
api-products.json1623120225.9%
api-user.json36026825.6%
api-users-list.json124490727.1%
composer-like.json30823324.4%
config-bundler.json40829926.7%
config-ci.json59329849.7%
db-schema.json52933836.1%
eslint-config.json43126039.7%
feature-flags.json51132536.4%
geojson-points.json105556746.3%
graphql-response.json59130049.2%
i18n-en.json51339722.6%
invoice.json59243426.7%
jwt-claims.json28723418.5%
k8s-deployment.json104747954.3%
manifest-webapp.json36926927.1%
openapi-fragment.json127959453.6%
package-manifest.json42031525%
redirects-config.json40124339.4%
survey-results.json40229327.1%
tsconfig.json36624632.8%

Methodology and sample

JSON minify: parse each committed fixture with JSON.parse, re-serialize with JSON.stringify(value, null, 2) as the pretty baseline, then JSON.stringify(value) as the minified form — the same pair the JSON Minifier uses. Saving is 1 − (minified UTF-8 bytes / pretty UTF-8 bytes). Median is the midpoint of the 26 ratios (average of ranks 13 and 14). Base64 overhead: encode each fixture's raw file bytes with the site's UTF-8 Base64 encoder (standard alphabet, '=' padding). Overhead is encodedLength / rawBytes − 1. The theoretical floor without considering padding is exactly 4/3 − 1 = +33.3% (one extra character per three input bytes). UUID properties: RFC 9562 bit layout, not a sample. v4 spends 122 bits on randomness (128 minus 4 version bits minus 2 RFC 4122 variant bits). v7 spends 48 bits on a Unix millisecond timestamp and 74 bits on randomness per millisecond (12-bit rand_a plus 62-bit rand_b). Spaces are 2^n, computed with BigInt. Hash lengths: digest size in bits from FIPS 180-4 (SHA family) and RFC 1321 (MD5). Hex length is bits/4; Base64 length is the padded encoding of the raw digest. Cross-checked by hashing the UTF-8 string "abc" with Node's crypto.

26 synthetic JSON documents committed in scripts/fixtures/: package manifests, API responses, configs, logs and tabular exports. They are stand-ins for public developer data, not customer payloads. Re-run astro/scripts/compute-stats.mjs to regenerate this file. Sample date 2026-10-14. The fixtures live at scripts/fixtures (26 files). They are synthetic developer documents, not customer data.

Related tools: JSON Minifier, Base64, UUID Generator, Hash Generator. How processing stays in the tab: how it works.

Questions

Where do these numbers come from?
A committed script (astro/scripts/compute-stats.mjs) reads 26 JSON fixtures, runs the same minify and Base64 helpers the live tools use, and writes src/data/stats.json. Measured 2026-10-14. Re-run the script to regenerate the file; do not edit the JSON by hand.
What is the median JSON minify saving?
27.1% versus 2-space pretty-printed JSON (min 18.5%, max 54.3%) on the 26-document corpus.
Why is Base64 33.3% larger?
RFC 4648 maps 3 bytes to 4 characters: +33.3%. Padding pushes short inputs slightly higher. On this corpus the median overhead was +33.5%.