Godot 4.4 RELEASE

A unified experience

Look forward to plenty of quality of life improvements hidden within this release. Faster load speeds, reduced stutter, streamlined processes — spotting all the optimizations that have been applied in the background will take some time.

On top of that, long-awaited comfort features like embedded game windows and interactive in-game editing will feel more in line with other software on the market, making transitioning between them an even smoother experience. The editor overhaul alone takes up a big chunk of this release, after all.

Before you update

Before transitioning your existing projects to Godot 4.4, carefully read through our migration guide to learn about breaking changes.

Download and experience Godot 4.4 for yourself
Godot Engine
4.4

APK download · arm64 · arm32 · x86_64 · x86_32 · 3 March 2025

Godot Engine
4.4

x86_64 · 3 March 2025

Godot Engine - .NET
4.4

x86_64 · C# support · 3 March 2025

Godot Engine
4.4

arm64 (Apple Silicon) · x86_64 (Intel) · 3 March 2025

Godot Engine - .NET
4.4

arm64 (Apple Silicon) · x86_64 (Intel) · C# support · 3 March 2025

Godot Engine
4.4

x86_64 · 3 March 2025

Godot Engine - .NET
4.4

x86_64 · C# support · 3 March 2025

Made possible by your donations

Jolt Physics

Jolt into action

The Jolt extension has been used as the de facto physics engine by many Godot developers since its inception in late 2022, so it only made sense to integrate it into the engine directly. Jolt Physics itself is actually a standalone open source physics engine and its creator helped immensely with the Godot bindings.

While this PR might be one of the most rigorously tested ones, we are eagerly awaiting your feedback (and GitHub issues) to eventually be able to drop the “experimental” label on this addition. Until then, you have to enable this alternative to Godot Physics in the project settings. Before you do, make sure to check if your interests/use-cases are properly supported in the documentation.

Embedded game window

Window management magic

Godot runs the game as a separate process from the editor for two reasons:

  • avoid having to share resources as much as possible
  • in case of a game crash, keep the editor running (to avoid data loss)

However, this design choice previously prevented embedding the game window into the editor. Which is something that users with limited screenspace, like on single-monitor setups or laptops, are looking for.

Thanks to some window management tricks, it is now possible to embed the game seamlessly and interact with the rest of the editor, while still keeping the processes separate in the background.

Note that this only works on Linux, Windows, and Android for now. Support for macOS will require a different approach for technical reasons.

Interactive in-game editing

Step into your projects

Modifying your game from within the editor while it is running or paused has never been easier. This release lets you click on elements within the scene and move the camera, allowing you to explore your game worlds in ways not possible before.

Android editor support for XR devices

Make games in VR!

Because the Godot Editor itself is a project made with the engine like any other, it can be made available in more unconventional places like the web or on mobile.

With this release, the first steps have been taken to use OpenXR to transfer the existing Android editor into the context of XR headsets.

Currently supported on Meta Quest 3, Quest 3S, and Quest Pro.

Ubershaders to reduce stutter

Uber-exciting!

Ubershaders are at load time pre-compiled versions of each shader with all their features.

These shaders become the fallback whenever a new object is drawn, so that freezing — as we wait for the more specialized shader pipeline in the background to compile — becomes a thing of the past. This technique therefore completely avoids shader stutter!

The improvement from this change will be noticeable in most games without requiring any content changes. In some cases, the ubershaders won’t work however — refer to the workarounds for shader stutter in the official documentation to learn about simple fixes.

We are already in the process of updating our existing shaders to take advantage of this new infrastructure.

Without
With

3D physics interpolation

Do you get the jitters?

With Godot 4.3, we introduced physics interpolation for your 2D projects. In this release, the long-awaited 3D counterpart has been merged as well! Make sure to enable it in your project settings.

By decoupling physics ticks and display frame rates, physics interpolation creates additional frames between the last physics position and the current one. This reduces jitter and creates a smoother appearance, especially on displays with a high refresh rate.

Mobile games in particular benefit from this change, since you can now lower the tick rate without compromising on smoothness.

Without (10 ticks/s)
With (10 ticks/s)

AgX tone mapping

The cool new kid on the block

This tone mapping algorithm has gained a lot of popularity lately. Our friends at Blender even replaced their previous “filmic” tone mapper with AgX.

The Godot implementation resembles theirs closely, but is purposely simplified to be more suitable for real time use cases.

AgX gives a movie-esque quality to renders and is capable of handling very bright scenes better than our other available options.

