The first development snapshot for 4.7 has arrived! With it, several quality PRs are free from the backlog at last, be it because they were locked out from the 4.6 feature freeze or were simply deemed too risky for the stable release. The majority of the latter cases were already highlighted earlier this week in our 4.6.1 RC 1 snapshot, so this article will be focused on the former: new features and quality-of-life goodies.
As usual, safety precautions should be taken with any pre-release environment. While we prepare these snapshots with the intent to be suitable for general testing, there will always be a non-zero risk of data loss/corruption. Creating backups before hand and/or utilizing version control are strongly recommended!
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.
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, the XR 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 TR-49, a story-rich puzzle game set in an alternate history, where you’re tasked solving a mystery by navigating the archives of a long-abandoned World War II computer. You can buy the game on Steam or the iOS App Store, and follow the developers on Bluesky or Discord.
Highlights
Input: VirtualJoystick
Joypad controls for mobile games have been historically awkward to integrate. While community-based tools do exist to mitigate this problem, this still involves developers jumping through significantly more hoops than other input devices. Kazox61 has come to the rescue with GH-110933, offering a built-in solution for handling joysticks inputs virtually with VirtualJoystick.
JOYSTICK_FIXED: The joystick doesn’t move.
JOYSTICK_DYNAMIC: The joystick is moved to the initial touch position as long as it’s within the joystick’s bounds. It moves back to its original position when released.
JOYSTICK_FOLLOWING: The joystick is moved to the initial touch position as long as it’s within the joystick’s bounds. It will follow the touch input if it goes outside the joystick’s range. It moves back to its original position when released.
Rendering: DrawableTexture
One very widely-requested feature across Godot’s entire lifetime has been the ability to easily draw on a texture. While this can be somewhat achieved by using Viewport, it remained quite limited and wasn’t suited for more complex tasks. Conversely, RenderingDevice is an answer for those not afraid to get their hands dirty with the guts of the engine, but that leaves the average user in the dust and is hardly a convenient solution even for those that know what they’re doing. Colin O’Rourke delivered a solution in the form of DrawableTexture: a simple API layer to abstract away all the technical noise and give users of all skill levels a convenient way to “do the thing”. (GH-105701).
3D: Enable Path3D collider snapping
Gustavo Jaruga Cruz has given the 3D editor some love in the form of Path3D collider snapping (GH-102085). Now when creating and editing paths, you have the option of snapping those paths to whatever collider the mouse is hovering over, rather than simply dropping a point in space arbitrarily. As demonstrated in the below clip, this behavior is toggleable on the Path3D options menu.
GDScript: Improve display non-exported members in Remote Tree Inspector
If you’ve ever tried to wrangle with non-exported enums in a remote play session, you’re already aware of how annoying it to have those values revert to simple integers. Danil Alexeev has brought us a solution via GH-115705, ensuring that metadata is retained for variables regardless of their export status.
| Before | After |
|---|---|
![]() | ![]() |
Rendering: Vulkan raytracing plumbing
While Vulkan has had an API available for a few years now to support raytracing, actually implementing that API is much easier said than done. Rendering is already one of the most complex parts of the engine, and adding raytracing on top of that increases that complexity exponentially. With that in mind, it cannot be overstated just how impressive it is that Antonio Caggiano has provided us with the groundwork necessary to make that a reality (GH-99119). He’s graciously provided a demo project to showcase this new functionality via GDScript.
Windows: Support HDR output
Those that followed our 4.6 blog posts might remember a section that touched on the future implementation of HDR to the engine. The future is now, as one of our goals for 4.7 is making HDR output possible on all supported platforms. Documentation and implementation is still in the early stages, so we won’t have much to touch on this blog post. However, we can offer a small preview, as Josh Jones, Alvin Wong, and Allen Pestaluky have begun this long-term goal with an implementation on Windows (GH-94496).
And more!
There are too many exciting changes to list them all here, but here’s a curated selection:
- Core: PCKPacker: Add method to add files from buffer (GH-108830).
- Editor: Add a script editor keyboard shortcut to show the documentation tooltip for the word the caret is on (GH-115767).
- Editor: Improve appearance of built-in help (GH-107597).
- Editor: Optimize tree size computation and the scene tree dock filter (GH-110759).
- Editor: Support navigating to the script in list (GH-112796).
- Editor: Take custom type of parent scripts into account when dropping onready variables (GH-115158).
- GUI: Add accessibility region role for landmark navigation (GH-114449).
- GUI: Add conic gradient to GradientTexture2D (GH-115394).
- Input: Add support for joypad motion sensors (GH-111679).
- Physics: Add one-way collision direction for CollisionShape2Ds (GH-104736).
- Platforms: Add device orientation change signal to DisplayServer (GH-115434).
- Platforms: Android: Enable native file picker support on all devices (GH-115257).
- Rendering: Clearcoat improvements and fixes (GH-111464).
- Rendering: Give every pass its own unique environment uniform buffer (GH-115177).
- Rendering: Metal: Refactor; fix dynamic uniforms; acyclic render graph support (GH-114484).
- Rendering: Vulkan: Update all components to Vulkan SDK 1.4.335.0 (GH-114075).
Changelog
127 contributors submitted 311 fixes for this release. See our interactive changelog for the complete list of changes since the 4.6 feature release.
This release is built from commit bf95b6258.
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
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.
- macOS builds are not signed this release; this will be resolved by the time 4.7-dev2 comes out.
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 platform managed by Godot Foundation. There are also several alternative ways to donate which you may find more suitable.


