unimsg provisional

What it was measured at

Four results, newest first. Each one is a subject this format was asked to hold, the number it came out at, and what that number was paid for with. The finding document behind each is linked and can be read here in full — including the parts that went badly, which are the reason the numbers are worth anything.

Every figure was produced by a tool in this project over an artefact this site serves. Nothing here is an estimate, a projection, or a comparison against a straw opponent: where a rival format is named, the number beside it is that format's own file, converted.

Newest first, which is the one ordering a page like this may use. Ordering by impressiveness would put the largest ratio at the top and quietly teach the reader that the small ones were not reported.

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 the most to gain from it was the one least able to take it: a path was a single flat array of opcodes interleaved with numbers, and a typed array is homogeneous. The opcodes and the coordinates had to part company first.

THE PREREQUISITE WAS NOT THE TYPED ARRAY. Scaled integers need a scale, so the artwork needed a DECLARED COORDINATE GRID before it could hold any. The graphic vocabulary had parked that as a question for v1 and had given the right reason to want it — a resolution is a thing an author should have to state rather than a thing an encoding does quietly — and had no reason to pay for it. The 3D vocabulary supplied the first reason and the typed array supplied the second. It would have been worth adding on its own.

An Ottoman coat of arms: 1.9 MB of SVG, converted.

whatthe figurewhat it says
the encoding, as it was2,082,610 bytes7% LARGER than the SVG it was converted from
the encoding, with typed arrays1,065,817 bytes49% smaller — and 45% smaller than the SVG
the text form2% largera scaled integer is a longer numeral than the decimal it replaces
the opcodes, now numbers13,733 bytesthe 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

The question was whether every single part of what a git repository contains can be represented in one document. The answer is yes for what a repository CONTAINS and no for what it IS — a document is not a mutable thing — and the second half is a property of documents rather than a gap.

THE SUBJECT CHECKS THE CONVERSION ITSELF, which nothing else carried into this format can do. Git names every object by the hash of its own bytes. So a document holding a PARSED object — a commit split into its headers and its message, a tree into its entries — can be re-serialised, hashed, and compared against the name it is stored under. Fidelity stops being a claim about a converter and 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.

whatthe figurewhat it says
objects, and the content in them3,935 / 190,138,733every one parsed; every parse reproduced its own name; not one stored as opaque bytes
what the kernel needednothingthe four vocabularies before this one each found a hole in the format. This one found none
what the structure cost940,125 bytes0.5% — 182.2 MiB of document against 181.3 MiB of object content
compressed, against git's own store69.8 / 92.0 MiB0.76x with xz -9, and no delta encoding anywhere in the document
one commit later, as a link448,521 bytesa 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 separate 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 the changes between two 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, which can be read once and never applied, inverted, composed or refused. A patch carries the value it DISPLACED, so it inverts; it carries 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.

whatthe figurewhat it says
the document being edited6,740 bytesan article already in this project, not a fixture
800 keystrokes, uncoalesced902,779 bytes134 times the document it edits, and still growing
800 keystrokes, coalesced1,128 bytesa sixth of the document, for the whole stack
200 characters typed, then all undonebyte for byteback 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, with a float refused rather than tolerated. That is a rule and not a limitation — a writer resolving in float64 would break the one thing the vocabulary exists to enforce, which is that two implementations resolving the same motion agree EXACTLY rather than closely.

IT IS ALSO THE PLACE A TYPED ARRAY COSTS NOTHING TO TAKE. The integer was already there; the decimal form was that integer multiplied back out. And a transcript is never read by a person deciding where a vertex is, which is the argument against scaled integers that reaches a document and does not reach this.

Four transcripts, resolved by tools/sptx, with and without typed arrays.

whatthe figurewhat it says
the DamagedHelmet scene1,051,481 to 559,040 bytes47%, which puts it BELOW the 560,692 bytes of glTF geometry it was converted from
a walk cycle, 17 ticks1,256,077 to 651,443 bytes48% — the artefact the design had recorded as its own largest open risk
the fox scene91,990 to 38,466 bytes58%
the arm scene2,016 to 1,999 bytes1%. 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.