Typed dictionaries

Keys required

Your requests have been heard!

Typed dictionaries are coming to Godot. This impacts the core engine, GDScript, and all other scripting languages when interfacing with Godot’s Dictionary type.

The Inspector UX has been improved accordingly, to let you assign the right keys and values directly in the editor.

A simple GDScript file showing two typed dictionary declarations: one valid export, and another simple variable declaration that isn't correctly initialized. The parser detects that the dictionary expects `StringName` as keys and `float` as values, but a string was supplied as a value instead.

Optimizations

Harder, Better, Faster, Stronger

Now that the core feature set of Godot 4 feels stable, our contributors have shifted their efforts towards optimizing them across the board.

While many of the linked PRs were finished and tested before the 4.3 release, they did not make the merge deadline, resulting in a big batch for you to enjoy now.

Manifold library replaces CSG implementation

Support for Constructive Solid Geometry (CSG) has been in the engine since Godot 3.1 and is a great tool for rapid prototyping.

Nonetheless, our internal implementation suffered from stability issues and other bugs. This is one of the engine areas that does not have a dedicated maintainer to look after it, so when an open source library with the same functionality was released, we jumped at the opportunity.

Manifold completely replaces the existing implementation, which is a fairly big change in how Godot handles CSG internally, but only minimally impacts the user API. Please check your projects after upgrading and report any negative consequences to us so they can be tackled!

Curve: domains outside of [0,1]

By extending the domain of Curve values beyond the normalized [0, 1] range, we aim to give you greater flexibility in how to map functions and data to this ubiquitous resource.

Picture of the editor inspector showing a `Curve` resource with values outside [0,1].

Temporary file and directory utilities

With this brand new API you can create and dispose of temporary files and directories. In other words: you can write content on a disc without worrying about polluting user data. By default, any file/directory you create this way automatically disposes of itself after use.

Tool developers in particular should have a look at this new feature!

SceneTree system overhaul

A performance boost for everyone

The changes made to how the SceneTree system works, specifically how it processes changes to the nodes, result in an editor performance increase for all projects.

Moving or renaming nodes in complex scenes will be a much faster experience now!

Universal UID support

No more broken paths

Partial Unique Identifier (UID) support – a way to reference resources without relying on human-readable file paths prone to change – has been present in the engine since Godot 4.0, but many file types did not benefit from it yet. Now this fully supported workflow makes Godot more resistant to changes in your filesystem organization, and therefore more suitable to larger projects.

To make upgrading your projects from Godot 4.3 easier, this release also includes a UID upgrade tool to automate the not-so-straightforward process for you.

File manager showing project script files with .uid files existing besides them.

3D object snapping

Snap, you’re it

When placing 3D objects in the editor, they are now able to snap to other surfaces.

This works through a collision detection ray, and makes repositioning objects in a scene easier.

Favorite editor items

Pin your most used properties to the top of the inspector for easy access.

Picture of the editor inspector showing favorited items.

Camera3D preview

Switch up your perspective

Adjusting a Camera3D is now much less of a chore. Enjoy a preview of its capture directly in the inspector, without having to open another viewport or switching back and forth anymore.

GDScript tooltips

Did you know…

Hovering over functions, variables, classes, etc. in the GDScript editor will now greet you with a tooltip pop-up containing further information from the integrated documentation. This includes any notes you have written yourself using the new documentation system.

UIDs will show a human-readable path on hover.

New expression evaluator

REPLace print statements

The new expression evaluator has been added as another tab in the bottom panel of the editor. In there, you can evaluate expressions using the local state directly while stopped at a breakpoint.

Picture of the new expression evaluator in the editor showing expression results.

Shadowmasks for LightmapGI

Both. Both is good.

From now on, you don’t have to choose between fully baked or fully dynamic shadows anymore when using LightmapGI.

By enabling shadowmasks while baking your lightmaps, it is now possible to use static shadows in the distance and dynamic shadows up close. The lower resolutions far away will save precious resources, while the level of detail close to the player is not impacted.

Shortening the range of your dynamic shadows like so provides very important optimization, especially for mobile applications.

Persistent window state

Continue where you left off

This is a quality of life improvement for anyone using big monitors or multi-monitor setups.

The Godot editor now keeps track of its window state: whether it is in fullscreen or windowed mode, which screen it is on, as well as its size and position.

These settings are then automatically restored when you open the program again.

Visual shader goodies

Small but mighty

