GDevelop
About GDevelop
Most attempts at a no-code game engine fall into one of two traps. Either the visual system is so simplified that anything interesting becomes impossible, or it is a thin wrapper over code that leaks the moment you leave the tutorial. GDevelop avoids both by treating events as the primary way to express game logic rather than as a beginner’s mode bolted onto something else.
An event is a set of conditions and a set of actions. When the player presses a key and is standing on a platform, apply an upward force. That is the whole model, repeated a few hundred times, and it turns out to be enough to build a finished game with.
What makes it work is the layer beneath. Events are compiled into JavaScript before the game runs rather than being interpreted step by step, so what ships is not a visual system pretending to be code.
It is code, generated from your diagram.
The event sheet, and why it is not slow
That compilation step is the answer to the obvious objection. Visual scripting has a reputation for performance problems because most implementations walk a tree of nodes at runtime. Here the events become generated JavaScript once, ahead of time, and the rendering runs through WebGL underneath.
Variable handling deserves a mention too, because it is where visual systems usually get messy. Alongside scene and global variables there are local variables scoped to a single event, which is what you want for a counter inside a loop, and variables that belong to an extension rather than cluttering the scene list.
Anyone who has watched a project accumulate forty global variables named temp2 will understand why that matters.
There is also a diagnostic report that scans the event sheet for references to variables or behaviours that no longer exist. Silent failures where a condition quietly never matches are the hardest bugs to find in a system like this, and GDevelop flags them rather than letting you discover the problem three scenes later.
Behaviours do the work you would otherwise write
A behaviour in GDevelop is reusable logic attached to an object, and there are well over a hundred of them shipped or available. Give a sprite the platformer character behaviour and it walks, jumps, falls, collides properly without a single event. Top-down movement, pathfinding, physics, draggability, tweening, health all work the same way.
This is where the time saving actually lives. Writing a decent platformer controller from scratch, one that handles coyote time and does not stick to walls, is a day’s work in any engine. Here it is a checkbox with a panel of parameters underneath, and the parameters are the ones you would have exposed anyway.
Behaviours drive whatever art you feed them, and sprite objects handle animation frames, collision masks and points per frame. Aseprite is the usual companion for producing those frames, since its export lines up with how animations get imported here.
Extensions, and writing your own without leaving the editor
Beyond the built-in set sits an extension system with official, experimental, community collections, all searchable and installable from inside the editor rather than through file copying. Advanced control schemes, interface systems and dialogue editors are all available that way.
The part that gets undersold is that you can build extensions yourself, in the editor, using the same event system. A custom behaviour, a new action, a new condition, a new expression, all defined visually and then reusable across projects or publishable to the community list.
That closes the usual no-code gap. When a tool cannot do what you need, the normal outcome is abandoning it. Here the normal outcome is spending an hour building the missing piece and having it available forever.
The 3D side, within limits
Three-dimensional objects and imported models are supported, rendered through a separate 3D pipeline alongside the 2D one, and community extensions add morph target control, look-at actions, normal maps and physically based materials.
Set expectations at stylised low-poly rather than anything ambitious. The lighting model is simple, the tooling around 3D is thinner than the 2D equivalent, and complicated scenes are not what this engine is for. Within those bounds it produces perfectly good isometric puzzle games and simple three-dimensional platformers.
Models come from elsewhere, and Blender is the obvious source since its export formats are what GDevelop expects.
Keep polygon counts modest and bake your lighting into textures, because the renderer will not do heavy lifting for you.
Multiplayer and leaderboards, on somebody else’s servers
Real-time multiplayer arrives with lobbies and state synchronisation handled for you rather than as a socket programming exercise. Leaderboards come with player login attached, so scores can be tied to accounts rather than to whatever three letters somebody typed.
Understand what you are signing up for, though. These features run against hosted infrastructure rather than something you operate, which means a published game depends on a service outside your control.
There are documented rate limits on leaderboard submissions, a dozen successful saves a minute across a game and six per individual leaderboard, which is generous for normal play but matters if you design a mechanic that writes a score every few seconds.
Assets, effects, sound
An asset store sits inside GDevelop with thousands of items available alongside paid packs, covering sprites, sound effects, templates, custom objects and extensions. Browsing it without leaving the project is the sort of workflow detail that separates a tool people finish games in from one they abandon.
Shader effects apply to layers or individual objects by selection, so blur, glow, colour adjustment all happen without writing shader code. Sound is handled through ordinary actions, and for the retro effects that most small games need, Bfxr generates them in seconds.
If your art direction is painted rather than pixelated, a painting application built for illustration work fits the pipeline just as well, since GDevelop cares about image files rather than where they came from.
Exporting, and where the no-code promise ends
Web export is the shortest path and the one to test with, producing something you can put on a page immediately. Desktop executables are a single action. Mobile store builds run through an online build service using credits, which is the point where an otherwise unrestricted project meets a paid dependency, and browser game portals are supported directly.
For everything events cannot express, JavaScript blocks sit inside the event sheet. Calling an external API, pulling in a data source, doing something unusual with the runtime, all of it happens in code embedded among the events rather than in a separate scripting layer. There is also an AI assistant in the editor that generates events and answers procedural questions, which is more useful on the how-do-I questions than on architecture.
The honest limitation is scale. An event sheet with several hundred entries becomes something you scroll rather than read, and the project format does not diff cleanly, so version control and collaboration are awkward in ways a text-based engine avoids. Groups and external event sheets help.
They do not solve it.
Conclusion
GDevelop is the engine to recommend when somebody wants to finish a game rather than learn to program first. Teachers, hobbyists, designers prototyping a mechanic before committing to a studio pipeline, and anyone who has bounced off a code-first engine will get something playable here in an afternoon, and the compilation step means what they build is not a toy.
The reservations are about scale and independence rather than capability. A project past a certain size fights the editor, teamwork fights the file format, and the parts that feel most modern, meaning multiplayer, leaderboards, mobile builds, all lean on services somebody else operates.
Start small, learn the extension system early so you are never blocked, and GDevelop takes you considerably further than the no-code label suggests.
Pros & Cons
- Events compile to JavaScript ahead of time rather than being interpreted at runtime
- Over a hundred behaviours cover platformer, top-down, physics, pathfinding movement
- Local and extension-scoped variables keep large projects from drowning in globals
- The diagnostic report catches references to missing variables and behaviours
- Custom behaviours, actions, expressions can be authored inside the editor visually
- Multiplayer and leaderboards work without any server setup on your part
- Shader effects apply to layers and objects by selection, with no shader code involved
- Web and desktop exports are single actions, and JavaScript blocks cover the gaps
- Large event sheets become difficult to move through, with no substitute for reading them
- The project format does not diff cleanly, making version control and teamwork awkward
- 3D is limited to stylised low-poly work with a simple lighting model
- Mobile store builds depend on an online build service and its credits
- Multiplayer and leaderboards rely on hosted infrastructure you do not control
- Performance ceiling sits below native engines for anything demanding
Frequently asked questions
No. Games can be built entirely from events, and the behaviour library covers movement, physics, pathfinding without code. JavaScript blocks exist for the unusual cases, but they are an escape hatch rather than a requirement.
Not for the reason people assume. Events are compiled into JavaScript before the game runs rather than interpreted during play, and rendering goes through WebGL. The ceiling is lower than a native engine, but the visual layer is not the bottleneck.
Yes, within limits. Imported models, morph targets and physically based materials are all supported, and the results suit stylised low-poly work. Anything with demanding lighting or large complex scenes belongs in a dedicated 3D engine.
It can, through an online build service that compiles the store packages for you. That service works on credits, which is where an otherwise unrestricted project runs into a paid dependency.
Through built-in lobby and synchronisation features rather than networking code you write. The trade is that a published multiplayer game depends on hosted infrastructure rather than servers you run yourself.
Up to a point. The engine handles it, but the editing experience does not scale gracefully. Several hundred events become hard to move through and the project format resists version control, so plan the structure early.