Dev snapshot: Godot 4.5 dev 3

If the past snapshot was any indication, you might think that development updates aren’t slowing down anytime soon. And… You’d be right! Indeed, progress has been booming, and the amount of new features added even compared to the previous release is staggering; curating this selection was especially difficult. As always, new features mean new bugs in need of fixing, so we encourage everyone interested to get feedback and bug reports in as early as possible.

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 cover illustration is from Cornerpond, a fishing game that takes place entirely in the corner of your desktop. It is developed by foolsroom. You can get the game on Steam and follow the developer on Twitter.

Highlights

In case you missed them, see the 4.5 dev 1 and 4.5 dev 2 release notes for an overview of some key features which were already in that snapshot, and are therefore still available for testing in dev 3.

Screen reader support

Accessibility should be every developer’s top priority, full-stop. Someone being excluded from an experience for factors outside of their control is an area that video games and applications have the potential to circumvent entirely. It does, however, take a solid framework to allow such accommodations to be developed. To streamline this process for everyone—players and developers alike—our resident tech guru bruvzg took to the absolutely Herculean task of integrating AccessKit to Godot as a whole.

GH-76829 was a project started two years ago, which progressed in bursts alongside the AccessKit framework. For the 4.5 release, we made it a priority to finalize, and thus we now merged this major feature with over 32,000 lines of code, after hundreds of comments with feedback/testing. Users are encouraged to look at the pull request for more information, as there’s no feasible way we could properly summarize these changes. Unsurprisingly, this was by far the change with the most ramifications of the entire snapshot, so much so that it’s already seen multiple fixes to address regressions (even one right when validating this snapshot), but it’s well worth it. After all, accessibility is our top priority!

This is only the first but massive step towards making Godot more accessible. In particular for the editor, a lot more work will be needed to make it really usable, as well as integrate with accessibility frameworks for mobile or web platforms.

Script backtracing

In any other snapshot, this would’ve been the main highlight, as adding backtracing to GDScript was among the most highly requested features from our users for years. Two brave souls, Mikael Hermansson (godot-jolt) and Juan Linietsky (up-and-coming developer), helmed this task and made this process possible with GH-91006. This will make it much easier for users to find the cause of warnings/errors that previously required manually hunting down bugs. Stack traces are now available in projects exported in release mode as well if the Debug > Settings > GDScript > Always Track Call Stacks project setting is enabled. This can make it easier for users to report issues in a way that developers can track down.

Backtrace script
Backtrace out

Inspector section toggles

Another long-awaited feature, inspector section toggles, is now a part of the engine as of GH-105272. lodetrick has expanded editor functionality to what you see below: sections with their own dedicated checkbox to denote if they’re enabled.

Inspector checkboxes

And more!

There are too many exciting changes to list them all here, but here’s a curated selection:

  • 3D: Set correct position of node with Align Transform with View in orthographic view (GH-99099).
  • Audio: Fix AudioStreamPlayer3D stereo panning issue (GH-104853).
  • Buildsystem: Fix .sln project generation logic for Rider to support all OS and all C++ toolchains (GH-103405).
  • Buildsystem: Update the Android NDK to the latest LTS version (r27c) (GH-105611).
  • C#: Avoid unnecessary StringName allocations on not implemented virtual _Get and _Set method call (GH-104689).
  • Core: Add create_id_for_path() to ResourceUID (GH-99543).
  • Core: Add negative index to Array.remove_at and Array.insert (GH-83027).
  • Core: Add thread safety to Object signals (GH-105453).
  • Editor: Autocompletion: Don’t add parenthesis if Callable is expected (GH-96375).
  • Editor: Fix exported Node/Resource variables resetting when extending script in the SceneTreeDock (GH-105148).
  • Editor: Project manager: Add option to backup project when it will be changed (GH-104624).
  • Editor: Support custom features in project settings dialog (GH-105307).
  • Export: Use project settings overrides with the target preset features instead of current platform features (GH-71542).
  • GDExtension: Optimize gdvirtual function layout (GH-104264).
  • GUI: Add FoldableContainer (GH-102346).
  • GUI: Add boolean toggle for middle-click to fire tab_close_pressed signal (GH-103024).
  • GUI: Add separate minimize_disabled and maximize_disabled window flags (GH-105107).
  • GUI: Add support for OEM Alt codes input (GH-93466).
  • GUI: Implement SVGTexture auto-scalable with font oversampling (GH-105375).
  • GUI: Make embed floating window respect Always On Top configuration (GH-103731).
  • GUI: Replace global oversampling with overrideable per-viewport oversampling (GH-104872).
  • Input: Add configuration option to disable Scroll Deadzone on Android (GH-96139).
  • Input: Allow all tool modes to select (GH-87756).
  • Plugin: Add maven publishing configuration for Godot tools (GH-104819).
  • Porting: Android: Add new actions and enhancements to TouchActionsPanel (GH-105140).
  • Porting: Android: Embed TouchActionsPanel directly into the editor UI (GH-105518).
  • Rendering: Detect more pipeline settings at load time to avoid pipeline stutters (GH-105175).
  • Rendering: Renderer: Reduce scope of mutex locks to prevent common deadlocks (GH-105138).
  • XR: OpenXR: Request the XR_KHR_loader_init extension (GH-105445).

