Safety goggles on, people! Features and Quality-of-Life are being integrated at blinding speeds; precautions must be taken to view them head-on. Once secure, we can dive into what’s shaping up to be one of the final development snapshots before 4.4-beta builds roll out!
Keep in mind that while we try to make sure each dev snapshot is stable enough for general testing, this is by
definition a pre-release piece of software. Be sure to make frequent backups, or use a version control system such as
Git, to preserve your projects in 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, XR editor, or the Android editor for this release (join the Android editor testing group to get access to pre-release builds).
The cover illustration is from Malware, an installation simulator where players must navigate a minefield of circa-1999 malware! It is developed by Odd Games. You can purchase the game on Steam.
Highlights
In case you missed them, see the 4.4 dev 1, 4.4 dev 2,
4.4 dev 3, 4.4 dev 4, and 4.4 dev 5 release notes for an overview of
some key features which were already in those snapshots, and are therefore still available for testing in dev 6.
Here are highlights of a few new features in dev 6 that you might find particularly exciting!
Camera3D preview in inspector
Previously, adjusting the view of a Camera3D
in a scene could be a chore to handle. It required activating the camera you wanted to preview, and then reverting it back if it wasn’t the main camera. You could pin a preview of a camera in a dedicated viewport, but that meant reducing the real-estate of your main viewport.
Now, with Haoyu Qiu’s feature (GH-90778), every selected 3D camera shows a preview inside the inspector. No switching cameras needed to preview anymore.
CollisionShape3D debug color customization
3D collision shapes now have parity with their 2D counterparts with the newly added debug_color
and debug_fill
properties, which lets you customize the appearance of debug collision shapes in the editor, or at runtime if “Visible Collision Shapes” is enabled in the Debug menu. Thanks to first-time contributor BattyBovine for implementing this much-requested proposal (GH-90644).
Replace internal CSG implementation with Manifold library
Godot added support for CSG, or Constructive Solid Geometry, back in 3.1. This is a great tool for rapidly prototyping level geometry or even simple props and characters by combining 3D primitives with various boolean operations (union, intersection, subtraction).
Our implementation suffered from a number of bugs and stability issues, with no dedicated maintainer to tackle them. Thankfully, a great open source library has been released since then which can be used as a well-maintained replacement for our CSG internals: Emmett Lalish’s Manifold.
Ernest Lee did an amazing work implementing Manifold in Godot, with help from Emmett to ensure that the library fits our requirements (GH-94321). As this is a fairly big change to how Godot’s CSG works internally (but with minimal impact on the user API), you might notice differences in your projects using CSG. Please report any change that appears to have a negative impact on your usage.
Runtime WAV file loading
First-time contributor cherry implemented the long-requested support for runtime loading of WAV files (GH-93831). This adds parity with OGG Vorbis audio tracks, and will be a welcome addition for users who want to load user-generated content at runtime (including non-game audio applications).
Extend Curve to allow for domains outside of [0, 1]
Have you ever wished that you could edit a Curve
in a domain that goes beyond the normalized [0, 1]
range? ocean finally got their implementation of this feature merged (GH-67857), which should give you greater flexibility in how to map your functions and data to Godot’s ubiquitous Curve resource.
Temporary file and directory utilities
Tool creators, Adam Scott cooked a little something that could be interesting for you. A brand new API lets you create and dispose of temporary files. Handy if you need to write content on disk, but without worrying about polluting user data. These temporary files and directories even dispose of themselves after use by default. For more information, see (GH-98397).
And more!
There are too many exciting changes to list them all here, but here’s a curated selection:
- 2D: Change how multi selection scale is applied to canvas item (GH-99506).
- 2D: Ensure primitive meshes are created before connected to changed signal (GH-99740).
- 3D: Add ShadowCastingSetting to MeshLibrary / GridMap items (GH-85443).
- 3D: Add CollisionShape3D custom debug colors (GH-90644).
- 3D: Add Camera3D preview in Inspector (GH-90778).
- 3D: Allow tool scripts to alter transform of Node3DEditorViewport camera (GH-93503).
- 3D: Fix mesh corruption of CSG by using elalish/manifold (GH-94321).
- 3D: Adjust VoxelGI gizmo opacity (GH-99969).
- Animation: Add persistent folding to Animation Library Editor (GH-86481).
- Animation: Fix crash when re-importing model with AnimationPlayer panel open and node selected (GH-95795).
- Animation: Add RetargetModifier3D for realtime retarget to keep original rest (GH-97824).
- Animation: Prioritize proximity to green arrow when selecting overlapping transitions in AnimationNodeStateMachine (GH-98401).
- Audio: Add runtime file loading to
AudioStreamWAV
(GH-93831). - Audio: Fix AudioStreamPlayer2D/3D’s
get_playback_position
returning 0
right after calling seek
(GH-99759). - C#: Preserve no-hint behavior for unmarshallable generics in dictionaries (GH-99485).
- Core: RegEx: Fix handling of unset/unknown capture groups (GH-73973).
- Core: FileAccess: Return error codes from
store_*
methods (GH-78289). - Core: Avoid duplicating signals from scene instances into packed scenes (GH-97303).
- Core: Make loading translations from threads safe (GH-99527).
- Core: Do not generate
*.uid
files for JSON, certificates, and translations (GH-99540). - Core: Convert line breaks to
\n
and strip line break from the end of string returned by OS::read_string_from_stdin
/OS::get_stdin_string
(GH-99542). - Core: Fix
OS::has_feature()
skipping custom features (GH-99864). - Core: Add temp utilities (alias
OS::get_temp_dir()
, FileAccess::create_temp()
, and DirAccess::create_temp()
) (GH-98397). - Editor: Extend Curve to allow for domains outside of
[0, 1]
(GH-67857). - Editor: Implement zooming and panning in the profiler (GH-76055).
- Editor: Fix jumping to editor help does not scroll correctly sometimes (GH-96449).
- Editor: Show file names in remove files confirmation dialog (GH-98539).
- Editor: Add editor setting to stop the bottom panel from switching to the Stack Trace (GH-98657).
- Editor: Don’t tint editor bottom panel icons when hovered or pressed (GH-98765).
- Editor: Add copy button to toast notification (GH-98778).
- Editor: Enable editing of controls inside viewports in editor (GH-99401).
- Editor: Improve appearance of external links in built-in docs (GH-99480).
- Editor: Make the alt selection menu available for all modes (GH-99795).
- Export: Ensure excluded GDExtension files are not included in
extension_list.cfg
(GH-97216). - Export: Write text server data from memory, instead of using temporary file (GH-99164).
- GDExtension: Register Engine, OS, ProjectSettings, and Time singletons in time for
INITIZATION_LEVEL_CORE
(GH-98862). - GDExtension: Support extension icons in ScriptCreateDialog (GH-98914).
- GDScript: Fix crash when division by zero/modulo by zero happen on vectors (GH-95172).
- GDScript: Improve GDScript autocompletion for methods (GH-99102).
- GDScript: LSP: Fix spec violations that break the VSCode outline (GH-99295).
- GDScript: Core: Fix built-in enum constant bindings (GH-99424).
- GDScript: Support tracking multiple analyzer and runtime errors in tests (GH-99490).
- GUI: Add a Viewport method to get automatically computed 2D stretch transform (GH-80965).
- GUI: Make
FileDialog
filtering case insensitive (GH-85789). - GUI: Make TextEdit autocompletion replace word unless Shift is held (GH-90723).
- GUI: Reshape and update button on oversampling change (GH-95511).
- GUI: Prevent infinite recursion in first
_draw
(GH-97328). - GUI: Add theme type variations for secondary Trees and ItemLists (GH-97884).
- GUI: RTL: Add support for vertical alignment (GH-97963).
- GUI: Introduce a
SubViewportContainer
config for drag-and-drop target locations (GH-99270, GH-99691). - GUI: Fix SVG font rendering (GH-99459).
- GUI: Add tooltip support to meta/url tag (GH-99481).
- Import: Generate thumbnails on imported scenes (GH-96544).
- Import: Blend file import: Don’t keep original files when not unpacking them (GH-96782).
- Import: Betsy: Add BC3 and BC5 support (GH-99537).
- Multiplayer: Fix UID support in MultiplayerSpawner (GH-99712).
- Navigation: Improve
NavMeshQueries3D::polygons_get_closest_point_info
performance (GH-97928). - Navigation: Make NavMap objects request sync only on demand (GH-99646).
- Network: Add half precision floating point support to
StreamPeer
and FileAccess
(GH-97716). - Network: Allow disabling UPNP implementation on the Web (GH-99597).
- Physics: Fix
GodotSpace3D::test_body_motion()
not setting local_shape
(GH-99901). - Porting: Android: Fix immersive mode issue (GH-98917).
- Porting: macOS: Change the shortcut for Align Transform with View (GH-94026).
- Porting: Unix: Don’t create world-writable files when safe save is enabled (GH-96399).
- Porting: Windows: Fix restoring fullscreen window (GH-98631).
- Porting: Windows: Fix Inspector tooltips blinking on Windows (GH-99988).
- Porting: Windows: Improve frame pacing by busy waiting as needed (GH-99833).
- Porting: Implement
DisplayServer.beep
(GH-99371). - Rendering: Optimize
RenderForwardClustered::_setup_render_pass_uniform_set
by reducing Vector allocations (GH-94368). - Rendering: Deprecate the pointless unsafe threading model for rendering (GH-98383).
- Rendering: Automatically resolve initial and final action for draw lists (GH-98670).
- Rendering: Fix occlusion culling for double builds by enforcing float conversion for Embree (GH-98770).
- Rendering: Mask out shadows on CanvasItems that don’t have a matching
item_shadow_mask
(GH-98835). - Rendering: Add lightmap bake cancelling (GH-99483).
- Rendering: Add VoxelGI bake cancelling and progress UI improvement (GH-99562).
- Rendering: Fix ReflectionProbe AABB (GH-99802).
- Shaders: Allow
SCREEN_UV
to be used in light function of spatial shader (GH-94981). - Shaders: VisualShader: Add LinearToSRGB and SRGBToLinear to ColorFunc node (GH-97388).
Changelog
114 contributors submitted 259 improvements for this new snapshot. See our interactive changelog for the complete list of changes since the previous 4.4-dev5 snapshot.
This release is built from commit 1f47e4c4e
.
Downloads
Standard build includes support for GDScript and GDExtension.
.NET build (marked as mono
) includes support for C#, as well as GDScript and GDExtension.
While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition a pre-release piece of software. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss.
Known issues
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.
Here are some known regressions introduced in this snapshot:
- Occlusion culling randomly occluding things completely in the open (GH-10032).
- A pull request is already open to fix this in the next dev snapshot (GH-100060).
- Error “Manifold creation from mesh failed” with Plane and Quad shapes, which do not get rendered (GH-100014).
- Planes and Quads cannot be used with CSG, and just seemed to be usable previously. We’ll improve the usability so they cannot be selected for CSGMesh3D. Instead, use MeshInstance3D to place Planes and Quads.
Bug reports
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.x releases, but no longer works in this snapshot).
Support
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.