We have had quite a pause since Godot 4.1.1 — two months without a new patch release (blame the summer break!). So it’s long overdue we have one, starting of course with a release candidate to validate that everything is in order and no new changes introduce regressions.
Godot 4.1.2 contains a number of stability improvements, addressing crashes related to threading, editor features, networking, GUI, and rendering. A significant bug related to allocations of plain objects has been fixed as well, which should improve performance and memory usage, especially at scale (GH-81037). There are also a number of performance fixes in GUI nodes, such as
RichTextLabel, which make parts of the editor UI more responsive (GH-79325, GH-80857). Several optimizations have been made to rendering backends as well.
We have received reports of issues with saving projects on the web platform, and this release resolves these issues (GH-79866), as well as a few other platform-specific bugs. Another important problem fixed in 4.1.2 is doubled input events coming from gamepads when using Steam Input (GH-76045). And as always there is a bunch of smaller, but no less crucial changes and updates!
Maintenance releases are expected to be safe for an upgrade, but we recommend to always make backups, or use a version control system such as Git, to preserve your projects in a case of corruption or data loss.
Jump to the Downloads section, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the Web editor or the Android editor for this release. If you are interested in the latter, please request to join our testing group to get access to pre-release builds.
The illustration picture for this article comes from Fisk — an open world survival horror game with Lovecraftian vibes currently being developed by Kristian Nilsen with Godot 4. (It uses Qodot for creating geometry, by the way, which deserves its own shoutout!) You can follow Kristian on Twitter for more updates and you can download Fisk today from its website.
56 contributors submitted around 150 improvements for this release. You can review the complete list of changes with our interactive changelog, which contains links to relevant commits and PRs for this and every previous release. Below are the most notable changes:
- 2D: Fix Camera2D crash when edited scene root is null (GH-79645).
- 2D: Fix
CanvasModulatelogic for modulating the canvas (GH-79747).
- 3D: Fix VoxelGI saving VoxelGIData as a built-in file when prompted to save to an external file (GH-78772).
- 3D: Change property hint range for camera attributes exposure multiplier (GH-79138).
- 3D: Fix Curve3D baking up vectors for nontrivial curves (GH-81885).
- Animation: Fix
Animation::subtract_variantfor affine transforms (GH-79279).
- Animation: Fix
AnimationNodeTransitionwith negative time scale (GH-79403).
- Animation: Remove animation tracks with correct indices (GH-81651).
- Audio: Fix audio stream generators getting freed accidentally (GH-81508).
- Buildsystem: Allow unbundling OpenXR (for Linux distros) (GH-73443).
- Buildsystem: Disable C++ exception handling (off by default in 4.1) (GH-80612).
- Buildsystem: MSVC: Pass build options configuration to Visual Studio projects (GH-79238).
- Buildsystem: MSVC: Make incremental linking optional (GH-80482, GH-81144).
- Buildsystem: MSVC: Enable
/WXon LINKFLAGS with
- C#: Fix deserialization of delegates that are 0-parameter overloads (GH-78877).
- C#: Add missing
useModelFrontparameter to GodotSharp Basis and Transform (GH-79082).
- C#: Hide hostfxr not found error (GH-81690).
- Core: Fix range error for
- Core: Fix byte to float color conversion in
- Core: Fix recursion level check for array stringification (GH-79370).
- Core: Fix global transform validity for
- Core: Fix recursion level check for
VariantWriter::write()with objects (GH-81123).
- Core: Fix string conversion for -0.0 float values (GH-81328).
- Editor: Fix history mismatch (GH-78827).
- Editor: Improve resolution of script type icons (GH-79203, GH-81336).
- Editor: Don’t use splash minimum display time in editor (GH-79388).
- Editor: Automatically add path to built-in scripts (GH-79920).
- Editor: Use
ui_acceptto confirm and close text prompts (GH-81189).
- Export: Fix Windows console wrapper and icon being swapped (GH-80357).
- GDExtension: Fix version check for GDExtension (GH-80591).
- GDExtension: Fix overriding
_export_endfrom GDExtension (GH-80999).
- GDScript: Fix conflict between property and group names (GH-78254).
- GDScript: Properly track extents of constants (GH-79301).
- GDScript: Fix POT generator crash on assignee with index (GH-82004).
- GUI: Fix
Treeperformance regression by using cache (GH-79325).
- GUI: Fix
root_node_layout_directionproject setting being incorrectly exposed as a range (GH-79611).
- GUI: Fix
CodeEditcompletion being very slow in certain cases (GH-80472).
- GUI: RTL: Improve performance by using list iterators for item/paragraph removal (GH-80857).
- GUI: Enable transparent background for GUI tooltips (GH-81669).
- Import: Use image index instead of texture index for
- Input: Prevent double input events on gamepad when running through Steam Input (GH-76045).
- Input: Android: Set
echoproperty for the physical keyboard events (GH-79089).
- Navigation: Fix NavigationObstacle2D debug position (GH-79392).
- Navigation: Fix NavMesh
map_update_idreturning 0 results in errors (GH-80189).
- Network: Prevent crash when accessing
NodeMultiplayer from thread (GH-79332).
- Network: ENet: Better handle truncated socket messages (GH-79699).
- Network: ENet: Properly set transfer flags when using custom channels (GH-80293).
- Network: Web: Always return -1 as body length in HTTPClientWeb (GH-79846).
- Particles: Add motion vector support for GPU 3D Particles (GH-80688).
- Porting: Fix file permissions for the web platform (affects every Unix-like platform) (GH-79866).
- Porting: macOS: Fix uncapped frame rate for windows in the non-active workspaces (GH-79572).
- Porting: Web: Fix
- Rendering: Enable depth writes during shadow pass and depth pass, disable during color pass (GH-80070).
- Rendering: Fix motion vectors being corrupted when using
- Rendering: Remove GPU readback from
- Rendering: Clamp Volumetric Fog Length property to prevent rendering issues (GH-80485).
- Rendering: Propagate error correctly when max texture size for lightmaps is too small (GH-81543).
- Rendering: Add half-pixel offset to lightmapper rasterization (GH-81872).
- Rendering: GLES3: Reset anisotropic filtering when changing texture filtering mode (GH-79568).
- Rendering: GLES3: Fix multimesh rendering when using colors or custom data (GH-79660).
- Rendering: GLES3: Fix memory access error for
- Rendering: Vulkan: Fix texture update (GH-80781).
- Rendering: Vulkan: Fix crash with many Omni/SpotLights, Decals or ReflectionProbes (GH-80845).
- Shaders: Allow more hint types for uniform arrays (GH-79100).
- Shaders: Fix shader type detection (GH-79287).
- Shaders: Fix Shader and ShaderInclude resource loading (GH-80705).
- XR: Fix issue with accessing hand tracking without timing info (GH-78817).
- XR: Ensure OpenXR classes are declared properly (GH-81037).
- Thirdparty: FreeType 2.13.2, ICU4C 73.2, libpng 1.6.40, libwebp 1.3.2, mbedtls 2.28.4, miniupnpc 2.2.5, openxr 1.0.28, tinyexr 1.0.7.
The downloads for this pre-release build can be found in our GitHub repository:
Standard build includes support for GDScript and GDExtension.
.NET 6 build (marked as
mono) includes support for C#, as well as GDScript and GDExtension.
There are currently no known issues introduced by this release.
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 complete list of known bugs.
As a tester, we encourage you to open bug reports if you experience issues with this release. Please check the existing issues on GitHub first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.
In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.1.x releases, but no longer works in 4.1.2 RC 1).
Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part or full-time developers hired thanks to generous donations from the Godot community. A big thank you to everyone who has contributed their time or their financial support to the project!
If you’d like to support the project financially and help us secure our future hires, you can do so using the Godot Development Fund platform managed by Godot Foundation. There are also several alternative ways to donate which you may find more suitable.