# ABI contract (exports & wrappers) `mujoco-wasm-forge` treats exported symbols as an explicit contract. ## The contract - The definitive list of exported C symbols is `dist//abi/exports.lst`. - The WASM build consumes it via Emscripten `-sEXPORTED_FUNCTIONS=@.../exports.lst`. That means “what is exported” is always reviewable as a plain text diff. ## A ∩ B = C (flat exports) The export pipeline intentionally keeps three sets visible: - **A**: header-derived declarations (introspection). - **B**: implemented symbols (from `nm_symbols.json`). - **C**: wrapper exports (the supported surface, typically `mjwf_*`). Generators under `abi_exports/` merge these inputs and produce: - wrapper sources (`mjwf_abi_funcs.*`, `mjwf_abi_structs.*`), - wrapper export manifests (for auditing), - `exports.lst` (used for linking). ## JS/Runtime surface The primary output is Emscripten `mujoco.js`/`.wasm`. Runtime entrypoints such as `ccall`/`cwrap` are exported by the link flags in `app/CMakeLists.txt`.