It’s been over 6 months since Godot 3.1.1-stable, so the upcoming 3.1.2 release is both long overdue and accordingly packed with important bug fixes and enhancements.

We intended to have 3.1.x releases more regularly (every other month or so), but our release manager for the stable branches, HP, has been quite busy the past few months and thus less available for Godot contributions. So now that the 3.2 pipeline is well oiled (see 3.2 beta 1), I’m going back to the stable branches to provide new releases. I also plan to release 3.0.7 in coming weeks for those of you who are still using the 3.0 branch for specific projects.

As we cherry-picked close to 400 commits to the 3.1 branch since 3.1.1-stable, extensive testing is necessary to ensure that no regression crept in under disguise of a bugfix. This is why we publish this release candidate for 3.1.2 to gather test reports from the community.

Release branches

Before checking the changelog for this release, a short clarification on the release branches that we use for those not familiar with Godot’s versioning.

Our next stable branch, developing the Git master branch, is Godot 3.2. This version is currently in beta and should become stable within a few weeks. Most of the devblogs published since the 3.1 release cover features which have been merged in the master branch and will be included in Godot 3.2.

In parallel, we also work in the vulkan branch on version 4.0 which will come sometime next year with Vulkan support. We increase the “major” version number (3 to 4) as there will be some compatibility breakage.

Our current maintained stable branches are 3.1 (latest release 3.1.1), 3.0 (latest 3.0.6) and 2.1 (latest 2.1.6). Each of those branches is tracked separately in a Git branch, where we cherry-pick relevant commits from the master branch for future maintenance releases. The upcoming 3.1.2 release is thus going to be a maintenance release for the 3.1 branch, with the same feature set that 3.1 already had, but less bugs and some usability and documentation enhancements.

So if you’re looking for the latest and greatest, check 3.2 beta 1, but if you have game in production using Godot 3.1.1, you might be interested in upgrading to 3.1.2 and helping us test this release candidate.


As mentioned, this release includes close to 400 new commits, with many bug fixes, usability enhancements and documentation improvements. You can read the complete changelog for details. Below are a few selected highlights:

You can also see the full changelog since 3.1.1-stable on GitHub, split in two parts as the web view is limited to 250 commits: part 1 and part 2. This release candidate is built from commit bfd993b.

Note: For more details on specific areas, you can use git log on a local clone of the Godot repository. Use the syntax git log 3.1.1-stable..3.1 <path> to get the list of changes since 3.1.1-stable on a given path. For example git log 3.1.1-stable..3.1 scene/gui/ would list all changes impacting the Control nodes.


As always, you will find the binaries for your platform on our mirrors:

Please test this version thoroughly on your existing 3.1.1 projects, and make sure to report any regression that you may notice. 400 commits is a lot, and the 3.1 branch is not tested as thoroughly as the master branch outside releases such as this one, so there is a lot of surface for potential regressions (yet, there shouldn’t be any game breaking issue, so it’s safe to test it on existing projects and revert back to 3.1.1 if there’s any problem).

Known incompatibilities

Below we describe the known incompatibilities with previous releases in this cycle.

Known incompatibilities with Godot 3.1

  • Due to a security fix the GDNative ABI has changed. If you use GDNative modules in your project they will need to be rebuilt from source.
  • Godot no longer automatically decodes Objects when using high level multiplayer. If you do want your client or server to do this it is now necessary to explicitly allow it. See this PR for details.
  • Previously on Android OS.get_unique_id() would return the static value for Secure.ANDROID_ID. This was a bug and now an actually unique ID is returned. If you were using the unique ID for encryption purposes you must now also check the original static value or your users may lose access to any encrypted (save) data.

Known incompatibilities with Godot 3.1.1

  • CPUParticles2D: The “Lifetime” draw order was reversed. GH-29558 fixes it, but if you relied on the previous wrong order, you would have to work it around.
  • RigidBody(2D): The can_sleep variable was not properly initialized (regression in 3.1). GH-32767 fixes it, but it might impact your project if you relied on the previous incorrect initialization.
  • GLES2: Some of the many bug fixes listed above may lead to changes in the visuals of your project (especially around lighting/shadows). Be sure to report anything that you would consider a regression.
  • macOS: Key mappings for KEY_BRACELEFT and KEY_BRACERIGHT were inverted. GH-28185 fixes this bug, so check your code in case you relied on these values matching the wrong keys.
  • If you spot any other difference in your projects, please notify us so that we can list it here (even if it’s a good change/bugfix, it’s worth documenting it so that all users are aware).