source
hosted by emscripten-forge
Drop a .tar.bz2 anywhere

qt-wasm-runner

Runs Qt6-wasm apps packaged for emscripten-forge directly in the browser. Nothing is installed; the package is fetched (or read from your disk), unpacked in memory, and handed to Qt's WebAssembly loader.

How to load a package

What it does under the hood

  1. Decodes .tar.bz2 in-browser via @emscripten-forge/untarjs.
  2. Locates the app under share/<name>/ (looks for the single *.wasm), then wraps every sibling file (<name>.js, qtloader.js, the wasm blob) as blob: URLs.
  3. Loads Qt's qtloader.js and the app's Emscripten glue, then calls qtLoad() with a locateFile hook that resolves further requests to those blob URLs — no more network.
  4. Fires a couple of synthetic resize events after boot to work around a Qt6-wasm quirk where the first paint only commits after a resize.

Package requirements

The runner is intentionally strict about layout. A package is runnable if and only if it satisfies:

The runner discovers <appname> by scanning for the single share/*/*.wasm file in the archive, so you don't pass it separately.

Browser requirements

Qt6-wasm on emscripten-forge is built with JavaScript Promise Integration (JSPI) for its event loop. That needs Chrome 137+, Firefox 141+, or Safari 18.4+. Older browsers won't run the demos.

Known limitations

Qt itself is LGPLv3; source and recipes are on emscripten-forge/recipes. Source of this runner: emscripten-forge/recipes / docs/qtapp.

Loading help — press ? to dismiss and load a package.