With the first Godot 4.0 Release Candidate on the horizon we continue to release beta snapshots frequently and relentlessly! Such cadence allows us to better measure the overall stability and quickly catch regressions, especially when a lot of features are worked on at the same time.

This week we release a new batch of improvements and fixes, as well as some new features. Unfortunately, we also have to rollback one of the core animations features. After a lot of testing and consideration we’ve decided to postpone improvements to the inverse kinematics system until a future Godot 4.x release, removing the currently unstable SkeletonModificationStack3D. This decision allows us to better focus efforts of the Animation team on stabilizing other features.

This beta includes a few big changes which may interest a lot of users:

  • SkeletonModificationStack3D has been removed, with the 3D inverse kinematic API being more or less reset to the state of Godot 3.x. We will focus on fixing regressions in SkeletonIK3D for the remaining time, and work has already started on an improved IK system for a future Godot 4.x version (GH-71137).

  • You can now deploy your projects to all desktop platforms over SSH, as well as run a remote debug session similar to what we already offered for Android and Web. This is especially useful for the developers targeting the Steam Deck, as you can configure it to have one-click deploy to your device. As the number of remote debug options is quite big by now, we’ve packed them neatly in a single drop-down menu (GH-63312, GH-70701).

  • Several breaking changes were made to the C# API to bring it closer to the engine core and make it more consistent overall (GH-71445, GH-71458, GH-71423, GH-71431, GH-71424, GH-71456). There’s been a number of documentation improvements related to C# too, as a part of our ongoing documentation sprint.

  • Methods for drawing 2D lines and primitive shapes that take width as a parameter have been fixed and can now correctly handle widths at 1.0 or below (GH-69851).

  • The list of all global script classes (and their icons) is no longer stored in the project.godot file. It is now saved to a dedicated file inside of the .godot folder (GH-70557). This should improve VCS diffs for your projects.

    • Note: If you’re exporting your project from the command line and don’t have the .godot folder available, you currently need to make sure to run the editor at least once (in the headless mode) before trying to export it, similarly to what is required to import resources. This is a bug and should be solved eventually (so that you can --export-debug or --export-release directly from a Git checkout without .godot folder).

Jump to the Downloads section.

You can also try the Web editor (early testing, it’s still slow and unstable).

The illustration picture for this article is from Lone Knight by Jean Makes Games. The project is currently being ported to Godot 4 beta. Follow Jean Makes Games on Twitter for updates.

What’s new

If you’re interested in an overview of what’s new in Godot 4.0 beta in general, have a look at the detailed release notes for 4.0 beta 1. In this blog post, we will only cover the main changes since the previous beta release.

See the changelog on GitHub, or the list of merged PRs, for an overview of all changes since 4.0 beta 12 (88 commits – excluding merge commits ― from 39 contributors).

While we do our best to minimize compatibility breaking changes for existing beta users, there are still occasional changes in the API which may impact your Godot 4 projects. See the list of PRs with the breaks compat label for details.

