What it was measured at
Four results, newest first: a subject the format was asked to hold, the number it came out at, and what that number cost. Each finding document is linked and can be read here in full.
Every figure was produced by a tool in this project over an artefact this site serves. No estimates. Where a rival format is named, the number beside it is that format's own file, converted.
Newest first. Ordering by ratio would put the largest number at the top and imply the small ones were not reported.
- September 2026A path became two arrays, and the artwork halved
An Ottoman coat of arms: 1.9 MB of SVG, converted.
- September 2026A whole git repository, carried in without changing the format
This project's own repository, converted by tools/git2umsg and read back by tools/repocheck.
- September 2026A diff you can apply, invert, and refuse
An undo stack made of patches, over a real document in this project, driven a keystroke at a time.
- August 2026A resolved 3D scene, smaller than the glTF it came from
Four transcripts, resolved by tools/sptx, with and without typed arrays.
A path became two arrays, and the artwork halved
September 2026
The kernel gained a typed array: a homogeneous run of numbers stored at its actual width. The vocabulary with most to gain was the one least able to take it — a path was one flat array of opcodes interleaved with numbers, so the two had to be split first.
The prerequisite was not the typed array but a DECLARED COORDINATE GRID: scaled integers need a scale. The graphic vocabulary had parked that as a v1 question with no reason to pay for it. The 3D vocabulary supplied one reason and the typed array the other.
An Ottoman coat of arms: 1.9 MB of SVG, converted.
| what | the figure | what it says |
|---|---|---|
| the encoding, as it was | 2,082,610 bytes | 7% LARGER than the SVG it was converted from |
| the encoding, with typed arrays | 1,065,817 bytes | 49% smaller — and 45% smaller than the SVG |
| the text form | 2% larger | a scaled integer is a longer numeral than the decimal it replaces |
| the opcodes, now numbers | 13,733 bytes | the cost of one code per command, against a saving of a million |
The finding, in full and including what went badly: docs/58-typed-arrays-in-the-graphic-vocabulary.umsg raw. Measured over examples/graphic-crescent-and-star.umsg raw.
A whole git repository, carried in without changing the format
September 2026
Whether everything a git repository contains can be represented in one document. Yes for what it CONTAINS; no for what it IS, since a document is not mutable.
The subject checks the conversion itself, which nothing else carried into this format can do. Git names every object by the hash of its bytes, so a document holding a PARSED object — a commit split into headers and message, a tree into entries — can be re-serialised, hashed and compared against the name it is stored under. Fidelity becomes a check anybody can run with no repository present.
This project's own repository, converted by tools/git2umsg and read back by tools/repocheck.
| what | the figure | what it says |
|---|---|---|
| objects, and the content in them | 3,935 / 190,138,733 | every one parsed; every parse reproduced its own name; not one stored as opaque bytes |
| what the kernel needed | nothing | the four vocabularies before this one each found a hole in the format. This one found none |
| what the structure cost | 940,125 bytes | 0.5% — 182.2 MiB of document against 181.3 MiB of object content |
| compressed, against git's own store | 69.8 / 92.0 MiB | 0.76x with xz -9, and no delta encoding anywhere in the document |
| one commit later, as a link | 448,521 bytes | a successor pinned to its base by digest: a factor of 657, and the pair checks in seven seconds |
The finding, in full and including what went badly: docs/55-repository-vocabulary.umsg raw. Measured over examples/repository-scratch.umsg raw, examples/repository-scratch-link.umsg raw.
A diff you can apply, invert, and refuse
September 2026
Four wants turned out to be asking for one artefact: an undo stack is a list of invertible structural changes, semantic history is a query over changes between versions, a merge driver is a function on changes, and an intensional edit is a change carrying the rule that made it.
What existed was a report — text on a terminal, readable once and never applied, inverted, composed or refused. A patch carries the value it displaced, so it inverts, and a digest of the result, so it refuses before writing and verifies after.
An undo stack made of patches, over a real document in this project, driven a keystroke at a time.
| what | the figure | what it says |
|---|---|---|
| the document being edited | 6,740 bytes | an article already in this project, not a fixture |
| 800 keystrokes, uncoalesced | 902,779 bytes | 134 times the document it edits, and still growing |
| 800 keystrokes, coalesced | 1,128 bytes | a sixth of the document, for the whole stack |
| 200 characters typed, then all undone | byte for byte | back to the starting document, checked by digest rather than by inspection |
The finding, in full and including what went badly: docs/57-the-patch-vocabulary.umsg raw. Measured over examples/patch-tenancy-clause.umsg raw.
A resolved 3D scene, smaller than the glTF it came from
August 2026
The 3D vocabulary holds a scene as one declared frame graph and resolves it into a TRANSCRIPT: every number an exact integer count of quanta on the document's declared precision, floats refused. That is the rule, not a limitation — resolving in float64 would break the thing the vocabulary exists to enforce, that two implementations resolving the same motion agree exactly rather than closely.
It is also where a typed array costs nothing: the integer was already there, and the decimal was that integer multiplied back out. Nobody reads a transcript to find a vertex, which is the legibility argument that reaches a document and not this.
Four transcripts, resolved by tools/sptx, with and without typed arrays.
| what | the figure | what it says |
|---|---|---|
| the DamagedHelmet scene | 1,051,481 to 559,040 bytes | 47%, which puts it BELOW the 560,692 bytes of glTF geometry it was converted from |
| a walk cycle, 17 ticks | 1,256,077 to 651,443 bytes | 48% — the artefact the design had recorded as its own largest open risk |
| the fox scene | 91,990 to 38,466 bytes | 58% |
| the arm scene | 2,016 to 1,999 bytes | 1%. Six instances and a five-vertex mesh: there is nothing here to pack |
The finding, in full and including what went badly: docs/43-the-transcript-writer.umsg raw. Measured over examples/spatial-arm.umsg raw.