SuperTuxKart browser build for Browser Games Now, 2026-10-20

Engine: ading2210/stk-code, wasm branch, commit
43d3673a765d2bc2d01adc29fc87e990b7c90a3d
Compiler: Emscripten 3.1.57, macOS arm64. CMake 4.3.0.

Corresponding engine source is served here in sources/engine-source.tar.gz.00
and .01. Concatenate these two files in numeric order, extract with --strip-components=1,
and apply engine.patch with patch -p1. The patch includes the actual build-script
portability changes used on macOS and offline-only UI changes. For GNU sed, remove
BSD sed's empty backup-extension argument in wasm/build_deps.sh.

Install autoconf, automake, GNU libtool (glibtoolize on macOS), CMake and pkg-config.
Install and activate Emscripten 3.1.57 in wasm/emsdk, then:
  LIBTOOLIZE=glibtoolize bash wasm/build_deps.sh
  bash wasm/build.sh Release

Dependency revisions are fixed in dependency-pins.json. Full source archives are
in sources/*-source.tar.gz (concatenate numbered parts for HarfBuzz first). Extract each into wasm/build/<dependency> BEFORE
running build_deps.sh, so it uses the archived source instead of cloning a tag.
The script links Ogg 1.3.5, Vorbis 1.3.7, OpenSSL 3.3.0, zlib 1.3.1,
curl 8.8.0, libjpeg-turbo 3.0.3, libpng 1.6.43, FreeType 2.13.2, HarfBuzz 8.5.0.
Bundled engine libraries and their notices are inside the engine source archive.
SDL 2.28.4, SDL_mixer 2.8.0 and SDK Ogg/Vorbis source archives are also
provided in sources/, with hashes in dependency-pins.json. The SDK builds these
ports from its pinned source recipes. OpenAL is the SDK JavaScript implementation.
SDK source/toolchain:
https://github.com/emscripten-core/emscripten/tree/3.1.57
See EMSCRIPTEN-LICENSE for its full combined notices.

Assets: original wasm port's low/256px package, downloaded 2026-10-20 from
https://supertuxkart.pages.dev/game/data_low.tar.gz.manifest and its seven chunks.
They are not rebuilt or modified by this site. Concatenate game/data_low.tar.gz.00
through .06 and gunzip/untar to recover all included files and their notices.
Asset upstream: https://github.com/supertuxkart/stk-assets
Asset build recipe: wasm/pack_assets.sh and android/generate_assets.sh in source.
Do not call this asset pack a reproducible export of an identified stk-assets commit:
the original deployment provides no source-revision manifest for its asset export.

Loader uses pako 2.1.0 (MIT/zlib) and js-untar 2.0.0 (MIT), bundled here without a CDN.
Complete npm source packages are in sources/. Host changes are in host-source.tar.gz
and engine.patch. boot.js adapts the original GPL loader to same-origin paths,
five loading languages, automatic startup and a separate cache namespace.
The engine's existing user_config.cpp sync_idbfs hook persists /home via IDBFS.

To package a completed local rebuild in the application repository:
  python3 scripts/prepare-supertuxkart.py --source /path/to/stk-code --assets /path/to/extracted-low-assets
manifest.json records distributed file sizes and SHA-256. No file may exceed 25 MiB.
No server component or external multiplayer proxy is used. This is an offline build.

2026-10-22 delivery revision 2:
The engine and assets are unchanged. boot-r2.js loads the existing WASM and seven
asset chunks from https://games.browsergamesnow.com/runtime/supertuxkart-v1/game/
(our Cloudflare R2 bucket browser-arcade-game-assets). Other files and the Play page
remain Cloudflare Static Assets / Worker. No third-party game server is used.
CORS: config/game-assets-cors.json. Cache rule: config/game-assets-cache-rule.json.
Upload each manifest entry with a url using wrangler r2 object put --remote, keeping
the object path, Content-Type application/wasm for WASM and application/octet-stream
for data, and Cache-Control public,max-age=31536000,immutable. Verify byte hashes
and CORS before publishing. Never overwrite game bytes at an immutable URL.
The Play iframe uses ?lang=<locale>&delivery=2 to bypass the previous cached HTML;
boot-r2.js and host-source-r2.tar.gz are new filenames. Old boot.js and source archive
remain available for already-open pages. Browser IndexedDB keys are unchanged.
