It's c++ with SDL and as little platform-specific code as I can get away with. eg. low latency audio on Android was impossible using stock SDL.
The web version was originally a straight recompile with emscripten but it was way too slow so it's a hybrid approach where the board engine is emscripten and the UI is rewritten with HTML/canvas.