Changelog

115 contributors submitted 253 fixes for this release. See our interactive changelog for the complete list of changes since the previous 4.5-dev2 snapshot.

This release is built from commit 28089c40c.

Downloads

Godot is downloading…

Godot exists thanks to donations from people like you. Help us continue our work:


Make a Donation

Close this popup

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

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.

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 and 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.

Donate now

Castle Game Engine: Modern Pascal course examples and slides, updates to modern Pascal book to fully support both Delphi and FPC

Last week I made a course teaching modern Pascal, organized by BSC (Embarcadero branch in Poland). We started from basics (structural and imperative programming, classes) and went on to advanced things (TComponent, various ways to deal with memory management, class references, generics, and more). It total, it was 2 days * 6 hours. Mostly lectures, …

Castle Game Engine: Dice Throwing Demo, Recording Physics Simulation

We’ve a made a new demo project using Castle Game Engine: Throw a 6-sided dice, using physics, and cheat to make the outcome predictable. Before throwing the dice, you select the desired outcome, and we guarantee the dice will land the desired face “up”. Full source code and data are available at https://github.com/castle-engine/castle-dice-throwing. You can …

Dev snapshot: Godot 4.5 dev 2

With the 4.4 release a little over a month ago, one might’ve expected content updates to trickle out slowly for our initial 4.5 development snapshots. …Well, maybe not after seeing the 4.5 dev 1 snapshot, but surely they couldn’t follow that up with another flood of anticipated changes, right?

You fools. You underestimate the passion of our community yet again, as 250 improvements are ready to roll for this snapshot. What’s more is that, unlike last time, we’re not just in bugfix territory any more. Now the time for proper enhancements and features entirely unique to this development cycle has come, and this blogpost will aim to highlight them to the best of our ability. As always: with new features comes new bugs (probably), so the sooner we can get feedback and bug reports in, the better.

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 cover illustration is from Fortune Avenue, a capitalism simulator where you shrewdly extort and outmaneuver your friends in a chaotic, board-game environment. It is developed by Binogure Studio. You can wishlist the game on Steam and follow the developers on Bluesky.

Highlights

In case you missed them, see the 4.5 dev 1 release notes for an overview of some key features which were already in that snapshot, and are therefore still available for testing in dev 2.

Dedicated 2D navigation server

For the longest time, the navigation server was a unified beast. 3D and 2D, Yin and Yang, two sides of the same coin. While beautiful on a philosophical level and undoubtedly a heart-wrenching screenplay waiting to happen, it was a pretty sour deal for the 2D side of things. Previously, if you were making a 2D game and wanted to make use of navigational features, you were effectively locked into a bunch of 3D settings and features that would never see any use but would absolutely see a bump in output size.

Steps have been taken during this initial 4.5 period to ensure that navigation logic is more cleanly divided and organized, spearheaded by our navigation guru smix8, but none of this could’ve been possible without cleanly splitting the navigation server in twain. Longtime contributor AThousandShips took the mantle on this project, and she successfully accomplished this goal with GH-101504. From now on, users will be able to selectively enable/disable the navigation modules for 2D and/or 3D, instead of being forced into an all-or-nothing ultimatum.

Reorganized shader editor UI

The editor experience for shaders and visual shaders got some TLC in GH-100287. Helmed by Yuri Rubinsky, this PR provides several requested features and QOL updates to our shading friends. Below is a preview image taken directly from the PR in question, where you’ll find more information on what to expect when you get your hands on it this snapshot.

