Running A Content Component In The QIP Interpreter

qip-content-interpreter.wasm accepts a QIP Content component and its input as multipart form data. It executes that component in the same bounded Zig interpreter used by qipdb, then returns the component's output bytes.

make -j qip components/application/wasm/qip-content-interpreter.wasm

qip run \
  -F component=@components/image/svg+xml/svg-recolor-current-color.wasm \
  -F 'input=<svg xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M0 0"/></svg>' \
  -F 'uniforms[color_rgba]=0x654ff0ff' \
  components/application/wasm/qip-content-interpreter.wasm

The request supports these multipart fields:

Uniform values use the target setter's i32, i64, f32, or f64 type. The interpreter validates uniform names, rejects duplicate keys, sorts keys, and calls each uniform_set_<key> export before render. Setter instructions and render instructions share the outer component's instruction budget:

qip run \
  -F component=@components/image/svg+xml/svg-recolor-current-color.wasm \
  -F input=@qip-logo.svg \
  -F 'uniforms[color_rgba]=0x654ff0ff' \
  components/application/wasm/qip-content-interpreter.wasm \
  -u instruction_budget=2000000 \
  > recolored.svg

The component accepts target modules up to 1 MiB, target input up to 8 MiB, and fixed target memory up to 192 MiB. The instruction budget defaults to one million and clamps at ten million. A malformed request, unsupported Wasm feature, trap, exhausted budget, invalid target Content contract, or target rejection becomes an outer Content rejection.

The output has the generic application/octet-stream content type. A QIP component's content-type metadata is static, so this wrapper cannot declare the target's runtime-selected output type. Callers that know the target should restore or validate its expected type at the application boundary.

The wrapper validates the target's buffer and UTF-8 contract. It does not match the input form part against the target's declared content type. The multipart request carries the target input bytes, but not a trusted target content-type contract.

When Not To Use It #

Use qip run when you need the normal runtime, target-specific content-type composition, or production speed. Use qipdb when you need instruction steps, memory inspection, counters, or terminal interaction. This interpreter component is useful for testing the interpreter itself, measuring interpreter overhead, or placing bounded nested execution inside a QIP pipeline.