unimsg provisional

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.

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.

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

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.

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 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.

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, 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.

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.