Skip to content

WIT Levels

A WIT level is one number naming an exact set of murmur:* WIT package versions. Each mur serves one level, and an artifact loads on it only when it fits that level. The levels are listed in crates/capsule-runtime/wit/levels.txt; the tables on this page are generated from that file and the repository's release tags.

Term Meaning
Level A positive integer and the version of every murmur:* package it lists. Levels are numbered from 1 with no gap, and a committed level never changes
Served level The newest level in levels.txt of the mur you run. mur version prints it with its packages
Fit An artifact fits a level when every murmur:* interface it names, exported or imported, is at exactly the version that level lists for its package
Built-at level The newest level, in the building mur's table, that an artifact fits

Compatibility table

Level mur releases Changed from the previous level
1 v0.6.0, v0.7.0, v0.8.0 first level
2 not yet released murmur:driver 0.3.0 → 0.4.0
3 not yet released murmur:tool 0.1.0 → 0.2.0
murmur:tool-registry 0.1.0 → 0.2.0

Releases serving no level: v0.1.0, v0.2.0, v0.3.0, v0.4.0, v0.5.0.

Package Level 1 Level 2 Level 3
murmur:artifact-manager 0.1.0 0.1.0 0.1.0
murmur:capsule 0.1.0 0.1.0 0.1.0
murmur:conversation 0.2.0 0.2.0 0.2.0
murmur:driver 0.3.0 0.4.0 0.4.0
murmur:hook 0.9.0 0.9.0 0.9.0
murmur:host 0.1.0 0.1.0 0.1.0
murmur:message 0.1.0 0.1.0 0.1.0
murmur:runtime 0.4.0 0.4.0 0.4.0
murmur:runtime-guest 0.1.0 0.1.0 0.1.0
murmur:shell 0.1.0 0.1.0 0.1.0
murmur:stream 0.1.0 0.1.0 0.1.0
murmur:task 0.1.0 0.1.0 0.1.0
murmur:task-io 0.1.0 0.1.0 0.1.0
murmur:tool 0.1.0 0.1.0 0.2.0
murmur:tool-registry 0.1.0 0.1.0 0.2.0

Fit

An artifact's murmur:* interface names are read from its component, for example murmur:driver/process@0.4.0. Its package is the text before the / (murmur:driver) and its version the text after the @.

The artifact names Fits the level when
No murmur:* interface (a skill, a native tool, a component importing only wasi:*) Always: it fits every level
A murmur:* interface The level lists its package at exactly that version
A murmur:* interface with no @version, or of a package the level does not list Never

Versions compare as exact strings: 0.3.0 does not fit a level listing 0.4.0, in either direction.

Where fit is decided:

Command What it does with fit
mur run, mur eval, mur new Refuse a driver that does not fit the served level with E-WIT-LEVEL-001, naming the newest version in its source's index that fits
mur install <scope>/<name> Installs the newest version that fits the served level and has a payload for this platform. <scope>/<name>@<version>, --all-platforms and a no-argument install refuse a version that does not fit with E-WIT-LEVEL-001 before anything is fetched — see Version selection
mur search Lists the newest version of each artifact that fits the served level
mur index Writes each version's built-at level
mur doctor Lists every installed artifact with its built-at level and whether it fits (WIT level block)

Built-at level

mur build writes the built-at level into every .mur.zip it packs, as the archive entry murmur-build.json:

{"built_at_level":1}
Where Field Written by
.mur.zip murmur-build.json → built_at_level mur build. A payload that fits no level is packed without the entry, and the Built artifact: line says so
Installed artifact .meta.json → meta.built_at_level Read from the archive on every install or publish. Absent when the archive packs no murmur-build.json
Artifact index versions[].built_at_level mur index, from the files' murmur-build.json, or derived (Artifact Index)

murmur-build.json is reserved: a requires_files: entry, or a file in a mur build --skill input, that packs under that name is refused with E-BLD-002. An archive whose murmur-build.json does not hold a non-negative integer built_at_level is refused on install with E-IO-003.

Derived labels

An artifact built before murmur-build.json existed carries no label. Wherever a label is needed, it is derived by the same rule mur build uses: the newest level the artifact's recorded interfaces fit, or none.

Shown by Recorded label Derived label
mur doctor built at 1 built at 1 (derived), or built at none (derived) when it fits no level
mur index "built_at_level": 1 "built_at_level": 1, or no built_at_level key when it fits no level

A recorded label above the served level reads built at <N> (newer than this mur knows) in mur doctor: the artifact was built by a newer mur.

See also

  • mur version: the served level and its package table.
  • mur doctor: installed artifacts against the served level.
  • WIT Interfaces: what each package holds and when its version moves.