Unofficial Implementation of Subset of Raylib API in JavaScript so you can use it from WebAssembly. Intended as a simpler Web version of Raylib that does not require Emscripten.
Warning
This is a Research Project and not guaranteed to be useful in present or/and future! If you quickly need to port your Raylib game to Web just follow these instructions: Working for Web (HTML5)
The main idea is to enable a very specific style of Programming in C for WebAssembly without Emscripten but for Raylib. The current limitation is that Zozlib.js is not fully implemented, but it does not mean it is useless! If you have a Game that uses only implemented function you can use Zozlib.js. And if only few needed functions are not implemented you can implement them and submit a PR thus improving the library for future uses.
We have no plans to replace the official Emscripten version of Raylib. This is a Reasearch Project intended to explore how far this approach can be pushed.
The demo is deployed to GitHub pages: antonpieper.github.io/zozlib.js But you can run it locally.
$ python3 -m http.server 6969
<browser> http://localhost:6969/The browser entrypoint now runs directly from src/main.js, and the project no longer requires a TypeScript compile step.
Type safety is enforced via JSDoc + static checking:
pnpm run typecheckclang -o nob nob.c
./nob./nob selects compilers this way:
- Native builds use
${CC}if set, otherwiseclang. - WASM builds use
${WASM_CC}if set; otherwise${CC}
On systems where only a versioned clang supports WASM, run for example:
WASM_CC=clang-21 ./nob