Skip to content

Format MIME types and sniffing

Format Detected as (format / variant) MIME type Extension (hint only) Schema / spec
.dome packed dome / zip application/vnd.nativemind.freedome.dome+zip .dome schemas/dome/1.x/dome.schema.json, 01b
.dome unpacked dome / directory (directory) *.dome/ same
.zelim JSON project (variant J) zelim / json application/vnd.nativemind.zelim+json .zelim schemas/zelim/{1.0,1.1}/zelim-project.schema.json
.zelim binary quantum scene (variant B) zelim / binary application/vnd.nativemind.zelim .zelim formats/zelim-binary.ksy
.boranko 1.1 folder boranko / directory application/vnd.nativemind.boranko+json (its data.json) <name>_boranko/ schemas/boranko/1.1/boranko.schema.json
.boranko 1.1 packed for transport boranko / zip application/vnd.nativemind.boranko+zip .zip / .boranko.zip same
.boranko 1.0 single file boranko / single-json application/vnd.nativemind.boranko+json .boranko schemas/boranko/1.0/boranko.schema.json
.comics (Comics.Editor) comics / data application/vnd.nativemind.comics+zip .comics schemas/comics/1.0/comics-data.schema.json
.comics legacy (images only) comics / legacy application/vnd.nativemind.comics+zip .comics schemas/comics/1.0/comics-metadata.schema.json
FDMESH warp sidecar (not sniffed; .dome entry) application/vnd.nativemind.freedome.fdmesh .mesh formats/fdmesh.ksy

Sniffing order — one function in every codec

Section titled “Sniffing order — one function in every codec”

Content wins; the extension is never consulted. Reference: tools/sniff/formats.mjs (sniff); corpus: conformance/sniff/cases.yaml.

  1. Directory: dome.json with "format": "dome" → dome/directory; else data.json whose root has a pages array → boranko/directory; else unsupported-format.
  2. ZIP (50 4B 03 04; the container is opened with the .dome ZIP rules — entry-name guard, limits; a broken container fails with its problem, e.g. validation-failed pointer /entries/<i> for ../x): first entry mimetype = the .dome MIME → dome/zip; root dome.json with "format": "dome" → dome/zip + warning no-mimetype; root data.json with layers or sounds (or a data.json that does not parse — the decoder then fails with validation-failed) → comics/data; root data.json with pages, or <x>_boranko/data.json → boranko/zip; only images (+ metadata.json / info.json) → comics/legacy; else unsupported-format.
  3. ZELIM at offset 0: a complete 64-byte header with bytes 5..7 = 0 → zelim/binary; otherwise (e.g. the 9-byte Sphere placeholders) unsupported-format.
  4. Text: after an optional UTF-8 BOM and JSON whitespace (space, tab, CR, LF) the first byte is { and the document is UTF-8 JSON: header.format == "zelim" → zelim/json; a pages array and version absent or 1.0.x → boranko/single-json; anything else → unsupported-format.
  5. Everything else → unsupported-format (415).

A .zelim that matches neither variant (JSON without header.format: zelim, PNG, .dome content …) is unsupported-format for a .zelim reader.