In this release, the visual shader editor receives some love:

  • material previews and a matching new side dock
  • the ability to drag & drop meshes into the visual shader area to automatically create mesh emitters

Scene startup optimizations

Editor load speed improves once again. Large projects can expect a speed bump of up to 3x!

This benefits both the project startup and any operations that scan the filesystem.

Autostart for all profilers

If you want to capture profiling data while running your game - without missing the first few seconds of loading a scene - you will appreciate this new checkbox.

It will autostart all profilers when you run a project, rather than forcing you to tab out of the game to do it yourself.

Error-less first project import

No one wants to be met with a wall of errors after freshly importing their project from a version control system.

This used to happen because it is not necessary to push the .godot folder into your repositories, since it auto-generates upon opening your project for the first time. After that, you had to restart the editor to get rid of all the errors caused by broken references — not anymore!

@export_tool_button annotation

On the button

The tool developers amongst you asked and our contributors delivered:

You can now create buttons in the inspector from @tool scripts.

Android editor: Export support

Stay on mobile from start to finish

The Godot editor has been available on Android devices for a while already, but until now you were forced to switch to a different OS to create the various platform binaries.

No more of that: download export templates onto your Android device and finalize your project right there.

JavaClassWrapper fixed

You can now map Java classes to Godot objects as an interface. This gives easier access to the Android SDK and lets you avoid creating a plugin for even the most basic things.

AndroidFilePicker support

You can now utilize Android’s native file picker in your games and apps. This creates a more seamless experience on mobile.

Swappy – Android Frame Pacing library

Pace yourself

The Android Frame Pacing library also known as Swappy helps games achieve smooth rendering and correct frame pacing on Android. The library handles multiple refresh rates if they are supported by the device, which gives a game more flexibility in presenting a frame.

As a developer, you don’t have to do anything to reap these benefits: they are automatic upon upgrading your project.

Themed icons

Matchy-matchy

To be able to match a user’s system theme, you can now provide a monochrome icon for your app on export, which will then automatically be re-colored for them. This is a simple way to enhance your app’s native feel.

Linux camera support

We can see you now!

Before Godot 4.4, accessing a device’s camera was only supported on macOS and iOS devices.

Now Linux support has finally been merged as well.

For other platforms, we still require contributors to pick up the work — could that be you?

Metal rendering backend

Melting the workarounds

Metal is a low-level graphics API similar to Vulkan or D3D12, which are both supported by Godot but not available on macOS and iOS. Until now Godot used a library called MoltenVK to run Vulkan over Metal.

This direct implementation is more efficient and allows greater control over features and performance trade-offs in the future. Early results have shown that this backend is at least as fast as Vulkan and in many cases much faster on Apple hardware.

In relation to this new backend, you now have the option to use MetalFX upscaling as an alternative to the existing upscaler.

Note that Metal support is currently limited to Apple Silicon (ARM) devices.

Apple game controller improvements

We overhauled how game controllers work on macOS and iOS, to unify the code across those two platforms some more. Plenty of bugs were fixed along the way.

You will notice improvements in the reliability of controller discovery and manipulating the rumble motors.

.NET 8.0

Time for an upgrade

With the release of Godot 4.0, we moved our C# packages from targeting Mono to .NET 6. This version of .NET was released on November 8, 2021 and ended support on November 12, 2024.

Therefore, our next release will implement and raise the minimum required version to .NET 8; existing projects will automatically be upgraded when opened with Godot 4.4 while older releases will keep targeting .NET 6 to avoid breakage.

.NET support for Android

C# projects now support all Android ABIs and BCL APIs (formerly only 64-bit architectures).

LookAtModifier3D

Would you look at that

This new node type is used to handle 3D model procedural animation, partially replacing the deprecated SkeletonIK3D. It is specialized to make a character model look in the target direction.

Therefore users can now assign angle limitations, forward axis settings, and more directly instead of relying on specific bone structures or arbitrary layouts.

SpringBoneSimulator3D

Jiggle physics

The VRMSpringBone has been available as an add-on on the asset library for a while now, but there were some issues that could only be fixed by a more direct implementation.

The animation team refined the MIT-distributed code based on Godot’s SkeletonModifier3D node, and tied it in with existing core functionality. This helps improve both usability and performance.

Without
With

Animation markers

Put a pin in it

Markers allow you to create subregions of an animation that can be jumped to or looped without playing the entire animation.

These markers are also supported inside the Animation Tree, where you can easily create an AnimationNode’s custom timeline based on the markers.

Image of the animation editor with markers added.

Runtime WAV file loading