Some of the most notables feature changes in this update are:

  • Animation: Reset animation on playback stop (GH-33733).
  • Animation: Remove SkeletonModificationStack3D, and Skeleton3D API cleanup (GH-71137).
  • Animation: Implement toggling pause / stop button to AnimationPlayerEditor (GH-71321).
  • Buildsystem: Fix feature build profile being parsed too late (and rename the option to build_profile) (GH-71508).
  • C#: Add IsFinite to C# Variants (GH-71339).
  • C#: Add IsZeroApprox to C# vectors (GH-71343).
  • C#: Remove includeBorders parameter from Rect2i.Intersects and AABB.Intersects (GH-71423).
  • C#: Sync Basis with Core (GH-71424).
  • C#: Replace Rotation and Scale properties with get methods (GH-71431).
  • C#: Add missing Transform{2D,3D} and Basis constructors (GH-71445).
  • C#: Sync Plane with Core (GH-71456).
  • C#: Make Length and LengthSquared into methods in Quaternion (GH-71458).
  • C#: Implement Mathf.SinCos (GH-71496).
  • Core: Move global script class cache to separate file (GH-70557).
  • Core: Refactor ProjectSetting overrides and make them work in the editor (GH-71325).
  • Core: Fix change_scene memory leak due to duplicate instantiation (GH-71459).
  • Editor: Fix contextual visibility of TileSet and TileMap editors (GH-65370).
  • Editor: Implement PROPERTY_HINT_MULTILINE_TEXT support for Array[String] and Dictionary (GH-70540).
    • This also means you can now use an @export_multiline annotation with such array and dictionary properties in GDScript.
  • Editor: Keep terrain choice when changing layer in TileMap editor (GH-70601).
  • Editor: Move remote debug buttons to a single menu (GH-70701).
  • Editor: Fix recursive resource inclusion check (GH-71229).
  • Editor: Fix TileSet atlas merging not working correctly (GH-71335).
  • Editor: Fix editor progress dialog having wrong GUI theme (GH-71360).
  • Editor: Fix node preview crashes after updating visual shader node (GH-71385).
  • Editor: Make keyboard shortcuts in tile data editors consistent with tilemap editor (GH-71517).
  • Export: Add one-click deploy over SSH for the desktop exports (GH-63312).
  • GDScript: Make script annotations be placed before class_name and extends (GH-67774).
  • GDScript: Fix auto-complete not suggesting custom class names on identifiers (GH-69970).
  • GDScript: Fix typing of iterator in for loop (GH-71279).
  • GDScript: Fix infinite recursion in resolution of enum values (GH-71329).
  • GDScript: Fix cyclic reference errors while reducing identifiers (GH-71434).
  • GUI: Calculate the mouse focus inverse transform only when needed (GH-69598).
  • GUI: Button shortcuts no longer “press” the Button (GH-71328).
  • GUI: Add expand mode compatibility to TextureRect (GH-71347).
    • This ensures that projects made prior to beta 12 don’t have their TextureRects suddenly grow out of proportions.
  • GUI: Add WINDOW_FLAG_MOUSE_PASSTHROUGH flag and enable it for tooltips (GH-71502).
  • Input: Add Key::CTRL_OR_CMD and use it to fix shortcut for tilemap painting tools on macOS (GH-64021).
  • Multiplayer: Fix nested spawning during “ready” (GH-71534).
  • Plugins: Retry loading addons after filesystem scan (GH-70668).
  • Rendering: Fix polyline not supporting closed polygons and not having a uniform width (GH-62236).
  • Rendering: Fix scaling issue in draw_line and similar methods (GH-69851).
  • Rendering: Fix GPUParticles2D not recomputing transforms each frame (GH-71520).
  • Rendering: Properly initialize directional_light_count in RD sky shaders (GH-71526).
  • Rendering: Update ImmediateMesh to use octohedral encoded normals (GH-71529).
  • As well as many improvements to the documentation and several new test suites for the engine.

This release is built from commit caacade56.

Downloads

The downloads for this dev snapshot can be found directly on our repository:

  • Standard build (GDScript, GDExtension).
  • .NET 6 build (C#, GDScript, GDExtension).
    • Requires .NET SDK 6.0 installed in a standard location. .NET 7.0 is not supported yet, so make sure to install .NET 6.0 specifically.

Known issues

As we are still in the early beta phase of development, there are still many issues to fix, some of which have already been reported and are being worked on. See the GitHub issue tracker for a list of known bugs in the 4.0 milestone.

Bug reports

As a tester, you are encouraged to open bug reports if you experience issues with this release. Please check first the existing issues on GitHub, using the search function with relevant keywords, to ensure that the bug you experience is not known already.

As in any major release there are going to be compatibility breaking changes. However, we still try to provide a migration path for your projects. If you experience a regression without a known migration path or workaround, do not hesitate to report it.

Support

Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, and a handful of part or full-time developers, hired thanks to donations from the Godot community. A big thankyou to everyone who has contributed their time or 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 on Patreon or PayPal.