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/ 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=&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.