Catch this WAVe

You can now load WAV files at runtime — just like OGG Vorbis audio tracks already allowed.

This feature will come in handy for those looking to load user-generated content at runtime, including non-game audio applications.

Betsy texture compressor

Faster imports

The Betsy texture compressor is a tool to compress images into various GPU texture formats. It is now being integrated into the Godot Engine.

Betsy runs on the GPU and is able to compress images significantly faster than our current compressors (using the “VRAM Compressed” import setting).

This change reduces import time dramatically.

New glTF extension

Customizable animation imports

Previously, glTF imports only allowed you to animate properties from this list: position, rotation, scale, and mesh blend shape weights.

This new extension now enables animations to target custom properties too! Think the color of a light, the FOV of a camera, the albedo color of a material, the UV offset of a material, …

The mappings between Godot properties and glTF Object Model JSON pointers can be defined via GDScript.

Async navigation

Background checks

Navigation map synchronization has been moved to an asynchronous background thread.

This avoids slowing down the entire game during navigation updates, especially on lower-end systems. Instead, updates will happen less frequently when resources are limited.

Custom colors for collision shapes

Debugging in style

Collision shapes now have debug_color and debug_fill properties for you to customize in the editor. If “Visible Collision Shapes” is enabled in the debug menu, you can even change these at runtime.

Screenshot of a game running with visible collision shapes showing different colors.

Lightmaps: bicubic sampling & transparency

Blend into the shadows

Thanks to bicubic sampling (and new antialiasing for direct light samples), your low resolution static shadows will now look better than ever.

This method for reading from lightmaps smoothes out sharp edges, but requires a small run-time performance cost. You can disable it in the project settings if needed.

Additionally, lightmaps now support baking transparent objects and correlatedly: tinted shadows.

The Sponza scene with bicubic shadows turned off.
Off
The Sponza scene with bicubic shadows turned on.
On

Vertex shading

Retro vibes

A new shading option for materials, which can be turned on from within existing material nodes or force enabled on all materials via the project settings.

Vertex shaders reduce GPU workload by checking whether vertices’ coordinates are within clip-space (visible to the camera) before processing the data.

This option is most commonly used to achieve PSX-style graphics or to target lower-end devices.

2D Batching

Call me maybe

Batching is a performance optimization that drastically reduces the number of draw calls in a scene. The effect will be particularly noticeable in scenes with a lot of text rendering or repeated sprites sharing a texture.

Previously, this optimization was only available in the Compatibility renderer. This release brings batching to the other rendering backends as well, which should make 2D performance comparable amongst all of them.

Rendering driver fallback

In case you were trying to run Godot with the Forward+ or Mobile backends on a device that does not not actually support Vulkan, D3D12, or Metal, you used to be met with an OS alert that has proven to confuse users more than it is helpful.

This change instead automatically makes the engine fallback on the Compatibility renderer, which is based on OpenGL. For moments when you do not want this behavior, you can toggle it off in the project settings.

Shadow Caster Mask property

Users can now apply a mask on singular Light3D objects to select which rendering layers are considered when casting shadows.

By adding this level of control, dynamic lights can be further optimized and shadows selectively turned on/off.

2D shader instance uniforms

Variations made easier

This release adds support for shader instance uniforms to CanvasItem shaders.

They allow you to assign a different uniform value to each instance of the item, instead of having to compile two separate shaders to achieve this.

This approach is more performant than having to juggle materials, and does not break batching.

Emission shapes for 3D particle systems

Removing the guesswork

From now on, you can rely on a visualization of the 3D particle systems you are placing in your scene, instead of having to guess based on the emission shape’s properties alone.

This works for both CPU and GPU particles.

Release authors

Team work makes the dream work

Here you can see all the contributors with PRs merged into this release. The names are ordered alphabetically, and sized accordingly to their number of contributions.

Special thanks goes out to all the engine teams that collaborated on this release, especially since commits to other related repositories (documentation, godot-cpp, etc.) do not show up in this graphic.

Another massive release with close to 3,000 commits (excluding merge commits), with a big focus on improvements to the overall workflow and usability of the editor.

Engine features didn't want to be left out amidst this usability focus though, and this release is absolutely feature-packed in all areas.

More than 500 contributors were involved in this new feature release, and we want to thank them all for their amazing contributions, as well as all users who sponsor the Development Fund, reported bugs, opened proposals, or supported each other on our community platforms.

— Rémi Verschelde, project manager, 4.4 release commit

Release page credits