GDevelop / W3C Games Community

đź‘‹


Clément
Florian
@FlorianRival
@ClementPasteau

GDevelop in a few words
- "No-code" game creation platform
- Open-source engine
- Based on web technologies
- Game engine based on PixiJS
- Interface built with React
- Core logic written in C++, compiled to WebAssembly






GDevelop in a few images



React based interface
- The whole app is built on React (with Material-UI as a component library).Â
- Scalable and works well for an app like GDevelop!Â

Typing
- We have a mix of TypeScript (game engine) and Flow type (editor).
- Saved our lives more than once!
- Considering migrating everything to TypeScript in the future - as long as we can run type checking separately from the transpilation.

WebAssembly usage
- The core logic (how to represent a game, tools to generate code from a game, etc...) is written in C++
- Using Emscripten, we compile it to a WebAssembly library and use it directly.

Our usage of PixiJS
- Started with PixiJS as a dual canvas/WebGL renderer (which was useful at the time) and very performant
- Great to see support of WebGL2 (and looking at how WebGPU will rise đź‘€)
- Mostly smooth experience (except for some hiccups on iOS)Â

Pain points,
challenges, or things hard to deal with

Storing data locally... and keeping it
- There are a few solutions to store data locally: Web Storage API (localStorage), IndexedDB.
- But it's always too easy for the user (or the browser) to just nuke everything without warnings.
- File System Access API seems a good solution... too bad it's not (yet?) usable everywhere (Firefox, Safari)

Consistent performance
- Easy to fall out of the “happy path” of JS engine and get deoptimized.
- Some warnings are surfaced in debuggers... but overall we need to be cautious.
- Spector.js, Safari WebGL command inspector: we need more of these tools!
- Impact of garbage collection can vary across devices - no way to easily measure/trigger a GC.
- A "super strict"/"never slow" JavaScript mode would be awesome.

iOS and web technologies
- At each new iOS version, something will break.
- We had some large performance regressions. Fixed by the folks at PixiJS (kudos!)
- Heard too many horrors stories to try too many new things (IndexedDB, PWA support) - iOS forces us to stay old school in our approach.

Monetisation on the web and on mobile devices
- Is ads the only working solution for now?Â
- Started to look at web monetization
- Not sure if this getting any traction? Promises are a bit unclear to us.
Best solution seems still to package as a native app (Cordova) and publish/sell on app stores.

Web games discovery
- Hard to get noticed (though that's true on app stores too)
- Some indie stores (Itch.io) can help.
- But also hard to do "remarketing" as limited push capabilities/no app installed by the user.
- Some companies are promoting HTML5 games (Poki, Google with Gamesnack)
Best solution seems still to package as a native app (Cordova) and publish/sell on app stores.

This being said...
being based on web technologies allows us to be:
fast, agile, working (almost) everywhere
Thank you!Â

deck
By Florian Rival
deck
- 1,147