Documentation Index
Fetch the complete documentation index at: https://mintlify.com/mihaip/infinite-mac/llms.txt
Use this file to discover all available pages before exploring further.
Infinite Mac runs classic Macintosh software through WebAssembly builds of several open-source emulator cores. The compiled .wasm and .js binaries are already checked into the repository under src/emulator/worker/emscripten/, so you only need to rebuild them if you are making changes to the emulator source itself. The build environment is fully containerised — a single Docker image bundles the Emscripten SDK, Rust toolchain, and all supporting libraries needed to compile every core.
Emulator Submodules
Each emulator is included as a Git submodule. Their upstream repositories are:
Build the Docker Image
The Dockerfile at the repository root installs Ubuntu 24.04, the Emscripten SDK (version 4.0.22), Rust 1.95.0, and all C/C++ build dependencies. Build the image once before compiling any emulator:
docker build -t macemu_emsdk .
To rebuild every emulator core in one shot and automatically copy the outputs into src/emulator/worker/emscripten/, run the convenience script from the repository root:scripts/rebuild-and-import-emulators.sh
This script opens a shell inside the container, runs /scripts/rebuild-all-emulators.sh inside it, and then calls npm run import-emulator for each of the twelve targets (basiliskii, sheepshaver, minivmac-Plus, minivmac-128K, minivmac-512Ke, minivmac-SE, minivmac-II, minivmac-IIx, dingusppc, previous, pearpc, snow).
To open an interactive shell inside the Docker container for manual builds, run:All paths referenced in the per-emulator build instructions below are paths inside this container.
Per-Emulator Build Instructions
After building, run npm run import-emulator <name> from the host to copy the compiled output into src/emulator/worker/emscripten/.
Basilisk II
SheepShaver
Mini vMac
DingusPPC
Previous
PearPC
Snow
Basilisk II requires a bootstrap step to generate the CPU emulator code before the WASM configure and compile steps:cd /macemu/BasiliskII/src/Unix
# Generate the CPU emulator source
./_embootstrap.sh
# Configure for WASM output
./_emconfigure.sh
# Compile
make -j8
Then from the host:npm run import-emulator basiliskii
SheepShaver does not need a bootstrap step:cd /macemu/SheepShaver/src/Unix
./_emconfigure.sh
make -j8
Then from the host:npm run import-emulator sheepshaver
Mini vMac is compiled into multiple model variants. emscripten_setup.sh configures the build; pass model flags to select the target machine:cd /minivmac
# Default: Mac Plus
./emscripten_setup.sh
# Or select a specific model:
# Mac 128K (runs at 1× speed by default for realism):
# ./emscripten_setup.sh -m 128K -speed z
# Mac 512Ke:
# ./emscripten_setup.sh -m 512Ke
# Mac SE:
# ./emscripten_setup.sh -m SE
# Mac II:
# ./emscripten_setup.sh -m II
# Mac IIx (32 MB RAM):
# ./emscripten_setup.sh -m IIx -mem 32M
make -j8
Then from the host, specify the matching model suffix:npm run import-emulator minivmac-Plus
# or: minivmac-128K, minivmac-512Ke, minivmac-SE, minivmac-II, minivmac-IIx
See the Mini vMac build options reference for the full list of configuration flags. DingusPPC uses CMake with the Emscripten wrapper emcmake:cd /dingusppc
mkdir -p build
cd build
emcmake cmake -DCMAKE_BUILD_TYPE=Release ..
make dingusppc -j8
Then from the host:npm run import-emulator dingusppc
Previous is also CMake-based. The ENABLE_RENDERING_THREAD=0 flag is required for the WASM build:cd /previous
mkdir -p build
cd build
emcmake cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_RENDERING_THREAD=0 ..
make previous -j8
Then from the host:npm run import-emulator previous
PearPC uses the same configure-then-make pattern as Basilisk II and SheepShaver:cd /pearpc
./_emconfigure.sh
make -j8
Then from the host:npm run import-emulator pearpc
Snow is a Rust-based emulator and is compiled with Cargo targeting the wasm32-unknown-emscripten target (installed into the Docker image by the Dockerfile):cd /snow
cargo build -r -p snow_frontend_im --target wasm32-unknown-emscripten
Then from the host:npm run import-emulator snow