Updated shader editor UI

Changing editor language without restart

Godot has built-in support for handling multiple languages, both for the games you create and the editor itself. However, in contrast to games built with the engine, it wasn’t possible to change the current language on-the-fly within the editor itself. Our editor expert Tomasz Chabora addressed this issue in GH-102562, ensuring that users can swap to their preferred language within the same editor session! While this is somewhat niche in practice, our stance on convenience and accessibility is one that we take very seriously, and a seamless/streamlined editor experience is exactly the sort of thing we want as many users as possible to enjoy.

Fragment density map support

When rendering for VR headsets, the pixels around the outside of the viewport are less important, because they will be somewhat distorted by the lens, and players will tend to turn their head rather than move their eyes too far from the center.

Godot already supports using the Vulkan “Fragment Shading Rate” extension to render the outside of the viewport at a lower resolution, leading to performance improvements with little noticeable decrease in quality. However, on standalone VR headsets (like the Meta Quest), this extension either isn’t supported, or doesn’t provide as big performance improvements as the Vulkan “Fragment Density Map” extension.

In GH-99551, rendering expert DarioSamo has implemented support for the “Fragment Density Map” extension, making the Vulkan Mobile renderer more viable for VR on standalone headsets.

Wayland: Native sub-window support

Thanks to the tireless efforts of Riteo, the X11 alternative Wayland has been given first-class treatment on Godot. It’s been a long road to stand as an equal to such a dominant display server protocol, but it’s getting closer with every passing PR; though some have been hesitant to make the change for one reason: lack of native sub-windows. Taking on this hurdle for parity was no small feat, but it was a requirement for supporting embedded game windows on Wayland, so (GH-101774) made it happen all the same:

Multi-Window output on Wayland

And more!

There are too many exciting changes to list them all here, but here’s a curated selection:

  • 2D: Optimize usability of VisibleOnScreenNotifier2D (GH-100874).
  • 3D: Allow customizing debug color of Path3D (GH-82321).
  • Animation: Add delta argument to _process_modification() as _process_modification_with_delta(delta) and expose advance() at Skeleton3D (GH-103639).
  • Animation: Add selection box movement/scaling to the animation bezier editor (GH-100470).
  • Core: Optimize Object::cast_to by assuming no virtual and multiple inheritance, gaining 7x throughput over dynamic_cast (GH-103708).
  • Editor: Add UID to file tooltip (GH-105069).
  • Editor: Improve default/no query quick open dialog behavior (GH-104061).
  • Editor: Remove New prefix from EditorResourcePicker (GH-104604).
  • Export: Updates and fixes to the Android prebuilt export logic (GH-103173).
  • GDScript: Return early when parsing invalid super call (GH-104509).
  • GUI: Improve Popup content_scale_factor (GH-104399).
  • GUI: Optimize startup times by using ubrk_clone instead of ubrk_open (GH-104455).
  • GUI: Scroll EditorInspector while drag & drop hovering near the edges (GH-103943).
  • Import: Load decompressable texture format if no supported one is found (GH-104590).
  • Navigation: Allow compiling templates without navigation features (GH-104811).
  • Physics: Allow compiling templates without physics servers (GH-103373).
  • Physics: Jolt: Update to 5.3.0 (GH-104449).
  • Porting: Android: Add an editor setting to enable/disable TouchActionsPanel (GH-105015).
  • Porting: Android: Add support for Mute Game toggle (GH-104409).
  • Porting: Android: Auto create nomedia file to hide project files in media apps (GH-104970).
  • Porting: Linux: Detect KDE/LXQt and swap OK/Cancel buttons to Windows style (GH-104959).
  • Porting: macOS: Replace custom main loop with [NSApp run] and CFRunLoop observer (GH-104397).
  • Porting: macOS: Support more controllers on macOS 11+ (GH-104619).
  • Rendering: Avoid using a global variable to store instance index in canvas items shader in RD renderer (GH-105037).
  • XR: Deactivate the CameraServer by default (GH-104232).
  • XR: OpenXR: Clean-up OpenXRExtensionWrapper by removing multiple inheritance and deprecating OpenXRExtensionWrapperExtension (GH-104087).

Changelog

90 contributors submitted 250 fixes for this release. See our interactive changelog for the complete list of changes since the previous 4.5-dev1 snapshot.

