
Practical Godot guides from the GodotAwesome team, checked against official docs and release notes.
Godot 4.6 to 4.7 Migration Guide: Breaking Changes and Fixes

Upgrading from Godot 4.6 to 4.7 is relatively safe for most projects, according to the official upgrade guide. A few things changed, though: Jolt physics behavior, input device IDs, typed method overrides in GDScript, line rendering and the defaults for new projects. This guide lists them and what to do.
Checked against the official guide on 28 October 2026. For the feature overview see Godot 4.7 features.
5-minute checklist
- Back up the project or commit it to Git
- Open it in 4.7 and fix errors shown in the Output panel
- GDScript: typed method overrides now need an explicit
return - Physics: if you use Jolt, check
WorldBoundaryShape3DandSoftBody3D - Input: do not compare mouse or keyboard device IDs to
0 - UI: lines drawn with
CanvasItemlook thinner - C# projects: check the binary and source compatibility list below
- Test your main scenes, exports and audio areas
Breaking changes
These items need code changes in the situations described. Names are as written in the official guide.
| Area | Change | Affects |
|---|---|---|
| Core | OptimizedTranslation.generate returns bool instead of void |
C# binary compatibility |
| GUI | Control.accessibility_live type changes to AccessibilityServer.AccessibilityLiveMode |
C# binary and source |
| GUI | RichTextLabel.ImageUpdateMask.UPDATE_WIDTH_IN_PERCENT renamed to UPDATE_WIDTH_UNIT |
GDScript and C# source |
| GUI | RichTextLabel.add_image and update_image: width_in_percent and height_in_percent renamed to width_unit and height_unit, type is now RichTextLabel.ImageUnit |
C# source |
| Rendering | RenderingServer.particles_request_process_time: time renamed to process_time |
C# source |
| Animation | Animation.length type metadata changes from float to double |
C# binary and source |
| Physics | PhysicsServer2DExtension._body_set_shape_as_one_way_collision gets a required direction parameter |
Extensions |
| Audio | AudioEffectSpectrumAnalyzer.tap_back_pos is removed |
GDScript and C# |
| XR | OpenXRExtensionWrapper._on_register_metadata gets interaction_profile_metadata |
Extensions |
| Editor | EditorVCSInterface._commit gets amend |
Editor plugins |
| Editor | EditorSceneFormatImporter IMPORT_* constants move into the ImportFlags enum |
C# source |
Most game projects will not touch these. If you write GDExtensions, editor plugins or C# code that calls the APIs above, check them.
Behavior changes and fixes
GDScript
Typed overrides need a return. Overrides of methods with a typed return must include an explicit return statement. Add return null to fix the error:
func _create_thing() -> Node:
# 4.7 requires an explicit return here
return nullPacked array elements. Setting a packed array element no longer calls the setter for the whole packed array property.
Physics (Jolt)
WorldBoundaryShape3D.plane.dnow uses the opposite sign convention. Flip the sign to keep 4.6 behaviorSoftBody3Dmass now defaults to 1 kg for the whole body, not per point, andlinear_stiffnessis applied differently. Retunelinear_stiffnessanddamping_coefficientArea3Dnow reports overlaps withSoftBody3D. Use collision layers and masks to ignore interactions you do not want
If you are not sure which physics engine your project uses, see Godot Jolt Physics: how to enable Jolt.
Audio
AudioStreamPlayer.area_mask now defaults to disabled instead of layer 1. If you use audio_bus_override on an Area2D or Area3D with the default mask, set the mask back to layer 1.
Input
Mouse and keyboard device IDs changed from 0 to InputEvent.DEVICE_ID_MOUSE and InputEvent.DEVICE_ID_KEYBOARD. Check by event type, or compare InputEvent.device with the constants:
func _input(event: InputEvent) -> void:
if event is InputEventMouse:
print("mouse event")
if event.device == InputEvent.DEVICE_ID_KEYBOARD:
print("keyboard device")Rendering and drawing
- The
LinearToSRGBvisual shader node no longer clamps to the range 0.0 to 1.0 on the Mobile and Forward+ renderers CanvasItemno longer adds an antialiasing feather to lines, so they look thinner. You may need a larger line width
Changed defaults
| Setting | 4.6 | 4.7 |
|---|---|---|
New projects: display/window/stretch/mode |
disabled |
canvas_items |
New projects: display/window/stretch/aspect |
keep |
expand |
LookAtModifier3D.relative |
true |
false |
rendering/reflections/sky_reflections/roughness_layers |
7 |
8 |
ResourceImporterDynamicFont.hinting |
1 |
3 |
The stretch defaults are listed by the official guide for new projects.
Related guides
FAQ
Is it safe to upgrade from Godot 4.6 to 4.7?
The official guide says it should be relatively safe for most games and apps made with 4.6. Review the breaking changes, behavior changes and changed defaults, and test on a copy.
Will my Jolt physics behave differently in 4.7?
Possibly. WorldBoundaryShape3D uses the opposite sign for plane.d, SoftBody3D mass and stiffness behave differently, and Area3D now reports SoftBody3D overlaps.
Do I need to change my C# code?
Only if you use the APIs listed in the breaking changes table. The official guide marks binary and source compatibility for each item.
What if my project used the mouse device ID as 0?
Use the InputEvent.DEVICE_ID_MOUSE and InputEvent.DEVICE_ID_KEYBOARD constants, or check the event type.
Update log
- 28 October 2026: first version, checked against the official "Upgrading from Godot 4.6 to 4.7" guide.