I wrote everything from scratch[1], like old games. However, unlike them, I designed a flexible Lua API that’s powerful enough to create (small) games.
I used SDL3 with hardware acceleration, OpenAL, Lua (via sol3), PhysFS, and nlohmann::json. (I could have used only Lua, but the engine needs to interface with the web via WebSockets.) For WebSockets, I use Boost only on desktop and mobile; on the web, I rely on the browser’s native API.
1 - Code is like pasta — much more delicious when homemade.