This has been a long road, but the exciting times are upon us! Thanks to our excellent contributors and our brave volunteer beta testers we are reaching the biggest milestone in the history of Godot so far. We are about to release Godot 4.0 stable. We are very proud of how it has shaped up, the features and enhancements that have been implemented, and most of all, we are proud to have collected such a brilliant team of talented individuals who have carried this major release on their wide and mighty shoulders.
But before we can cut the ribbon and break out the champagne, there are still a few preview releases we must go through, to establish, with your help, that we are truly ready. What you can expect from the next couple of weeks is the same cadence of official builds, aiming to minimize the iteration time between fixing bugs and checking for regressions. We will no longer make any breaking changes or include further enhancements. New features will have to wait for Godot 4.1 later this year. Instead, we will be coming down on the last critical issues we want to be resolved before we ship the first stable release of Godot 4.
There certainly will be remaining bugs, and your experience won’t be as frictionless as it is in the current stable version of Godot 3. It will take time to get to the same level of polish, but hopefully less time than before, thanks to our extended team of developers, and also new members learning about Godot only now and sharing their valuable feedback.
We are committed to evolving the engine further, and hope to see more of your amazing Godot projects soon!
As we keep iterating from previous beta releases, these release notes are focused on the most recent changes (since beta 17). If you’re interested in what major features ship with Godot 4.0, check out our blog post for beta 1. Stay tuned for more articles about new features as we get closer to the stable version.
This release candidate includes some big changes which may interest a lot of users:
A large number of invalid behaviors is now correctly validated and reported in GDScript files (GH-72608). This includes some behaviors that previously appeared as working correctly but were never actually supported by the engine (such as override/shadowing of the engine’s native methods). You can turn errors into warnings, or disable them completely if you need to.
CanvasGroupnodes will no longer appear darker than they should due to an incorrect shading logic (GH-72695).
The remaining reported cases of sub-resources IDs being shuffled without user input should now be resolved (GH-72257). While the issue should be fixed, this is not the final solution to the problem. We will continue improving the underlying systems in future versions of Godot to avoid this kind of situation.
A list of all global scripted classes can now be accessed with a new method,
ProjectSettings.get_global_class_list()(GH-71665). This method provides the information about your custom classes, which you cannot fetch from
ClassDB, and previously had to parse from the project file, or a cache file.
Under certain conditions, namely when particles were involved, stepping through the debugger might have been extremely slow and unresponsive. This should now be fixed (GH-72827).
Translation resources have been reorganized to reduce their impact on the size of the main repository (GH-70623). We have also finished setting up the Weblate platform for Godot 4, so translation efforts can begin!
You can also try the Web editor (early testing, it’s still slow and unstable).
The illustration picture for this article is from Sophia’s Rainbow, an upcoming open-source 3D platformer controller demo. It’s being created in Godot 4.0 beta by GDQuest, and you can check out their existing tutorials and projects in the meantime.
The first Release Candidate concludes the beta stage, and thus it still includes a few API changes which may impact your Godot 4 projects. See the list of PRs with the
breaks compat label for details.
Some of the most notable feature changes in this update are:
- Android: Rename Godot’s ‘custom build’ to ‘gradle build’ to better reflect the underlying build process (GH-72552).
- Android: Improve Vulkan capability detection on Android (GH-72780, GH-72806, GH-72816).
- Animation: Improve naming consistency of animation nodes (GH-72509).
- Animation: Fix AnimationNodeTransition initialization and AnimationNode remapping method (GH-72722).
- Animation: Fix animation audio to play considering time when seeking (GH-72727).
- Animation: Fix AnimationTrackEditor doesn’t open when selecting
AnimationPlayernode while another editor is open (GH-72805).
- Animation: Fix AnimationEditor ignoring region of
- C#: Sync C# Array with Core (GH-71786).
MSBuildlogs and panel enhancements (GH-72061).
- C#: Qualify
Console’s namespace to avoid mix-up with plugin’s objects (GH-72434).
- C#: Set
AppContext.BaseDirectoryfor editor builds and preserve directories in output during export (GH-72553, GH-72554).
- C#: Implement
IEquatable<>and equality operators for
- C#: Rename export settings
dotnetand remove unused AOT settings (GH-72849).
- Core: Expose and document
- Core: Fix sub-resource IDs resetting when preloaded (GH-72257).
- Core: Fix several conditions for crashes in Camera2D (GH-72550, GH-72665).
- Core: Fix returning dangling data from a char
- Editor: Fix right-click on some files changes the ‘New’ menu entry to ‘Show in File Manager’ (GH-72576).
- Editor: Improve Editor Layout dialogs (GH-72559).
- Editor: Fix broken
scaled_orthogonal()& subgizmo global scaling (GH-72669).
- Editor: Improve Connect dialog navigation (GH-72741).
- Editor: Fix ghost SpriteFramesEditor causing crash (GH-72783).
- Editor: Fix jump to definition for methods using
Ctrl + LMBwhen using
- Editor: Multiple fixes to over plugin handling (GH-72796).
- Editor: Fix some cases of stepping through the debugger being extremely slow (GH-72827).
- Editor: Bind
- GDExtension: Expose
_err_print_errorwith message parameter to GDExtension (GH-71865).
- GDExtension: Remove unnecessary
stdio.hfrom GDExtension interface (GH-72786).
- GDExtension: Use
GDExtensionBoolin GDExtension interface (GH-72878).
- GDScript: Cleanup function state connections when destroying instance (GH-65910).
- GDScript: Fix code-completion suggesting non-static members for custom classes (GH-70002).
- GDScript: Better handling of
@rpcannotation and autocompletion (GH-72276).
- GDScript: Fix unreachable code warning for
- GDScript: Improve usability of setter chains (GH-72398).
- GDScript: Improve validation and documentation of
- GDScript: Fix type certainty for result of ternary operator (GH-72512).
- GDScript: Fix
can_referencecheck for typed arrays (GH-72546).
- GDScript: Fix several conditions resulting in a crash (GH-72557, GH-72567, GH-72592).
- GDScript: Add warnings that are set to error by default (GH-72608).
- GDScript: Fix
awaittype inference (GH-72677).
- GDScript: Fix
- GDScript: Don’t allow
@onreadywithout inheriting Node (GH-72794, GH-72804).
- GUI: Use
max_sizeto limit window size and position with
- GUI: Fix some cases of wrong position of a popup in
- GUI: Fix
SplitContainerrendering and theming (GH-71862).
- GUI: Fix
get_parent_anchorable_rect()not returning the correct size in some cases (GH-72204).
- GUI: Always show caret when moving in
- GUI: Make
RichTextLabel’s context menu customizable (GH-72651).
- GUI: Fix crash related to using undefined system fonts (GH-72743).
- Import: Allow reimport appending of new files during the import process and use it for embedded glTF images (GH-72455, GH-72628).
- Import: Fixes to the glTF export with baking and null checks (GH-72700).
- Import: Better error handling for Blender RPC import (GH-72802).
- Input: Fix mouse/drag/touch
InputEvents having no device ID (GH-72740).
- Input: Fix
- Input: Fix several input and focus issues in X11 (GH-72785, GH-72826).
- Internationalization: Separate property translation from editor translation, move sources to separate
- macOS: Fix splash screen minimum display time not working correctly (GH-72307).
- Navigation: Fix
NavigationMeshbaking AABB Editor handling and visuals (GH-72655).
- Physics: Fix propagation order for 2D physics picking events (GH-68492).
- Rendering: Fix texture rect transpose for OpenGL (GH-72586).
- Rendering: Add layer slice support to render device and render buffers (GH-72589).
- Rendering: Fix
SoftBody3Dbeing incorrectly culled (GH-72631).
- Rendering: Expose
- Rendering: Ignore instance color and instance
custom_datawhen not used in the OpenGL renderer (GH-72681).
- Rendering: Fix
visible_instance_countbeing ignored after the first frame (GH-72684).
- Rendering: Avoid shading
CanvasGroupnodes twice (GH-72695).
- Rendering: Implement
cull_maskfor decals and lights in mobile and compatibility backends (GH-72810).
- Rendering: Set instancing flags when using
GPUParticlesin OpenGL renderer (GH-72853).
- Rendering: Optimize
- Shaders: Allow
.gdshaderfiles in the 3-to-4 project convertor (GH-72334).
- Shaders: Fix shader failure when using non-const initializer on a constant (GH-72494).
- Shaders: Prevent preview error for the instance parameter in visual shader (GH-72660).
- Windows: Fix window size for fullscreen windows during window creation (GH-72622).
- Windows: Update
last_focused_windowwhen the focused subwindow is deleted (GH-72624).
- XR: Add XR environment blend mode support (GH-72604).
This release is built from commit c4fb119f0.
The downloads for this dev snapshot can be found directly on our repository:
- Standard build (GDScript, GDExtension).
- .NET 6 build (C#, GDScript, GDExtension).
With every release we accept that there are going to be various issues, which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a list of known bugs in the 4.0 milestone.
You will likely see this list reduced drastically over the coming days as we continue to re-triage those issues and postpone the ones that are not critical for the 4.0 release.
As a tester, you are encouraged to open bug reports if you experience issues with this release. Please check first the existing issues on GitHub, using the search function with relevant keywords, to ensure that the bug you experience is not known already.
As in any major release, there are going to be compatibility-breaking changes. However, we still try to provide a migration path for your projects. If you experience a regression without a known migration path or workaround, do not hesitate to report it.
Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, and a handful of part or full-time developers hired thanks to donations from the Godot community. A big thank you to everyone who has contributed their time or financial support to the project!