Upgrading from Godot 4.6 to Godot 4.7
For most games and apps made with 4.6 it should be relatively safe to migrate to 4.7. This page intends to cover everything you need to pay attention to when migrating your project.
Breaking changes
If you are migrating from 4.6 to 4.7, the breaking changes listed here might affect you. Changes are grouped by areas/systems.
This article indicates whether each breaking change affects GDScript and whether the C# breaking change is binary compatible or source compatible:
Binary compatible - Existing binaries will load and execute successfully without recompilation, and the runtime behavior won't change.
Source compatible - Source code will compile successfully without changes when upgrading Godot.
Core
Change |
GDScript Compatible |
C# Binary Compatible |
C# Source Compatible |
Introduced |
|---|---|---|---|---|
Object |
||||
Method |
✔️ |
✔️ |
✔️ |
|
ZIPPacker |
||||
Method |
✔️ |
✔️ |
✔️ |
|
OptimizedTranslation |
||||
Method |
✔️ |
❌ |
✔️ |
2D
Change |
GDScript Compatible |
C# Binary Compatible |
C# Source Compatible |
Introduced |
|---|---|---|---|---|
CPUParticles2D |
||||
Method |
✔️ |
✔️ |
✔️ |
|
GPUParticles2D |
||||
Method |
✔️ |
✔️ |
✔️ |
3D
Change |
GDScript Compatible |
C# Binary Compatible |
C# Source Compatible |
Introduced |
|---|---|---|---|---|
CPUParticles3D |
||||
Method |
✔️ |
✔️ |
✔️ |
|
GPUParticles3D |
||||
Method |
✔️ |
✔️ |
✔️ |
GUI nodes
Change |
GDScript Compatible |
C# Binary Compatible |
C# Source Compatible |
Introduced |
|---|---|---|---|---|
Control |
||||
Property |
✔️ |
❌ |
❌ |
|
RichTextLabel |
||||
Enum field |
❌ |
✔️ |
❌ |
|
Method |
✔️ |
✔️ |
✔️ |
|
Method |
✔️ |
✔️ |
✔️ |
|
Method |
✔️ |
✔️ |
❌ |
|
Method |
✔️ |
✔️ |
❌ |
|
Method |
✔️ |
✔️ |
✔️ |
|
Method |
✔️ |
✔️ |
✔️ |
|
Method |
✔️ |
✔️ |
❌ |
|
Method |
✔️ |
✔️ |
❌ |
Text
Change |
GDScript Compatible |
C# Binary Compatible |
C# Source Compatible |
Introduced |
|---|---|---|---|---|
Font |
||||
Method |
✔️ |
✔️ |
✔️ |
|
TreeItem |
||||
Method |
✔️ |
✔️ |
✔️ |
Rendering
Change |
GDScript Compatible |
C# Binary Compatible |
C# Source Compatible |
Introduced |
|---|---|---|---|---|
Image |
||||
Method |
✔️ |
✔️ |
✔️ |
|
Method |
✔️ |
✔️ |
✔️ |
|
ImageTexture |
||||
Method |
✔️ |
✔️ |
✔️ |
|
PortableCompressedTexture2D |
||||
Method |
✔️ |
✔️ |
✔️ |
|
RenderingServer |
||||
Method |
✔️ |
✔️ |
❌ |
|
Method |
✔️ |
✔️ |
✔️ |
Animation
Change |
GDScript Compatible |
C# Binary Compatible |
C# Source Compatible |
Introduced |
|---|---|---|---|---|
Animation |
||||
Property |
✔️ |
❌ |
❌ |
|
AnimationNodeBlendSpace1D |
||||
Method |
✔️ |
✔️ |
✔️ |
|
AnimationNodeBlendSpace2D |
||||
Method |
✔️ |
✔️ |
✔️ |
Physics
Change |
GDScript Compatible |
C# Binary Compatible |
C# Source Compatible |
Introduced |
|---|---|---|---|---|
PhysicsServer2D |
||||
Method |
✔️ |
✔️ |
✔️ |
|
PhysicsServer2DExtension |
||||
Method |
❌ |
❌ |
❌ |
Audio
Change |
GDScript Compatible |
C# Binary Compatible |
C# Source Compatible |
Introduced |
|---|---|---|---|---|
AudioEffectSpectrumAnalyzer |
||||
Property |
❌ |
❌ |
❌ |
XR
Change |
GDScript Compatible |
C# Binary Compatible |
C# Source Compatible |
Introduced |
|---|---|---|---|---|
OpenXRExtensionWrapper |
||||
Method |
❌ |
❌ |
❌ |
|
OpenXRSpatialAnchorCapability |
||||
Method |
✔️ |
✔️ |
✔️ |
Editor
Change |
GDScript Compatible |
C# Binary Compatible |
C# Source Compatible |
Introduced |
|---|---|---|---|---|
EditorSceneFormatImporter |
||||
Constant |
✔️ |
✔️ |
❌ |
|
Constant |
✔️ |
✔️ |
❌ |
|
Constant |
✔️ |
✔️ |
❌ |
|
Constant |
✔️ |
✔️ |
❌ |
|
Constant |
✔️ |
✔️ |
❌ |
|
Constant |
✔️ |
✔️ |
❌ |
|
Constant |
✔️ |
✔️ |
❌ |
|
EditorVCSInterface |
||||
Method |
❌ |
❌ |
❌ |
Behavior changes
Rendering
Note
The LinearToSRGB visual shader no longer clamps to the range [0.0, 1.0]
when using the Mobile or Forward+ renderer (GH-113956).
Note
CanvasItem now avoids adding the antialiasing feather when drawing lines (GH-105122).
The feather made lines appear thicker than intended, projects that relied on this behavior
will have to be updated to draw a thicker line width.
Physics
Note
The default area_mask for AudioStreamPlayer was changed from 1 to 0 (disabled) (GH-107679).
If you use the audio_bus_override feature on Area2D or Area3D, and you
use the AudioStreamPlayer default area_mask (just layer 1 ticked), you will need
to reset the mask to layer 1 — otherwise, the bus overrides will stop working.
If the mask was set to anything except layer 1, it will continue to work as expected.
Note
When using Jolt Physics as the 3D physics engine, WorldBoundaryShape3D will now use the same
convention as Godot when applying WorldBoundaryShape3D.plane.d, resulting in the sign of the plane
distance being interpreted in the opposite way compared to Godot 4.6 (GH-118948). You will need to flip
the sign yourself to get the same behavior as in Godot 4.6.
Note
When using Jolt Physics as the 3D physics engine, SoftBody3D will no longer default its mass to 0,
which resulted in an automatically calculated weight of 1 kg per point, resulting in a very high total
mass for the body. Now instead it will default to 1 kg for the entire SoftBody3D, same as Godot
Physics (GH-116041).
Note
When using Jolt Physics as the 3D physics engine, SoftBody3D will now apply
SoftBody3D.linear_stiffness in a way that better matches Godot Physics, and in a way that's more
appropriate in general (GH-116041). This will affect every SoftBody3D instance in one way or
another, meaning you will need to re-tweak properties like SoftBody3D.linear_stiffness and
SoftBody3D.damping_coefficient to achieve your desired behavior.
Note
When using Jolt Physics as the 3D physics engine, Area3D will now report overlaps with SoftBody3D
from its various signals and methods (GH-114198). To work around this breaking change, configure your
collision layers/masks such that any undesirable interactions between Area3D and SoftBody3D are
ignored.
Input
Note
The device IDs for mouse and keyboard were changed from 0 to InputEvent.DEVICE_ID_MOUSE and
InputEvent.DEVICE_ID_KEYBOARD because some joypads may use 0 as their ID (GH-116274).
Check the input event by type or compare the device ID InputEvent.device to the constants
InputEvent.DEVICE_ID_MOUSE and InputEvent.DEVICE_ID_KEYBOARD instead.
GDScript
Note
Setting the element of packed arrays no longer calls the setter for the entire packed array property (GH-113228).
Note
Methods that inherit from a method with a typed return now inherit the return type as well,
requiring an explicit return statement in the override (GH-115763).
Add return null to the end of the method to fix the error.
Changed defaults
The following default values have been changed. If your project uses any of these properties with their default value, you can achieve a similar behavior to the previous version by manually setting the values to match the old defaults.
Animation
Property/Parameter |
Old Default |
New Default |
|---|---|---|
LookAtModifier3D |
||
Property |
true |
false |
Core
Property/Parameter |
Old Default |
New Default |
|---|---|---|
ProjectSettings |
||
Property |
7 |
8 |
GUI nodes
Property/Parameter |
Old Default |
New Default |
|---|---|---|
RichTextLabel |
||
Method |
false |
0 |
Method |
false |
0 |
Method |
false |
0 |
Method |
false |
0 |
Import
Property/Parameter |
Old Default |
New Default |
|---|---|---|
ResourceImporterDynamicFont |
||
Property |
1 |
3 |