This release is built from commit af2c71397.

Downloads

Godot is downloading…

Godot exists thanks to donations from people like you. Help us continue our work:


Make a Donation

Close this popup

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

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.

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 and 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.

Donate now

Castle Game Engine: Collaborative online editing of 3D world using Castle Game Engine and mORMot2

We’re happy to announce a new demo project, showcasing our Castle Game Engine and mORMot 2 working together! mORMot (1 and 2) is an open-source Pascal framework (just like our engine!) providing networking and database solutions, at a few layers. You can use it for ORM (easily synchronize and persist objects), classic client-server (HTTP REST …

Maintenance release: Godot 4.4.1

We released Godot 4.4 in early March and we are delighted to see the reception, with so many users upgrading to it on day one and sharing their favorite new changes on social media! If you haven’t seen the 4.4 release page, it’s well worth a read!

Since then, we’ve started the development phase for Godot 4.5 at full speed (with a first dev snapshot released last week!), but we also put our main focus on fixing remaining and newly reported regressions that affect users who upgraded to 4.4. A few of these issues can be showstoppers for affected users, so we decided to release a 4.4.1 maintenance release as soon as possible.

See below for a list of the most relevant changes. This release includes fixes to security vulnerabilities in the mbedTLS third-party library, so we strongly recommend updating for any game using networking functionality.

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 case of corruption or data loss.

Please, consider supporting the project financially, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.

Download Godot 4.4.1 now or try the online version of the Godot editor.

Godot is downloading…

Godot exists thanks to donations from people like you. Help us continue our work:


Make a Donation

Close this popup

The illustration picture for this article comes from Psycho Patrol R, a FPS/mecha hybrid europolice sim, which was recently released in Early Access on Steam. It is developed by Consumer Softproducts, known for their previous Godot hit Cruelty Squad.

Changes

58 contributors submitted around 125 fixes for this release. See our interactive changelog for the complete list of changes since the 4.4 release.

Below are some of the most notable changes (with critical fixes highlighted in bold):

  • 3D: Fix RemoteTransform3D to always use global rotation if use_global_coordinates is true (GH-97498).
  • Animation: Fix console errors and crash in cleanup code for PhysicalBoneSimulator3D (GH-103921).
  • Animation: Fix missing process_state error in blend spaces (GH-104018).
  • Animation: Fix rest translation space in LookAtModifier3D (GH-104217).
  • Audio: Set interactive music streams as meta streams (GH-104054).
  • Audio: Fix AudioEffectPitchShift issues when pitch_scale is set to 1 (GH-104090).
  • Buildsystem: Android: Fix build with disable_3d (GH-103523).
  • C#: Use ObjectID when converting Variant to GodotObject (GH-98034).
  • C#: Skip re-saving .csproj when TFM is unchanged (GH-103714).
  • Core: Use single RNG instance for FileAccessEncrypted IV generation (GH-103415).
  • Core: Fix Invalid Task ID errors in ResourceLoader (GH-104060).
  • Editor: Fix copying a Node with a signal potentially resulting in an editor crash (GH-96372).
  • Editor: Make EditorProperty and its child EditorProperty behave like sibling nodes when handling mouse events (GH-103316).
  • Editor: Fix TextEdit scrolls wrong on text selection (GH-103410).
  • Editor: Update script modified times when saved in EditorNode (GH-103695).
  • Editor: Fix ownership when pasting non root with child nodes in new scene (GH-103769).
  • Editor: Create .uid files for detected new files (GH-104248).
  • Editor: Fix editor crash when inspecting 2 objects handled by the same plugin (GH-104296).
  • Editor: Change root node transform warning to only show up for position (GH-104331).
  • Export: iOS: Restore one-click deploy device enumeration using Xcode (GH-103590).
  • Export: Android: Convert compress_native_libraries to a basic export option (GH-104301).
  • GDExtension: Correctly register editor-only OpenXR* classes’ api_type (GH-103869).
  • GDScript: Fix head class range to include class_name (GH-104114).
  • GDScript: Add clearing of static_gdscript_cache to GDScriptCache (GH-104281).
  • GUI: Fix Tree keyboard navigation in RTL direction (GH-102865).
  • GUI: Fix changed signal emission in Curve::set_point_offset (GH-96296).
  • GUI: Fix spinbox decimal issues when update_on_text_changed = true (GH-100684).
  • GUI: Fix error when embedded popup is closed while resizing (GH-102504).
  • GUI: VideoStreamPlayer: Stop video on exit tree (GH-103396).
  • GUI: Use Viewport’s default texture filter/repeat in GUI tooltips (GH-103636).
  • GUI: Label: Fix min. size calculation counting extra spacing twice (GH-103728).
  • Import: Fix headless import always emits errors (GH-103403).
  • Import: BasisUniversal: Ensure ASTC’s HDR variant is supported when transcoding (GH-103766).
  • Import: ResourceLoader: Do not wait for the main thread during initial reimport (GH-104013).
  • Import: Force multiple of 4 sizes for Betsy compressor (GH-104275).
  • Import: Fix crash when reimporting nested gltf scenes (GH-104384).
  • Input: Fix Android mouse capture issues (GH-103413).
  • Input: macOS/iOS: Ensure only one axis change event is produced during single process_joypads() call (GH-104314).
  • Navigation: Make NavigationLink3D properly update on visibility change (GH-103588).
  • Particles: Fix particle jitter when scene tree is paused (GH-95912).
  • Particles: Fix GPU particles not emitting at some configured rates when scale curve is zero (GH-103121).
  • Physics: Fix interpolation in XR (GH-103233).
  • Physics: Fix broken negative scaling when using Jolt Physics (GH-103440).
  • Physics: Fix ConcavePolygonShape3D always enabling backface_collision when using Jolt Physics (GH-104310).
  • Physics: Fix shape always being zero with get_rest_info when using Jolt Physics (GH-104599).
  • Plugin: JavaClassWrapper: Improve handling of typed array arguments (GH-102817).
  • Plugin: JavaClassWrapper: Fix converting returned arrays to Godot types (GH-103375).
  • Plugin: JavaClassWrapper: Fix conversion to/from org.godotengine.godot.Dictionary that regressed (GH-103733, GH-104156).
  • Porting: Linux: X11: Fix check for is_maximized to require both horizontal and vertical (GH-103526).
  • Porting: Linux: Offload RenderingDevice creation test to subprocess (GH-103560).
  • Porting: macOS: Swap Nintendo face buttons (GH-103661).
  • Porting: macOS: Update mouse-entered state when subwindow closes (GH-104328).
  • Porting: Windows: Fix get_modified_time on locked files (GH-103622).
  • Porting: Windows: Use more efficient sleep approach when low-processor mode is enabled (GH-103773).
  • Rendering: Add ASTC HDR format variants (GH-102777).
  • Rendering: Fix voxelizer normals (GH-102893).
  • Rendering: Fix 2D quad primitive missing lighting data in GLES3 renderer (GH-102908).
  • Rendering: Fix uninitialized value in Tonemap (GH-103092).
  • Rendering: Use separate WorkThreadPool for shader compiler (GH-103506).
  • Rendering: Fix incorrect parameters passed to VMA (GH-103730).
  • Rendering: MetalFX: Change fallback behavior (GH-103792).
  • Rendering: Fix GLES3 gaussian_blur mipmap setup (GH-103878).
  • Rendering: CPUParticles2D: Fix physics interpolation after entering tree with emitting = false (GH-103966).
  • Rendering: Vulkan: Disable layers in editor deemed buggy by RenderDoc (GH-104154).
  • Rendering: Fix Metal handling of cube textures; assert equal dimensions (GH-104341).
  • Rendering: Disable broken Vulkan layers before running RenderingDevice tests (GH-104572).
  • Shaders: Fix 2D instance params crashing using outside of main() (GH-103348).
  • Shaders: 2D: Fix light shader accessing TEXTURE_PIXEL_SIZE (GH-103617).
  • Thirdparty: Theora: Fix YUV422/444 to RGB conversion (GH-102859).
  • Thirdparty: Update to latest version of Swappy (GH-103409).
  • Thirdparty: mbedTLS: Update to version 3.6.3 (security fix) (GH-104562).
  • XR: Correct occlusion culling viewport location calculation when projection uses asymmetric FOV (GH-104249).

Known incompatibilities

As of now, there are no known incompatibilities with the previous Godot 4.4 release. We encourage all users to upgrade to 4.4.1.

If you experience any unexpected behavior change in your projects after upgrading to 4.4.1, please file an issue on GitHub.

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 and 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.

Donate now