Versions

This page explains HoloML's versions: what 0.1, 0.2, and 0.3 hold, how a page says which one it is written for, why a reader refuses a version it does not know, what the editions of 0.2 changed, and what may come later. The rules are in the specification's section 11.

Three versions, all fixed

HoloML 0.1, of 2026-09-26, is the first: models, groups, lights, labels, links, materials, the animation of position, rotation, and scale, and orbiting and walking. HoloML 0.2, of 2026-09-29 (begun 2026-09-27), adds to it without changing it: every 0.1 page means the same in 0.2. HoloML 0.3, of 2026-10-07 (released as 0.3.0 on 2026-10-08; its second edition, 0.3.1, of 2026-10-09), adds to 0.2 in the same way. All three are fixed: what a page written for any of them means will not change.

Why HoloML is experimental

HoloML is marked experimental: its specification is published for examination, experimental implementation, and evaluation. It has one renderer so far, HyperSpace 3D, and a language is proved by more than one; and until version 1.0, a later version may change or remove what an earlier one has, where experience shows a better way. The versions keep that safe for pages: each page says which version it is written for, and keeps the meaning of that version. A page that moves to a later version may need changes.

How a page says its version

The root element's version names the version the page is written for. Every page has one, written exactly, "0.1", "0.2", or "0.3", with no spaces around it:

<holoml version="0.1">
  <scene>
    <model src="models/coupe.glb" />
  </scene>
</holoml>

A page is checked against the version it declares, and may use only what that version has. In a 0.1 page, an element or attribute from 0.2 is reported as unknown, and a value from 0.2, such as an animate of a light's intensity, as a bad value. Here a 0.1 page has a sound:

<holoml version="0.1">
  <scene>
    <sound src="sounds/birds.ogg" autoplay />
  </scene>
</holoml>

A checker reports unknown-element at line 3, column 5: sound is not a HoloML 0.1 element, as it came in 0.2. The same page with version="0.2" is valid.

Declaring the version says what the author wrote for, and tells a reader which rules to read the page by, so a reader that knows several versions reads each page by its own. A page's scripts can read it too, as holoml.version.

A version the reader does not know

A reader refuses a version it does not know, rather than guess. A reader that knows only 0.1 refuses a 0.2 page with the problem unsupported-version, and a reader that knows 0.1 and 0.2 refuses a page that says version="0.3" in the same way.

What refusing is depends on the reader. A checker reports unsupported-version and then checks the rest of the page by the newest version it knows, so that the author sees the page's other mistakes in the same pass. A renderer does not draw the page at all, neither as the version it names nor as another, and tells the viewer why. A page that declares no version is treated in the same way: there is nothing to read it by but a guess.

A page written for a later version may hold elements, attributes, or values whose meaning an older reader cannot know. A reader that guessed could show a scene different from the one the author wrote, with no sign that anything was missing. Refusing makes the gap plain: the page needs a reader that knows its version.

What 0.2 added

Version 0.2 grew with HyperSpace 3D's example sites, from Blockworld to the ocean tunnel, each bringing what it needed; the specification marks each addition "(0.2)". In all:

What 0.3 added

Version 0.3 came with HyperSpace 3D's milestone 25, from the gaps that the documentation of 0.2 found; the specification marks each addition "(0.3)". In all:

What 0.3's first edition wrote down for every version is no addition: how a scene is lit and seen, which way a panorama faces, and the least every renderer must allow. A 0.1 or 0.2 page keeps its meaning, and is now drawn the same way by any renderer that follows the text. Compressed models (Draco, meshopt, KTX2 pictures) are not part of the language either: they are glTF extensions a renderer reads, at any version.

The editions of 0.2

A version's specification can have more than one edition. An edition changes the document, not the language: it says what was left unsaid, and corrects what was wrong. The releases of HoloML's parser and checker are numbered with it: 0.2.0 came with the first edition of 0.2, 0.2.1 with the second, and 0.2.2 with the third; 0.3.0 came with the first edition of 0.3, and 0.3.1 with its second. The change log lists what each release changed.

The second edition, of 2026-09-29, has the same language: no page changes its meaning, and every page valid in the first edition is valid in the second. What changed is the document, now written in the form of W3C specifications. It has an abstract and a status; conformance classes, which say what a page, a checker, and a renderer each have to do; requirement words in capitals, as BCP 14 (the IETF's rules for those words) defines them; terminology; the processing model; considerations of security, privacy, accessibility, and internationalization; a formal grammar, and the scene API in Web IDL, the notation of web APIs; the media type's registration; references; and an index.

Where the first edition left something unsaid, the second edition says it, and marks it as a clarification:

The third edition, of 2026-09-30, followed a review of the specification against itself, against the checker, and against HyperSpace 3D. It corrects the places where they disagreed, and says exactly which mistake a reader reports and at which character, so that a second reader can give the same results from the text alone. Most of it changes nothing for a page. Two corrections make the checker stricter:

A few make it looser: a time may be written with any form of number (1e3ms), and the content of a meta may be empty. No page that is valid in the third edition means anything other than it did.

The first edition stays at the tag v0.2.0. Before 0.2, a release numbered 0.1.1 (2026-09-27) fixed HoloML's parser and checker.

What comes next

Ideas for later versions: movement along paths, physics, named colours, styles shared between elements, and spaces shared by several people.

Read more