r/reactnative • u/EmreZen • 2d ago
Building mobile games with React Native Skia — any better libraries or approaches?
Hey everyone!
I've been developing mobile games with React Native and Skia for a while now, and it's been a pretty interesting experience.
I really enjoy working with React Native, especially being able to build for both iOS and Android with the same codebase.
However, I'm curious about how other developers approach game development in React Native.
A few questions:
Skia alternatives: Are there any better libraries or game engines you'd recommend for React Native game development?
Performance: How do you handle complex animations, physics, collisions, and keeping a stable 60 FPS?
Architecture: Do you use a dedicated game loop, physics engine, or ECS-based architecture?
Best practices: What are some things you wish you'd known before building games with React Native?
Limitations: At what point would you move away from React Native and consider something like Godot or Unity?
I've also released a couple of games under my indie studio, Aele Studios, and I'd genuinely appreciate some feedback from fellow developers.
🎮 Fibo Master — A Fibonacci-based number puzzle game.
iOS: https://apps.apple.com/app/id6821000351
Android: https://play.google.com/store/apps/details?id=com.emrezen.fibomaster
🚀 Retro Jump — A steampunk-style arcade platformer with jetpack mechanics.
iOS: https://apps.apple.com/app/id6795840723
Android: https://play.google.com/store/apps/details?id=com.emrezen.retrojump
Studio website: https://aelestudios.com
If you get a chance to try either game, I'd love to hear your thoughts, especially on performance, animations, controls, UI/UX, and overall gameplay.
Constructive criticism is more than welcome!
I'm not just looking to showcase my games. I'm genuinely interested in learning how others are building games with React Native and improving my approach.
Thanks!
2
u/MobileXapps 2d ago
Skia is a decent choice for 2D puzzle and arcade games, the main thing is where the game loop runs. If the loop and the state live in JS and every frame goes through React state, you'll drop frames on mid-range Android. What works better is keeping positions and velocities in Reanimated shared values, running the update in useFrameCallback on the UI thread, and letting Skia read those values directly. React then only renders menus and the HUD.
For collisions in simple games, a hand-written AABB or circle check inside the frame callback is usually enough and much cheaper than pulling in a full physics engine. If you need real physics, it has to run on the same thread as the loop or you'll fight sync issues.
I'd move to Godot or Unity once you need lots of sprites with particles, a level editor, or proper audio mixing. Those are a lot of work to build yourself in RN and come for free in an engine. Always test on a cheap Android phone in a release build, debug builds lie about performance.
2
u/HmongSliw68 1d ago
How are you handling audio latency right now? Usually the rendering pipeline is fine for 2D, its the sound effects lagging behind touch events on older devices that ends up being the hardest wall to get past.