Manifest Format

JSON schema for per-language and global manifests

Kumar Anirudha

Table of content
  1. Per-language manifest
  2. Fields
  3. Global manifest
  4. Where they live

Per-language manifest

Every runtime ships a manifest.json that enumerates its versions:

{
    "language": "go",
    "latest": "1.23",
    "versions": {
        "1.23": {
            "file": "go-1.23.wasm",
            "size": 266712,
            "sha256": "efa1e13f39dfd3783d0eff5669088ab99a1ea1d38ac79f29b02e2ad8ddfea29d",
            "released": "2026-02-03T13:23:13Z",
            "wasi": "wasip1",
            "features": []
        }
    }
}

Fields

Field Type Notes
language string Canonical lowercase name (e.g., go, rust)
latest string Pointer to a key in versions
versions map Keyed by version string
versions[].file string Filename of the published WASM artifact
versions[].size number Bytes (post-optimization)
versions[].sha256 string Hex-encoded SHA-256 of file
versions[].released string ISO-8601 timestamp
versions[].wasi string WASI variant — wasip1 today
versions[].features array Optional WASM proposals (e.g., bulk-memory)

generate-metadata.sh writes this file. The latest field auto-updates to the newest version when a build runs. Old version entries are preserved.

Global manifest

A single manifest.json at the repo root aggregates every per-language manifest:

{
    "version": "0.1.4",
    "build_date": "2026-02-15T14:00:00Z",
    "languages": {
        "go": {
            "latest": "1.23",
            "versions": ["1.23"],
            "source": "https://go.dev/",
            "license": "BSD-3-Clause"
        },
        "rust": {
            "latest": "1.82",
            "versions": ["1.82"],
            "source": "https://www.rust-lang.org/",
            "license": "MIT/Apache-2.0"
        }
    }
}

The source and license fields come from scripts/generate-global-manifest.sh. The aggregator runs after every build; it never edits per-language files.

Where they live