.tar.bz2 anywhereRuns 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.
.tar.bz2 package (e.g. from
prefix.dev/emscripten-forge-4x-experimental)
into the top bar and press Run URL..tar.bz2 anywhere on the page.?pkg=<url-encoded package URL>
to auto-load a package on page open..tar.bz2 in-browser via
@emscripten-forge/untarjs.share/<name>/
(looks for the single *.wasm), then wraps every sibling
file (<name>.js, qtloader.js, the wasm blob)
as blob: URLs.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.resize events after boot to
work around a Qt6-wasm quirk where the first paint only commits after
a resize.The runner is intentionally strict about layout. A package is runnable if and only if it satisfies:
.tar.bz2 (standard conda
package). .conda not yet supported.share/<appname>/<appname>.wasm, with these
three siblings in the same directory:
<appname>.js — Emscripten glue built with
-sMODULARIZE=1 -sEXPORT_NAME=<appname_underscored>_entry
(Qt's qt_add_executable does this by default).qtloader.js — Qt's browser boot helper. Shipped
automatically by Qt for any wasm-target executable.<appname>.wasm — the compiled binary.window.<appname_with_dashes_as_underscores>_entry
(e.g. qt-calculator → qt_calculator_entry).
This is the default MODULARIZE pattern for
qt_add_executable.-sJSPI=1 at final
link (Qt propagates this via cmake INTERFACE when qt6 is built with
-feature-wasm-jspi, which the
emscripten-forge-4x-experimental qt6 is).The runner discovers <appname> by scanning for the
single share/*/*.wasm file in the archive, so you don't
pass it separately.
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.
requestAnimationFrame via emscripten C API)..so): not yet supported. The runner only knows
about the app's own artifacts today..tar.bz2. .conda
format (zstd inside zip) would need additional decoders.Qt itself is LGPLv3; source and recipes are on emscripten-forge/recipes. Source of this runner: emscripten-forge/recipes / docs/qtapp.