Godot Engine Official2025-12-20T08:28:25+00:00https://godotengine.org/Dev snapshot: Godot 4.6 beta 22025-12-19T12:00:00+00:00https://godotengine.org/article/dev-snapshot-godot-4-6-beta-2/The final development snapshot of 2025!<p>As 2025 winds to a close, so too does our team for the holiday season. Before we head off, let us leave you with a parting gift: the final development build of the year, 4.6 beta 2!</p> <p>We’ve already discovered and tackled a fair number of regressions since <a href="/article/dev-snapshot-godot-4-6-beta-1/">4.6 beta 1</a>, which we’re hoping will lend itself to a quick release cycle. However, there’s still further bugfixing and testing to be done, so users are encouraged to report whatever new issues crop up this release.</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/4.6.beta1/"><strong>Web editor</strong></a>, the <a href="https://www.meta.com/s/h9JcJGHfg"><strong>XR editor</strong></a>, or the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4"><strong>Android editor</strong></a> for this release. If you are interested in the latter, please request to join <a href="https://groups.google.com/g/godot-testers">our testing group</a> to get access to pre-release builds.</p> <hr /> <p><em>The cover illustration is from</em> <a href="https://store.steampowered.com/app/3376250/NineBall_Roulette/?curator_clanid=41324400"><strong>Nine-Ball Roulette</strong></a>, <em>a thriller where you and up to 3 friends take part in a relaxing game of pool with a little Russian Roulette on the side. You can buy the game on <a href="https://store.steampowered.com/app/3376250/NineBall_Roulette/?curator_clanid=41324400">Steam</a>, and check out the developers on <a href="www.youtube.com/@WaveBoxLabs">YouTube</a>!</em></p> <h2 id="highlights">Highlights</h2> <p>For an overview of what’s new overall in Godot 4.6, have a look at the highlights for <a href="/article/dev-snapshot-godot-4-6-beta-1/">4.6 beta 1</a>, which cover a lot of the changes. This blog post only covers the changes between beta 1 and beta 2. This section covers the most relevant changes made since the beta 1 snapshot, which are largely regression fixes:</p> <ul> <li>Editor: Disable tool button for multiple nodes (<a href="https://github.com/godotengine/godot/pull/113944">GH-113944</a>).</li> <li>Editor: Fix shader editor minimum size (<a href="https://github.com/godotengine/godot/pull/113916">GH-113916</a>).</li> <li>Editor: Show file when FileSystem is searched with UID (<a href="https://github.com/godotengine/godot/pull/102789">GH-102789</a>).</li> <li>GUI: Fix <code class="language-plaintext highlighter-rouge">TextEdit</code> does not auto scroll properly on certain vertical sizes (<a href="https://github.com/godotengine/godot/pull/113390">GH-113390</a>).</li> <li>Platforms: iOS: Automatically enable <code class="language-plaintext highlighter-rouge">iphone-ipad-minimum-performance-a12</code> if project is using Forward+/Mobile renderer (<a href="https://github.com/godotengine/godot/pull/114098">GH-114098</a>).</li> <li>Platforms: Linux: X11: Fix input delay regression (<a href="https://github.com/godotengine/godot/pull/113537">GH-113537</a>).</li> <li>Rendering: Update Mesa NIR to 25.3.1 + Make each SPIR-V -&gt; DXIL conversion thread allocate from its own heap (<a href="https://github.com/godotengine/godot/pull/113618">GH-113618</a>).</li> <li>Rendering: OpenGL: Split the ubos for motion vectors into separate uniforms to fix Adreno GPU crash (<a href="https://github.com/godotengine/godot/pull/114175">GH-114175</a>),</li> <li>Thirdparty: Replace <code class="language-plaintext highlighter-rouge">minimp3</code> with <code class="language-plaintext highlighter-rouge">dr_mp3</code> (<a href="https://github.com/godotengine/godot/pull/96547">GH-96547</a>).</li> <li>Thirdparty: SDL: Update to 3.2.28 (<a href="https://github.com/godotengine/godot/pull/113968">GH-113968</a>).</li> <li>Translations: Sync with latest Weblate, new 4.6 strings are now <a href="https://contributing.godotengine.org/en/latest/other/translations.html">available to translate</a>.</li> </ul> <h2 id="changelog">Changelog</h2> <p><strong>64 contributors</strong> submitted <strong>198 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6-beta2"><strong>interactive changelog</strong></a> for the complete list of changes since <a href="/article/dev-snapshot-godot-4-6-beta-1/">4.6-beta1</a>. You can also review <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6">all changes included in 4.6</a> compared to the previous <a href="/releases/4.5/">4.5 feature release</a>.</p> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/551ce8d47feda9c81c870314745366b24957624b"><code class="language-plaintext highlighter-rouge">551ce8d47</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.6-beta2"> Download Godot 4.6 beta2 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-6-beta-2.jpg" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=beta2&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=beta2&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=beta2&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=beta2&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=beta2&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=beta2&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.6-beta2"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript and GDExtension.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript and GDExtension.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <p>During the beta stage, we focus on solving both regressions (i.e. something that worked in a previous release is now broken) and significant new bugs introduced by new features. You can have a look at our current <a href="https://github.com/orgs/godotengine/projects/61">list of regressions and significant issues</a> which we aim to address before releasing 4.6. This list is dynamic and will be updated if we discover new showstopping issues after more users start testing the beta snapshots.</p> <p>With every release, we accept that there are going to be various issues which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug">known bugs</a>.</p> <ul> <li>XR: Motion vectors are currently broken in the compatibility renderer, causing geometry to predominantly render as black (<a href="https://github.com/godotengine/godot/issues/107438">GH-107438</a>).</li> </ul> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open-source game engine developed by hundreds of contributors in their free time, as well as a handful of part and full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by <a href="https://godot.foundation/">Godot Foundation</a>. There are also several <a href="/donate">alternative ways to donate</a> which you may find more suitable.</p> <p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p>Thaddeus CrewsInverse Kinematics Returns to Godot 4.62025-12-16T10:00:00+00:00https://godotengine.org/article/inverse-kinematics-returns-to-godot-4-6/Now Godot has Inverse Kinematics in 3D.<style>article .content img { background-color: initial; }</style> <p>In Godot 4.6, IK is back in 3D!</p> <p><img src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/picture01.webp" alt="IK on the table" /></p> <p>Of course, “IK” means inverse kinematics.</p> <p>If you have experience with Godot 3.x, you might remember that IK was removed during the upgrade to 4.0. I explained in a <a href="/article/design-of-the-skeleton-modifier-3d/">previous blog post</a> that it was removed because the old skeleton API design had issues and needed reworking.</p> <p>Then, you might wonder if it was theoretically possible to implement IK alongside the <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code> implementation in 4.4. However, we had to avoid adding immature features and then hastily removing it again. To implement IK, we staged the elements for the entire IK across three versions.</p> <p>This blog post will explain that journey.</p> <p><img src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/picture02.webp" alt="Journey is begun" /></p> <h1 id="godot-44">Godot 4.4</h1> <p>In Godot 4.4, I implemented the base class for <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code>, along with two new modifiers, <code class="language-plaintext highlighter-rouge">LookAtModifier3D</code> and <code class="language-plaintext highlighter-rouge">RetargetModifier3D</code>.</p> <h2 id="skeletonmodifier3d--lookatmodifier3d">SkeletonModifier3D / LookAtModifier3D</h2> <p><code class="language-plaintext highlighter-rouge">LookAtModifier3D</code> was the minimal implementation to verify that the <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code> design was correct. <code class="language-plaintext highlighter-rouge">LookAtModifier3D</code> could be considered equivalent to one-bone IK, so it was suitable as a test case.</p> <video autoplay="" loop="" muted="" playsinline=""> <source src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/preview-look-at-modifier-3d.webm?1" type="video/webm" /> </video> <h2 id="retargetmodifier3d">RetargetModifier3D</h2> <p>However, when implementing <code class="language-plaintext highlighter-rouge">LookAtModifier3D</code>, I confirmed that users must specify the bone axis based on the bone rest. It was my initial concern that the retarget feature implemented in 4.0 discarded the bone rests of the imported skeleton.</p> <p>As this concern became a certainty, I attempted to preserve bone rests by implementing <code class="language-plaintext highlighter-rouge">RetargetModifier3D</code>.</p> <p><img src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/inspector-retarget-modifier-3d.webp" alt="Inspector of RetargetModifier3D" /></p> <p>It was fortunate for me that the processing order design of <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code> matched the requirements for implementing <code class="language-plaintext highlighter-rouge">RetargetModifier3D</code>.</p> <h1 id="godot-45">Godot 4.5</h1> <p>In Godot 4.5, I implemented <code class="language-plaintext highlighter-rouge">SpringBoneSimulator3D</code> and <code class="language-plaintext highlighter-rouge">BoneConstraint3D</code> (and its three child classes <code class="language-plaintext highlighter-rouge">AimModifier3D</code>, <code class="language-plaintext highlighter-rouge">ConvertTransformModifier3D</code> and <code class="language-plaintext highlighter-rouge">CopyTransformModifier3D</code>).</p> <p>By the way, I’m involved in a project that utilizes a 3D character model format known as <a href="https://vrm.dev/">VRM</a>. VRM has implementations of <a href="https://vrm.dev/en/vrm1/springbone/">SpringBone</a> and <a href="https://vrm.dev/en/vrm1/constraint/">Constraint</a> as model-specific configurations that can be ported to cross-platform environments, so ensuring compatibility with these was one of the purposes.</p> <h2 id="springbonesimulator3d">SpringBoneSimulator3D</h2> <video autoplay="" loop="" muted="" playsinline=""> <source src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/preview-spring-bone-simulator-3d.webm?1" type="video/webm" /> </video> <p>One challenging part of implementing <code class="language-plaintext highlighter-rouge">SpringBoneSimulator3D</code> was creating the bone chain internally. Specifically, by setting the root bone as the ancestor and the end bone as the descendant, we could retrieve the bones between them and automatically construct the joint array.</p> <p><img src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/inspector-spring-bone-simulator-3d.webp" alt="Inspector of SpringBoneSimulator3D" /></p> <p>Compared to users manually creating these arrays, this approach reduced user operations and validation on the core side, making it beneficial for both ends.</p> <h2 id="boneconstraint3d-and-3-child-classes">BoneConstraint3D (and 3 child classes)</h2> <p><code class="language-plaintext highlighter-rouge">BoneConstraint3D</code> is a feature that allows bones to interact with other bones. The actual behavior and calculations it provides are simple.</p> <p>What was challenging here was the design for a base class containing a virtual struct array as a member and extending that struct in a child class. This topic is a bit more advanced for beginner coders, but when using struct arrays as properties in Godot, you need to implement a slightly tricky approach.</p> <p><img src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/inspector-bone-constraint-3d.webp" alt="Inspector of BoneConstraint3D" /></p> <p>I already had the design idea that IK would have a base class similar to <code class="language-plaintext highlighter-rouge">BoneConstraint3D</code>, with child classes extending the structure to implement the actual solver. So, I was confident that merging and establishing that method at this point would be beneficial for IK.</p> <h1 id="godot-46">Godot 4.6</h1> <p>Finally, I began implementing IK in Godot 4.6.</p> <video autoplay="" loop="" muted="" playsinline=""> <source src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/preview-ik-modifier-3d.webm?1" type="video/webm" /> </video> <h2 id="ikmodifier3d-and-7-child-classes">IKModifier3D (and 7 child classes)</h2> <p>As a first step, I defined <code class="language-plaintext highlighter-rouge">IKModifier3D</code> and <code class="language-plaintext highlighter-rouge">ChainIK3D</code> by reusing <code class="language-plaintext highlighter-rouge">BoneConstraint3D</code> and <code class="language-plaintext highlighter-rouge">SpringBoneSimulator3D</code>. After that, I implemented the process for moving joints called the IK solver.</p> <p>Therefore, <code class="language-plaintext highlighter-rouge">IKModifier3D</code> has the following child classes:</p> <ul> <li>IKModifier3D <ul> <li>TwoBoneIK3D</li> <li>ChainIK3D <ul> <li>SplineIK3D</li> <li>IterateIK3D <ul> <li>FABRIK3D</li> <li>CCDIK3D</li> <li>JacobianIK3D</li> </ul> </li> </ul> </li> </ul> </li> </ul> <p>When implementing those IKs, I made sure to keep them to the minimum functions.</p> <p>Some IK systems outside of Godot might have additional “processing to make the IK results look better”, separate from the core calculation algorithm that rotates the bones. In the rich IK system, the IK class may include them and can enable their processing by their bool property.</p> <p>Then, I believed separating them would help maintain maintainability and extendability. In other words, if only the “processing to make the IK results look better” can be reused, when users want to implement custom IK, they only need to implement a minimal IK solver.</p> <p>The following are the improvements and additions made in Godot 4.6 to make the IK results look better.</p> <h2 id="tweak-boneconstraint3d">Tweak BoneConstraint3D</h2> <p>For example, there are cases where Twist is applied before IK calculation, or where the end bone is directed toward the IK target after IK calculation.</p> <p>In Godot 4.5, the <code class="language-plaintext highlighter-rouge">BoneConstraint3D</code> could only assign bones as reference objects, but in 4.6, it can now assign <code class="language-plaintext highlighter-rouge">Node3D</code> objects.</p> <p><img src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/inspector-new-bone-constraint-3d.webp" alt="Inspector of new BoneConstraint3D" /></p> <p>This tweaking allows <code class="language-plaintext highlighter-rouge">BoneConstraint3D</code> to be used to perform these additional rotations.</p> <video autoplay="" loop="" muted="" playsinline=""> <source src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/preview-bone-constraint-3d.webm?1" type="video/webm" /> </video> <p><a href="/storage/blog/inverse-kinematics-returns-to-godot-4-6/adjusted-ik-3d-demo.zip">adjusted-ik-3d-demo.zip</a></p> <h2 id="bonetwistdisperser3d">BoneTwistDisperser3D</h2> <p>In theory, using <code class="language-plaintext highlighter-rouge">ConvertTransformModifier3D</code> allows you to apply the rotation of descendant bones to their ancestors. However, the process for setting this up properly was somewhat complex and could only be handled by advanced users.</p> <p><code class="language-plaintext highlighter-rouge">BoneTwistDisperser3D</code> provides a simple way to achieve that process.</p> <video autoplay="" loop="" muted="" playsinline=""> <source src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/preview-bone-twist-disperser-3d.webm?1" type="video/webm" /> </video> <h2 id="limitangularvelocitymodifier3d">LimitAngularVelocityModifier3D</h2> <p><code class="language-plaintext highlighter-rouge">LimitAngularVelocityModifier3D</code> is a modifier that limits angular velocity. The behavior is quite simple, so it doesn’t need much explanation.</p> <p>However, it’s worth learning that there are two types of IK.</p> <h2 id="deterministic-ik">Deterministic IK</h2> <p>In computer science, “deterministic” means that the result is always the same for a given input. In particular, for game applications like Godot, the term means that the result does not depend on the state of the previous frame. Incidentally, since <code class="language-plaintext highlighter-rouge">AnimationMixer</code> already has a <a href="/article/migrating-animations-from-godot-4-0-to-4-3/#deterministic-blending">deterministic option</a>, that immediately made me decide to adopt this term.</p> <p><code class="language-plaintext highlighter-rouge">TwoBoneIK3D</code> and <code class="language-plaintext highlighter-rouge">SplineIK3D</code> are always deterministic. However, in <code class="language-plaintext highlighter-rouge">IterateIK3D</code>, whether it is deterministic depends on the options.</p> <p><code class="language-plaintext highlighter-rouge">IterateIK3D</code> repeats the routine provided by the solver to approach the end bone toward its goal. At this point, the number of repetitions per frame depends on the option.</p> <p>When the deterministic option is disabled, it means that the iteration is performed by carrying over the state from the previous frame. In this case, even with a small number of iterations per frame, the end bone can reach the goal eventually as frames progress.</p> <video autoplay="" loop="" muted="" playsinline=""> <source src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/preview-non-deterministic-ik-3d.webm?1" type="video/webm" /> </video> <p>In contrast, when the deterministic option is enabled, the previous frame’s state is not carried over. Therefore, if the number of iterations per frame is small, the end bone may never reach its goal.</p> <video autoplay="" loop="" muted="" playsinline=""> <source src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/preview-deterministic-ik-3d.webm?1" type="video/webm" /> </video> <p>However, if you want to ensure consistent results depending on the relative position between the IK target and the skeleton, the deterministic option is useful. For example, it is ideal for online applications where only the coordinates of the IK target are shared to synchronize the model’s pose.</p> <p>As a point to note, deterministic IK cannot avoid causing rotation with large angular velocities by its design. It goes without saying that <code class="language-plaintext highlighter-rouge">LimitAngularVelocityModifier3D</code> is useful for smoothing this out.</p> <video autoplay="" loop="" muted="" playsinline=""> <source src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/preview-limit-angular-velocity-modifier-3d.webm?1" type="video/webm" /> </video> <h1 id="looking-back-on-the-journey">Looking back on the journey</h1> <p>Between versions 4.4 and 4.6, excluding migrations, including base classes, 19 new <code class="language-plaintext highlighter-rouge">SkeletonModifier</code>s have been implemented!</p> <p><img src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/inspector-skeleton-modifier-3d.webp" alt="Inspector of SkeletonModifier3D" /></p> <p>There are many possibilities depending on how you combine them. So we have a plan to add detailed explanations and tutorials to the documentation in the future, but since that is expected to be quite large, we will need more time…</p> <p><img src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/picture03.webp" alt="Rest tasks" /></p> <p>For now, I’ll show you just one example in advance. This setup emulates the old <code class="language-plaintext highlighter-rouge">SkeletonIK3D</code>’s magnet option.</p> <video autoplay="" loop="" muted="" playsinline=""> <source src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/preview-magnet-ik-3d.webm?1" type="video/webm" /> </video> <p><a href="/storage/blog/inverse-kinematics-returns-to-godot-4-6/magnet-ik-3d-demo.zip">magnet-ik-3d-demo.zip</a></p> <p>As you can see from that example, it was just a 2-pass deterministic FABRIK. As explained above, it was also “processing to make the IK results look better”, and I think you can understand that the process could be separated.</p> <p>At last, I wish you all the best in creating fun games using <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code>s.</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open-source game engine developed by hundreds of contributors in their free time, as well as a handful of part or full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by <a href="https://godot.foundation/">Godot Foundation</a>. There are also several <a href="/donate">alternative ways to donate</a> which you may find more suitable.</p>Silc RenewDev snapshot: Godot 4.6 beta 12025-12-10T12:00:00+00:00https://godotengine.org/article/dev-snapshot-godot-4-6-beta-1/Godot 4.6 enters beta!<p>It’s finally time for the 4.6 release cycle to feature its very first beta! Thanks to handling the feature freeze in <a href="/article/dev-snapshot-godot-4-6-dev-6">dev 6</a>, there are already been several bugs and regressions identified early and subsequently squashed. However, there are still more to iron out, so all contributors are encouraged to shift their focus to <a href="https://github.com/godotengine/godot/issues?q=is%3Aopen+is%3Aissue+label%3Aregression+milestone%3A4.6">regression fixes</a> exclusively.</p> <p>For those interested in aiding us on our quest to squash any bugs that come up during this time, we once again encourage you to join our bug-hunting sprints. Anyone interested should read the <a href="https://github.com/godotengine/godot-maintainers-docs/blob/main/bug-triage/introduction.md">Bug Triage Introduction</a> for more information, and join the <a href="https://chat.godotengine.org/channel/bugsquad"><code class="language-plaintext highlighter-rouge">#bugsquad</code></a> and <a href="https://chat.godotengine.org/channel/bugsquad-sprints"><code class="language-plaintext highlighter-rouge">#bugsquad-sprints</code></a> channels on our developer RocketChat to participate!</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/4.6.beta1/"><strong>Web editor</strong></a>, the <a href="https://www.meta.com/s/h9JcJGHfg"><strong>XR editor</strong></a>, or the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4"><strong>Android editor</strong></a> for this release. If you are interested in the latter, please request to join <a href="https://groups.google.com/g/godot-testers">our testing group</a> to get access to pre-release builds.</p> <hr /> <p><em>The cover illustration is from</em> <a href="https://store.steampowered.com/app/3609750/Organized_Inside/?curator_clanid=41324400"><strong>Organized Inside</strong></a>, <em>a slow-paced life simulator where you tidy up after your cat and your life. You can buy the game or download the demo for free on <a href="https://store.steampowered.com/app/3609750/Organized_Inside/?curator_clanid=41324400">Steam</a>, and check out the developers at <a href="https://twitter.com/MeoxStudio">Twitter</a> or <a href="https://www.youtube.com/@MeoxStudio">YouTube</a>!</em></p> <h2 id="highlights">Highlights</h2> <p>For those who have been following our development snapshots closely, you may be familiar with a number of the highlights in this post which were already covered in previous articles (<a href="/article/dev-snapshot-godot-4-6-dev-1">dev 1</a>, <a href="/article/dev-snapshot-godot-4-6-dev-2">dev 2</a>, <a href="/article/dev-snapshot-godot-4-6-dev-3">dev 3</a>, <a href="/article/dev-snapshot-godot-4-6-dev-4">dev 4</a>, <a href="/article/dev-snapshot-godot-4-6-dev-5">dev 5</a>, and <a href="/article/dev-snapshot-godot-4-6-dev-6">dev 6</a>).</p> <p>Because we’re already in feature freeze, there are no new features to cover compared to dev 6. Instead, we’ll focus on a general round-up of what to expect from Godot 4.6 as a whole, as well as expanding on some additions that we didn’t have the chance to highlight in our previous snapshots.</p> <ul> <li><a href="#breaking-changes">Breaking changes</a></li> <li><a href="#animation">Animation</a></li> <li><a href="#audio--video">Audio / Video</a></li> <li><a href="#core">Core</a></li> <li><a href="#documentation">Documentation</a></li> <li><a href="#editor">Editor</a></li> <li><a href="#gdextension">GDExtension</a></li> <li><a href="#gdscript">GDScript</a></li> <li><a href="#gui">GUI</a></li> <li><a href="#import">Import</a></li> <li><a href="#input">Input</a></li> <li><a href="#internationalization">Internationalization</a></li> <li><a href="#navigation">Navigation</a></li> <li><a href="#physics">Physics</a></li> <li><a href="#platforms">Platforms</a></li> <li><a href="#rendering-and-shaders">Rendering and shaders</a></li> <li><a href="#xr">XR</a></li> </ul> <h3 id="breaking-changes">Breaking changes</h3> <p>We try to minimize breaking changes, but sometimes they are necessary in order to fix high-priority issues. Where we do break compatibility, we do our best to make sure that the changes are minimal and require few changes in user projects.</p> <p>You can find a list of such issues by filtering the merged PRs in the 4.6 milestone with the <a href="https://github.com/godotengine/godot/issues?q=milestone%3A4.6%20is%3Amerged%20label%3A%22breaks%20compat%22"><code class="language-plaintext highlighter-rouge">breaks compat</code> label</a>. Here are some which are worth being aware of:</p> <ul> <li>Default glow blend mode has changed to <code class="language-plaintext highlighter-rouge">screen</code> and default glow levels have changed (<a href="https://github.com/godotengine/godot/pull/110671">GH-110671</a> and <a href="https://github.com/godotengine/godot/pull/110077">GH-110077</a>). <ul> <li>Note: Glow blending now occurs before tonemapping and <code class="language-plaintext highlighter-rouge">softlight</code> glow blending has changed to always appear as it did when using HDR 2D on your Viewport.</li> </ul> </li> <li><code class="language-plaintext highlighter-rouge">Quaternion</code> now correctly initializes with identity under <code class="language-plaintext highlighter-rouge">Variant</code> (<a href="https://github.com/godotengine/godot/pull/84658">GH-84658</a>).</li> </ul> <p>If you previously imported 3D assets, we recommend using the project upgrade tool explicitly: <img src="/storage/blog/dev-snapshot-godot-4-6-beta-1/update-tool.jpg" alt="Upgrade Project Files..." /></p> <h3 id="animation">Animation</h3> <p><a href="https://github.com/TokageItLab">Tokage</a> has brought IK support for <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code> via the new class <code class="language-plaintext highlighter-rouge">IKModifier3D</code> (<a href="https://github.com/godotengine/godot/pull/110120">GH-110120</a>). This took the lessons learned from <code class="language-plaintext highlighter-rouge">SkeletonModificationStack3D</code>, a class removed in the 4.0 transition, and reimplemented them in a context that’s up to modern standards. Having to account for so many separate systems resulted in <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code> receiving <strong>8 new subclasses</strong>:</p> <ul> <li><a href="https://docs.godotengine.org/en/latest/classes/class_ikmodifier3d.html"><code class="language-plaintext highlighter-rouge">IKModifier3D</code></a> <ul> <li><a href="https://docs.godotengine.org/en/latest/classes/class_chainik3d.html"><code class="language-plaintext highlighter-rouge">ChainIK3D</code></a> <ul> <li><a href="https://docs.godotengine.org/en/latest/classes/class_iterateik3d.html"><code class="language-plaintext highlighter-rouge">IterateIK3D</code></a> <ul> <li><a href="https://docs.godotengine.org/en/latest/classes/class_ccdik3d.html#class-ccdik3d"><code class="language-plaintext highlighter-rouge">CCDIK3D</code></a></li> <li><a href="https://docs.godotengine.org/en/latest/classes/class_fabrik3d.html#class-fabrik3d"><code class="language-plaintext highlighter-rouge">FABRIK3D</code></a></li> <li><a href="https://docs.godotengine.org/en/latest/classes/class_jacobianik3d.html#class-jacobianik3d"><code class="language-plaintext highlighter-rouge">JacobianIK3D</code></a></li> </ul> </li> <li><a href="https://docs.godotengine.org/en/latest/classes/class_splineik3d.html#class-splineik3d"><code class="language-plaintext highlighter-rouge">SplineIK3D</code></a></li> </ul> </li> <li><a href="https://docs.godotengine.org/en/latest/classes/class_twoboneik3d.html#class-twoboneik3d"><code class="language-plaintext highlighter-rouge">TwoBoneIK3D</code></a></li> </ul> </li> </ul> <p>And more:</p> <ul> <li>Add BoneTwistDisperser3D to propagate IK target’s twist (<a href="https://github.com/godotengine/godot/pull/113284">GH-113284</a>).</li> <li>Add LimitAngularVelocityModifier3D to interpolate deterministic IK (<a href="https://github.com/godotengine/godot/pull/111184">GH-111184</a>).</li> <li>Add option to <code class="language-plaintext highlighter-rouge">BoneConstraint3D</code> to make reference target allow to set <code class="language-plaintext highlighter-rouge">Node3D</code> (<a href="https://github.com/godotengine/godot/pull/110336">GH-110336</a>).</li> <li>Add solo/hide/lock/delete buttons to node groups in bezier track editor (<a href="https://github.com/godotengine/godot/pull/110866">GH-110866</a>).</li> <li>Allow resizing the length of animations by dragging the timeline (<a href="https://github.com/godotengine/godot/pull/110623">GH-110623</a>).</li> <li>Change AnimationLibrary serialization to avoid using Dictionary (<a href="https://github.com/godotengine/godot/pull/110502">GH-110502</a>).</li> </ul> <h3 id="audio--video">Audio / Video</h3> <p><a href="https://github.com/goatchurchprime">Julian Todd</a> added new experimental functions to AudioServer to allow accessing the microphone buffer directly (<a href="https://github.com/godotengine/godot/pull/113288">GH-113288</a>). This allows individual platforms to access the input and output streams in a way that doesn’t assume a uniform rate, something that’s not guaranteed on all devices.</p> <h3 id="core">Core</h3> <p><a href="https://github.com/kisg">Gergely Kis</a>, <a href="https://github.com/konczg">Gábor Koncz</a> and <a href="https://github.com/zorbathut">Ben Rog-Wilhelm</a> have laid out a foundation for building the engine as a standalone library: <code class="language-plaintext highlighter-rouge">LibGodot</code> (<a href="https://github.com/godotengine/godot/pull/110863">GH-110863</a>). Through the new <a href="https://docs.godotengine.org/en/latest/classes/class_godotinstance.html"><code class="language-plaintext highlighter-rouge">GodotInstance</code></a> class, developers now have an entry point for specialized workflows that <em>absolutely require</em> accessing Godot as a library.</p> <p><a href="https://github.com/Ivorforce">Lukas Tenbrink</a> has brought tracing profiler support to Godot (<a href="https://github.com/godotengine/godot/pull/104851">GH-104851</a>). With this, engine developers will no longer need to manually integrate (and constantly re-integrate) profiling logic to the engine, as they are now officially integrated within the build system instead. There is currently support for <a href="https://github.com/wolfpld/tracy">Tracy</a>, <a href="https://perfetto.dev/">Perfetto</a>, and <a href="https://developer.apple.com/documentation/os/recording-performance-data">Apple Instruments’ signposts</a> (<a href="https://github.com/godotengine/godot/pull/113342">GH-113342</a>).</p> <p>As in every version, contributors come together to improve the stability and performance of some of Godot’s most used foundational building blocks — For example, you can expect a decrease of RAM use when opening files (<a href="https://github.com/godotengine/godot/pull/106039">GH-106039</a>), a boost of speed when sorting arrays (<a href="https://github.com/godotengine/godot/pull/113132">GH-113132</a>), accelerated <code class="language-plaintext highlighter-rouge">Object</code> casts (<a href="https://github.com/godotengine/godot/pull/105793">GH-105793</a>), and decreased build time (<a href="https://github.com/godotengine/godot/issues/111218">GH-111218</a>).</p> <p>And more:</p> <ul> <li>Add ‘Find Sequence’ to <code class="language-plaintext highlighter-rouge">Span</code>s, and consolidate negative indexing behavior (<a href="https://github.com/godotengine/godot/pull/104332">GH-104332</a>).</li> <li>Add <code class="language-plaintext highlighter-rouge">change_scene_to_node()</code> (<a href="https://github.com/godotengine/godot/pull/85762">GH-85762</a>).</li> <li>Add <code class="language-plaintext highlighter-rouge">reserve</code> function to <code class="language-plaintext highlighter-rouge">Array</code>, <code class="language-plaintext highlighter-rouge">Vector</code>, and <code class="language-plaintext highlighter-rouge">String</code> (<a href="https://github.com/godotengine/godot/pull/105928">GH-105928</a>).</li> <li>Add ability to get list of Project Settings changed, similar to Editor Settings functionality (<a href="https://github.com/godotengine/godot/pull/110748">GH-110748</a>).</li> <li>Add unique Node IDs to support base and instantiated scene refactorings (<a href="https://github.com/godotengine/godot/pull/106837">GH-106837</a>).</li> <li>Buildsystem: SwiftUI lifecycle for Apple embedded platforms (<a href="https://github.com/godotengine/godot/pull/109974">GH-109974</a>).</li> <li>Export: Add “Show Encryption Key” toggle (<a href="https://github.com/godotengine/godot/pull/106146">GH-106146</a>).</li> <li>Export: Add support for delta encoding to patch PCKs (<a href="https://github.com/godotengine/godot/pull/112011">GH-112011</a>).</li> <li>FileAccess: Implement support for reading and writing extended file attributes/alternate data streams (<a href="https://github.com/godotengine/godot/pull/102232">GH-102232</a>).</li> <li>Handle NaN and Infinity in JSON stringify function (<a href="https://github.com/godotengine/godot/pull/111498">GH-111498</a>).</li> <li>Network: Add Core UNIX domain socket support (<a href="https://github.com/godotengine/godot/pull/107954">GH-107954</a>).</li> </ul> <h3 id="documentation">Documentation</h3> <p><a href="https://github.com/KoBeWi">Tomasz Chabora</a> updated our documentation logic to not expose signals with a leading underscore (<a href="https://github.com/godotengine/godot/pull/112770">GH-112770</a>). Not being exposed in this manner also means that they won’t show up as autocompletion results. This is consistent with how we handle methods, and will remove the need for users to work around bloating their documentation with <code class="language-plaintext highlighter-rouge">add_user_signal()</code>.</p> <h3 id="editor">Editor</h3> <p>The long-time fan-favorite <a href="https://github.com/passivestar/godot-minimal-theme">Godot Minimal Theme</a>, created by <a href="https://github.com/passivestar">passivestar</a>, is now officially integrated as the new default theme for the editor. As a collaborative effort between passivestar and <a href="https://github.com/YeldhamDev">Michael Alexsander</a>, the theme has been brought to a new life under the name “Modern Theme” (<a href="https://github.com/godotengine/godot/pull/111118">GH-111118</a>). The previous style remains available as the “Classic Theme,” and will continue to be supported.</p> <p><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/new-editor-theme.jpg" alt="New editor theme" /></p> <div class="card card-info" style="margin-top: 1em;"> <p>The new theme is still actively iterated upon to iron out some issues and take user feedback into account. If you would like to share your thoughts, you can use <a href="https://github.com/godotengine/godot-proposals/discussions/13829">this GitHub discussion</a> or <a href="https://bsky.app/profile/passivestar.bsky.social/post/3m7ktjuv7qk2s">this Bluesky thread</a>.</p> </div> <p>In a similar vein to the previous point, we’ve applied a similar minimal-style overhaul to the array inspector. This change is inherent to the inspector itself, so the benefits will be shown regardless of which theme is chosen. <a href="https://github.com/dugramen">Koliur Rahman</a> brought us this revamped implementation, trimming away wasted space by consolidating information and logic to their essential elements (<a href="https://github.com/godotengine/godot/pull/103257">GH-103257</a>).</p> <table> <thead> <tr> <th>Old</th> <th>New</th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/array-old.jpg" alt="Array old" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/array-new.jpg" alt="Array new" /></td> </tr> </tbody> </table> <p>Tomasz gave the editor docks a major rework (<a href="https://github.com/godotengine/godot/pull/106503">GH-106503</a>). A new <a href="https://docs.godotengine.org/en/latest/classes/class_editordock.html"><code class="language-plaintext highlighter-rouge">EditorDock</code></a> class was introduced, which is responsible for handling dock appearance and supported dock slots, and makes it easier to switch dock layouts and save their data. <code class="language-plaintext highlighter-rouge">EditorDock</code> inherits <code class="language-plaintext highlighter-rouge">MarginContainer</code> and is supposed to be used as a root node of your docks. Of course all necessary compatibility code was added, so old plugins will still work without any changes.</p> <p>Another important part of this rework came to us from <a href="https://github.com/lodetrick">lodetrick</a>, whereby the bottom panel is now part of the docking system, so all bottom editors are now docks and docks can be freely moved between sides and bottom (<a href="https://github.com/godotengine/godot/pull/108647">GH-108647</a>). Note that most docks don’t support both layouts (yet), but they all can be made floating (except <code class="language-plaintext highlighter-rouge">Debugger</code>), and the persistent docks can be closed. The docking system is planned to be improved further in the future, including a potential rework of main screen editors into docks for further unification.</p> <video autoplay="" loop="" muted="" playsinline="" title="Showcasing the new bottom panel as an `EditorDock`"> <source src="/storage/blog/dev-snapshot-godot-4-6-beta-1/editor-dock-showcase.mp4?1" type="video/mp4" /> </video> <p>The 3D viewport received several long-requested functionality commonly available in modern 3D modeling programs. <a href="https://github.com/ryevdokimov">Robert Yevdokimov</a> added a means of visualizing the current delta angle of a rotation operation, a convenient reference point for adjusting objects in a 3D space. passivestar added orbit-snapping within the viewport itself, enabling more granular positioning and consistent feedback.</p> <video autoplay="" loop="" muted="" playsinline="" title="Rotation accumulation"> <source src="/storage/blog/dev-snapshot-godot-4-6-dev-2/rotation-accumulation.mp4?1" type="video/mp4" /> </video> <video autoplay="" loop="" muted="" playsinline="" title="Rotation snapping"> <source src="/storage/blog/dev-snapshot-godot-4-6-dev-2/rotation-snapping.mp4?1" type="video/mp4" /> </video> <p>And more:</p> <ul> <li>2D: Add support for rotating scene tiles in TileMapLayer (<a href="https://github.com/godotengine/godot/pull/108010">GH-108010</a>).</li> <li>3D: Add Bresenham Line Algorithm to GridMap Drawing (<a href="https://github.com/godotengine/godot/pull/105292">GH-105292</a>).</li> <li>3D: Rename Select Mode to Transform Mode, and create a new Select Mode without transform gizmo (<a href="https://github.com/godotengine/godot/pull/101168">GH-101168</a>).</li> <li>Add an ObjectDB Profiling Tool (<a href="https://github.com/godotengine/godot/pull/97210">GH-97210</a>).</li> <li>Add Create Resource Hotkey (<a href="https://github.com/godotengine/godot/pull/110641">GH-110641</a>).</li> <li>Add drag and drop export variables (<a href="https://github.com/godotengine/godot/pull/106341">GH-106341</a>).</li> <li>Add game speed controls to the embedded game window (<a href="https://github.com/godotengine/godot/pull/107273">GH-107273</a>).</li> <li>Add indicator to linked resources (<a href="https://github.com/godotengine/godot/pull/109458">GH-109458</a>).</li> <li>Add switch on hover to TabBar (<a href="https://github.com/godotengine/godot/pull/103478">GH-103478</a>).</li> <li>Add tab menu button to list currently opened scenes (<a href="https://github.com/godotengine/godot/pull/108079">GH-108079</a>).</li> <li>Allow drag setting flags in layers property editor (<a href="https://github.com/godotengine/godot/pull/112174">GH-112174</a>).</li> <li>Allow editing editor settings from project manager (<a href="https://github.com/godotengine/godot/pull/82212">GH-82212</a>).</li> <li>Allow editing groups on multiple nodes (<a href="https://github.com/godotengine/godot/pull/112729">GH-112729</a>).</li> <li>Allow fixing indirect missing dependencies manually (<a href="https://github.com/godotengine/godot/pull/112187">GH-112187</a>).</li> <li>Allow Quick Open dialog to preview change in scene (<a href="https://github.com/godotengine/godot/pull/106947">GH-106947</a>).</li> <li>Automatically open newly created script (<a href="https://github.com/godotengine/godot/pull/108342">GH-108342</a>).</li> <li>Make file part of errors/warnings clickable in Output panel (<a href="https://github.com/godotengine/godot/pull/108473">GH-108473</a>).</li> <li>Move script name to top (<a href="https://github.com/godotengine/godot/pull/86468">GH-86468</a>).</li> <li>Open source code errors in external editor (<a href="https://github.com/godotengine/godot/pull/111805">GH-111805</a>).</li> <li>Show a warning toast when saving a large text-based scene (<a href="https://github.com/godotengine/godot/pull/53679">GH-53679</a>).</li> </ul> <h3 id="gdextension">GDExtension</h3> <p>Through a collaborative effort between <a href="https://github.com/dsnopek">David Snopek</a> and <a href="https://github.com/repiteo">Thaddeus Crews</a>, it’s now possible to declare <code class="language-plaintext highlighter-rouge">Object</code> types as “required” (<a href="https://github.com/godotengine/godot/pull/86079">GH-86079</a>). This information is passed as GDExtension metadata, meaning that nullable-aware languages no longer need to assume that <em>every</em> <code class="language-plaintext highlighter-rouge">Object</code> class is inherently optional. This implementation does not break compatibility, as it still passes/receives the same data under the hood.</p> <p>David has also changed the canonical source-of-truth for GDExtension from a C header (<code class="language-plaintext highlighter-rouge">gdextension_interface.h</code>) to JSON (<code class="language-plaintext highlighter-rouge">gdextension_interface.json</code>) (<a href="https://github.com/godotengine/godot/pull/107845">GH-107845</a>). This simplifies the GDExtension workflow, and allows additional information to be included in the interface. For example, GDExtension bindings will now be able to declare builtin functions as deprecated to GDExtension programmers (<a href="https://github.com/godotengine/godot/pull/112290">GH-112290</a>).</p> <h3 id="gdscript">GDScript</h3> <p>Lukas continued his dedicated profiler integration by collaborating with <a href="https://github.com/enetheru">Samuel Nicholas</a> to bring native support to GDScript (<a href="https://github.com/godotengine/godot/pull/113279">GH-113279</a>). While currently limited to tracy, this is a major first step in allowing dedicated profilers to be a universal solution for debugging performance. If you’re eager to try this yourself, you can find <a href="https://docs.godotengine.org/en/latest/engine_details/development/debugging/using_cpp_profilers.html">instructions for it</a> in our docs already, contributed by David.</p> <p>And more:</p> <ul> <li>Add <code class="language-plaintext highlighter-rouge">debug/gdscript/warnings/directory_rules</code> project setting (<a href="https://github.com/godotengine/godot/pull/93889">GH-93889</a>).</li> <li>Add opt-in GDScript warning for when calling coroutine without <code class="language-plaintext highlighter-rouge">await</code> (<a href="https://github.com/godotengine/godot/pull/107936">GH-107936</a>).</li> <li>Add step out to script debugger (<a href="https://github.com/godotengine/godot/pull/97758">GH-97758</a>).</li> <li>Add string placeholder syntax highlighting (<a href="https://github.com/godotengine/godot/pull/112575">GH-112575</a>).</li> <li>Elide unnecessary copies in <code class="language-plaintext highlighter-rouge">CONSTRUCT_TYPED_*</code> opcodes (<a href="https://github.com/godotengine/godot/pull/110717">GH-110717</a>).</li> <li>GDScript LSP: Rework and extend BBCode to markdown docstring conversion (<a href="https://github.com/godotengine/godot/pull/113099">GH-113099</a>).</li> <li>Prevent shallow scripts from leaking into the <code class="language-plaintext highlighter-rouge">ResourceCache</code> (<a href="https://github.com/godotengine/godot/pull/109345">GH-109345</a>).</li> </ul> <h3 id="gui">GUI</h3> <p>Michael has brought another new addition: the focus state logic for mouse and touch is now decoupled from keyboard and joypad (<a href="https://github.com/godotengine/godot/pull/110250">GH-110250</a>). As we mentioned in the <a href="/article/dev-snapshot-godot-4-6-dev-1/">4.6 dev 1 blog post</a>, it’s not uncommon for systems to deliberately stylize these two input groups separately, enabling granular control for toolmakers and UI designers. <code class="language-plaintext highlighter-rouge">Control</code>s that support keyboard input (<code class="language-plaintext highlighter-rouge">LineEdit</code>, <code class="language-plaintext highlighter-rouge">TextEdit</code>, etc.) will show focus by default in a running project.</p> <table> <thead> <tr> <th>Situation</th> <th> </th> </tr> </thead> <tbody> <tr> <td>Clicking a <code class="language-plaintext highlighter-rouge">Control</code> with the mouse, giving it focus.</td> <td>❌</td> </tr> <tr> <td>Successfully switching focus via keyboard/joypad actions.</td> <td>✔️</td> </tr> <tr> <td>Attempting to switch focus via keyboard/joypad actions but still remaining on the same <code class="language-plaintext highlighter-rouge">Control</code>.</td> <td>✔️</td> </tr> <tr> <td>Clicking somewhere with the mouse while having a <code class="language-plaintext highlighter-rouge">Control</code> with visible focus.</td> <td>❌</td> </tr> <tr> <td>Clicking with the mouse a visibly focused <code class="language-plaintext highlighter-rouge">Control</code> (deviates from how it works in browsers).</td> <td>❌</td> </tr> <tr> <td>Using <code class="language-plaintext highlighter-rouge">Control.grab_focus(true)</code>.</td> <td>❌</td> </tr> </tbody> </table> <div class="card card-info" style="margin-top: 1em;"> <p>The previous behavior can be achieved by enabling <code class="language-plaintext highlighter-rouge">gui/common/always_show_focus_state</code>.</p> </div> <p>And more:</p> <ul> <li>Add <code class="language-plaintext highlighter-rouge">pivot_offset_ratio</code> property to Control (<a href="https://github.com/godotengine/godot/pull/70646">GH-70646</a>).</li> <li>Add scroll hints to <code class="language-plaintext highlighter-rouge">ScrollContainer</code> and <code class="language-plaintext highlighter-rouge">Tree</code> (<a href="https://github.com/godotengine/godot/pull/112491">GH-112491</a>). <ul> <li><code class="language-plaintext highlighter-rouge">ItemList</code> also supports scroll hints as of <a href="https://github.com/godotengine/godot/pull/113574">GH-113574</a>.</li> </ul> </li> <li>Allow customization of TabContainer tabs in editor (<a href="https://github.com/godotengine/godot/pull/58749">GH-58749</a>).</li> <li>Optimize CPU text shaping (<a href="https://github.com/godotengine/godot/pull/109516">GH-109516</a>).</li> <li>Separate Node editor dock (<a href="https://github.com/godotengine/godot/pull/101787">GH-101787</a>).</li> <li>Speed up very large <code class="language-plaintext highlighter-rouge">Trees</code> (<a href="https://github.com/godotengine/godot/pull/109512">GH-109512</a>).</li> <li>Visualize MarginContainer margins when selected (<a href="https://github.com/godotengine/godot/pull/111095">GH-111095</a>).</li> </ul> <h3 id="import">Import</h3> <p><a href="https://github.com/zeux">Arseny Kapoulkine</a> has addressed a previous shortcoming of our mesh simplifier by ensuring the components <em>themselves</em> are simplified alongside collapsing edges (<a href="https://github.com/godotengine/godot/pull/110028">GH-110028</a>). This enables topologically complex sections of a larger mesh to more easily reach the desired <abbr title="Level of Detail">LOD</abbr> target.</p> <p><img src="/storage/blog/dev-snapshot-godot-4-6-dev-2/mesh-component-prune.jpg" alt="Pruned components in simplified mesh" /></p> <p>And more:</p> <ul> <li>Betsy: Convert RGB to RGBA on the GPU for faster compression (<a href="https://github.com/godotengine/godot/pull/110060">GH-110060</a>).</li> <li>OBJ importer: Support bump multiplier (normal scale) (<a href="https://github.com/godotengine/godot/pull/110925">GH-110925</a>).</li> <li>Switch LOD generation to use iterative simplification (<a href="https://github.com/godotengine/godot/pull/110027">GH-110027</a>).</li> </ul> <h3 id="input">Input</h3> <p><a href="https://github.com/Nintorch">Nintorch</a>, the contributor responsible for migrating our input system to SDL3, has laid the foundation for advanced joypad features in Godot (<a href="https://github.com/godotengine/godot/pull/111707">GH-111707</a>). The only functionality this enables at this time is the customization of LED light colors (<a href="https://github.com/godotengine/godot/pull/111681">GH-111681</a>), but he’s already created additional PRs that will implement support for <a href="https://github.com/godotengine/godot/pull/111679">motion sensors</a>, <a href="https://github.com/godotengine/godot/pull/111682">adaptive triggers, and custom data packets</a>, which is only scratching the surface of possible functionality in future releases.</p> <p>And more:</p> <ul> <li>Add ability to add new EditorSettings shortcuts (<a href="https://github.com/godotengine/godot/pull/102889">GH-102889</a>).</li> </ul> <h3 id="internationalization">Internationalization</h3> <p><a href="https://github.com/timothyqiu">Haoyu Qiu</a> saw to the improvement of CSV translations (<a href="https://github.com/godotengine/godot/pull/112073">GH-112073</a>). This introduces support for optional <code class="language-plaintext highlighter-rouge">?context</code> and <code class="language-plaintext highlighter-rouge">?plural</code> columns, where the former passes crucial information to translators, while the latter declares plural equivalents to sentences. Plurals can be further expanded via <code class="language-plaintext highlighter-rouge">?pluralrule</code>, which allows for further customization of languages with more complex plural specifications.</p> <table> <thead> <tr> <th>en</th> <th>?context</th> <th>fr</th> <th>ru</th> <th>zh</th> </tr> </thead> <tbody> <tr> <td>Letter</td> <td>Alphabet</td> <td>Lettre</td> <td>Буква</td> <td>字母</td> </tr> <tr> <td>Letter</td> <td>Message</td> <td>Courrier</td> <td>Письмо</td> <td>信件</td> </tr> </tbody> </table> <pre><code class="language-csv">en,?context,fr,ru,ja,zh Letter,Alphabet,Lettre,Буква,字母,字母 Letter,Message,Courrier,Письмо,手紙,信件 </code></pre> <table> <thead> <tr> <th>en</th> <th>?plural</th> <th>fr</th> <th>ru</th> <th>zh</th> </tr> </thead> <tbody> <tr> <td>?pluralrule</td> <td> </td> <td>nplurals=2; plural=(n &gt;= 2);</td> <td> </td> <td> </td> </tr> <tr> <td>There is %d apple</td> <td>There are %d apples</td> <td>Il y a %d pomme</td> <td>Есть %d яблоко</td> <td>那里有%d个苹果</td> </tr> <tr> <td> </td> <td> </td> <td>Il y a %d pommes</td> <td>Есть %d яблока</td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td>Есть %d яблок</td> <td> </td> </tr> </tbody> </table> <pre><code class="language-csv">en,?plural,fr,ru,ja,zh ?pluralrule,,nplurals=2; plural=(n &gt;= 2);,, There is %d apple,There are %d apples,Il y a %d pomme,Есть %d яблоко,リンゴが%d個あります,那里有%d个苹果 ,,Il y a %d pommes,Есть %d яблока,, ,,,Есть %d яблок,, </code></pre> <p><a href="https://github.com/shitake2333">stark233</a> brought proper translation parser support to C# scripts (<a href="https://github.com/godotengine/godot/pull/99195">GH-99195</a>). Now internationalization string collections will have the same functionality as GDScript, alongside native integration with GodotTools.</p> <p>And more:</p> <ul> <li>Add CSV translation template generation (<a href="https://github.com/godotengine/godot/pull/112149">GH-112149</a>).</li> <li>Make editor language setting default to Auto (<a href="https://github.com/godotengine/godot/pull/112317">GH-112317</a>).</li> </ul> <h3 id="navigation">Navigation</h3> <p><a href="https://github.com/smix8">smix8</a> has opened the door to engine backend selection for <code class="language-plaintext highlighter-rouge">NavigationServer</code>s (<a href="https://github.com/godotengine/godot/pull/106290">GH-106290</a>). While Godot doesn’t have additional navigation backends at this time, this does grant users a way to effectively disable the servers entirely via <code class="language-plaintext highlighter-rouge">Dummy</code>, removing the need to recompile the engine entirely for games that don’t require navigation systems for 2D and/or 3D.</p> <h3 id="physics">Physics</h3> <p><a href="https://github.com/mihe">Mikael Hermansso</a> has done an absolutely phenomenal job with integrating Jolt as a first-class physics system for Godot. It’s now at the point where we can confidently remove its experimental label (<a href="https://github.com/godotengine/godot/pull/111115">GH-111115</a>) and select it as the default for any newly-created projects (<a href="https://github.com/godotengine/godot/pull/105737">GH-105737</a>). This does not apply retroactively, but any projects made from this point on will be using Jolt out-of-the-box.</p> <p>And more:</p> <ul> <li>Add MeshInstance3D primitive conversion options (<a href="https://github.com/godotengine/godot/pull/101521">GH-101521</a>).</li> <li>Add MultiMesh physics interpolation for 2D transforms (MultiMeshInstance2D) (<a href="https://github.com/godotengine/godot/pull/107666">GH-107666</a>).</li> </ul> <h3 id="platforms">Platforms</h3> <h4 id="android">Android</h4> <p><a href="https://github.com/syntaxerror247">Anish Kumar</a> took to the implementation of Storage Access Framework (SAF) support (<a href="https://github.com/godotengine/godot/pull/112215">GH-112215</a>). Previously, accessing non-media files on external storage required the <code class="language-plaintext highlighter-rouge">MANAGE_EXTERNAL_STORAGE</code> permission, which is very broad and discouraged by Google. Now, projects can access files through the system’s file picker instead, and this method doesn’t require any permissions at all!</p> <p>Thanks to the efforts of <a href="https://github.com/dsnopek">David Snopek</a> and <a href="https://github.com/devloglogan">Logan Lang</a>, Godot is now able to initiate Gradle builds on Android (<a href="https://github.com/godotengine/godot/pull/111732">GH-111732</a>). By sending commands to a companion app that provides a full Linux-like build environment to run Gradle, Godot itself remains lightweight while keeping setup easy by including everything you need within the companion app.</p> <p>And more:</p> <ul> <li>Editor: Add game speed control options in game menu bar (<a href="https://github.com/godotengine/godot/pull/111296">GH-111296</a>).</li> <li>Editor: Adjust script editor size for virtual keyboard (<a href="https://github.com/godotengine/godot/pull/112766">GH-112766</a>).</li> <li>Editor: Persist fullscreen setting (<a href="https://github.com/godotengine/godot/pull/112246">GH-112246</a>).</li> <li>Export: Add export option to use “scrcpy” to run project from editor (<a href="https://github.com/godotengine/godot/pull/108737">GH-108737</a>).</li> <li>Tests: Add Android instrumented tests to the <code class="language-plaintext highlighter-rouge">app</code> module (<a href="https://github.com/godotengine/godot/pull/110829">GH-110829</a>).</li> </ul> <h4 id="linux">Linux</h4> <p><a href="https://github.com/deralmas">Deralmas</a> has continued on their quest to make Wayland a first-class window protocol with the exciting introduction of game embedding (<a href="https://github.com/godotengine/godot/pull/107435">GH-107435</a>). This was one of the final major roadblocks that kept us from confidently declaring Wayland’s feature-parity with X11, and neatly rounds out the last major holdout towards embedded-window support across all major platforms.</p> <p>And more:</p> <ul> <li>Wayland: Implement the xdg-toplevel-icon-v1 protocol (<a href="https://github.com/godotengine/godot/pull/107096">GH-107096</a>).</li> </ul> <h4 id="windows">Windows</h4> <p><a href="https://github.com/blueskythlikesclouds">Skyth</a> was tasked by the Godot Foundation to bring Direct3D 12 to feature and stability parity with Vulkan, so that we could make it the default RenderingDevice driver on Windows (<a href="https://github.com/godotengine/godot/pull/113213">GH-113213</a>). As a result, Windows users can safely sidestep issues with comparatively outdated Vulkan drivers, as Direct3D 12 is the mainstay renderer for modern programs and API kits.</p> <p>And more:</p> <ul> <li>Fix EnumDevices stall using IAT hooks (<a href="https://github.com/godotengine/godot/pull/113013">GH-113013</a>).</li> </ul> <h3 id="rendering-and-shaders">Rendering and shaders</h3> <p><a href="https://github.com/allenwp">Allen Pestaluky</a> has been hard at work implementing features which will allow Godot to take full advantage of <abbr title="High dynamic range"><a href="https://en.wikipedia.org/wiki/High_dynamic_range">HDR</a></abbr>. Luckily for those stuck with <abbr title="Standard RGB"><a href="https://en.wikipedia.org/wiki/SRGB">sRGB</a></abbr> displays, his efforts have been in the form of visual quality improvements for everyone! Perhaps his most obvious improvement was a result of modifying blend glow to occur before tonemapping and changing the default blend mode behavior to <code class="language-plaintext highlighter-rouge">screen</code> (<a href="https://github.com/godotengine/godot/pull/110671">GH-110671</a>).</p> <table> <thead> <tr> <th>Before PR (glow after tonemapping)</th> <th>After PR (glow before tonemapping)</th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-beta-1/glow-old.webp" alt="After tonemapping (screen, AgX, 16.29 white)" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-beta-1/glow-new.webp" alt="Before tonemapping (screen, AgX, 16.29 white)" /></td> </tr> </tbody> </table> <p>But you’ve already seen this if you’ve been keeping up with our previous development snapshots. What we <em>haven’t</em> had the chance to showcase is the addition of <code class="language-plaintext highlighter-rouge">white</code>, <code class="language-plaintext highlighter-rouge">constrast</code>, and future HDR support for the AgX tonemapper (<a href="https://github.com/godotengine/godot/pull/106940">GH-106940</a>). Allen once again has brought us exciting new visual possibilities with this functionality, as this allows for the hue of bright colors to be more consistent, even at higher contrasts. Crucially, the new changes <strong>do not break compatibility</strong> with existing 4.4 and 4.5 projects, as the new curves this system provides were setup such that their visuals are in-line with the old AgX approximations.</p> <p>Scenes using glow or the AgX tonemapper will see improvements to the overall visual quality.</p> <table> <thead> <tr> <th>AgX default contrast</th> <th>AgX contrast of <code class="language-plaintext highlighter-rouge">1.53</code></th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-beta-1/agx-contrast-default.webp" alt="AgX default contrast" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-beta-1/agx-contrast-alt.webp" alt="AgX contrast of 1.53" /></td> </tr> </tbody> </table> <table> <thead> <tr> <th>Before</th> <th>After</th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-beta-1/agx-tonemapper-old.webp" alt="AgX tonemapper before" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-beta-1/agx-tonemapper-new.webp" alt="AgX tonemapper after" /></td> </tr> </tbody> </table> <p>Skyth overhauled our screen space reflection logic, resulting in higher quality visuals at a reduced performance cost (<a href="https://github.com/godotengine/godot/pull/111210">GH-111210</a>). We feel that the results speak for themselves.</p> <table> <thead> <tr> <th>64 Max Steps (old)</th> <th>64 Max Steps (new - half) (half)</th> <th>64 Max Steps (new - full)</th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/64-max-steps-old.jpg" alt="64 max steps old" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/64-max-steps-new-half.jpg" alt="64 max steps new (half)" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/64-max-steps-new-full.jpg" alt="64 max steps new (full)" /></td> </tr> </tbody> </table> <table> <thead> <tr> <th>256 Max Steps (old)</th> <th>256 Max Steps (new - half)</th> <th>256 Max Steps (new - full)</th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/256-max-steps-old.jpg" alt="256 max steps old" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/256-max-steps-new-half.jpg" alt="256 max steps new (half)" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/256-max-steps-new-full.jpg" alt="256 max steps new (full)" /></td> </tr> </tbody> </table> <table> <thead> <tr> <th>Roughness (old)</th> <th>Roughness (new)</th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/roughness-old.jpg" alt="Roughness old" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/roughness-new.jpg" alt="Roughness new" /></td> </tr> </tbody> </table> <table> <thead> <tr> <th>Metallic surface (old)</th> <th>Metallic surface (new - half)</th> <th>Metallic surface (new - full)</th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/metallic-surface-old.jpg" alt="Metallic surface old" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/metallic-surface-new-half.jpg" alt="Metallic surface new (half)" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/metallic-surface-new-full.jpg" alt="Metallic surface new (full)" /></td> </tr> </tbody> </table> <p>It’s not all 3D improvements though, as <a href="https://github.com/stuartcarnie">Stuart Carnie</a> overhauled the design of our 2D renderer to reduce the GPU performance cost when batching (<a href="https://github.com/godotengine/godot/pull/112481">GH-112481</a>). This resulted in better performance across all devices (in GPU-bound scenarios), producing speeds ranging from 1.1x to 7x as fast. The actual benchmarks and more technical details are available in the associated pull request.</p> <p>And more:</p> <ul> <li>Add methods to draw ellipses (<a href="https://github.com/godotengine/godot/pull/85080">GH-85080</a>).</li> <li>Apply viewport oversampling to Polygon2D (<a href="https://github.com/godotengine/godot/pull/112352">GH-112352</a>).</li> <li>Implement a very simple SSAO in GLES3 (<a href="https://github.com/godotengine/godot/pull/109447">GH-109447</a>).</li> <li>Implement motion vectors in compatibility renderer (<a href="https://github.com/godotengine/godot/pull/97151">GH-97151</a>).</li> <li>Overhaul and optimize Glow in the mobile renderer (<a href="https://github.com/godotengine/godot/pull/110077">GH-110077</a>).</li> <li>Rewrite Radiance and Reflection probes to use Octahedral maps (<a href="https://github.com/godotengine/godot/pull/107902">GH-107902</a>).</li> <li>TAA adjustment to reduce ghosting (<a href="https://github.com/godotengine/godot/pull/112196">GH-112196</a>).</li> </ul> <h3 id="xr">XR</h3> <p><a href="https://github.com/BastiaanOlij">Bastiaan Olij</a> has brought native support for OpenXR 1.1 to Godot, which will automatically enable OpenXR 1.1 features on devices that support it (<a href="https://github.com/godotengine/godot/pull/109302">GH-109302</a>). This comes with a compatibility layer to make this as transparent as possible for developers who want to deploy their games both to headsets that support OpenXR 1.1, and those that only support OpenXR 1.0.</p> <p>Bastiaan additionally implemented support for <a href="https://www.khronos.org/blog/openxr-spatial-entities-extensions-released-for-developer-feedback">OpenXR Spatial Entities Extensions</a>, introduced to standardize obtaining and interacting with information about the user’s real world environment (<a href="https://github.com/godotengine/godot/pull/107391">GH-107391</a>). This brings support for <a href="https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XR_EXT_spatial_anchor">spatial anchors</a>, <a href="https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XR_EXT_spatial_plane_tracking">plane tracking</a>, and <a href="https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XR_EXT_spatial_marker_tracking">marker tracking</a> in a consistent and platform-independent manner. If you have the necessary equipment for it, Bastiaan has provided a <a href="https://github.com/BastiaanOlij/spatial-entities-demo">demo project</a> to showcase this new functionality.</p> <p><a href="https://github.com/dhoverb">David Hover</a> took to supporting the extensions for offsetting density maps (<a href="https://github.com/godotengine/godot/pull/112888">GH-112888</a>). This is a key feature enabling eye-tracked foveated rendering on devices that support this method. Currently, this has been tested on Meta Quest Pro and Samsung Galaxy XR headsets, but other headsets are expected to benefit from this change as well.</p> <p>David added support for the <code class="language-plaintext highlighter-rouge">XR_KHR_android_thread_settings</code> extension, which informs the XR runtime about threads used for rendering, game logic, or other purposes (<a href="https://github.com/godotengine/godot/pull/112889">GH-112889</a>). This allows for better thread prioritization on AOSP devices that implement this extension.</p> <p>And more:</p> <ul> <li>Add support for Android XR devices to the Godot XR Editor (<a href="https://github.com/godotengine/godot/pull/112777">GH-112777</a>).</li> <li>OpenXR: Add core support for Khronos loader (<a href="https://github.com/godotengine/godot/pull/106891">GH-106891</a>).</li> <li>OpenXR: Add support for frame synthesis (<a href="https://github.com/godotengine/godot/pull/109803">GH-109803</a>).</li> <li>OpenXR: Add Valve Steam Frame controller support (<a href="https://github.com/godotengine/godot/pull/113785">GH-113785</a>).</li> </ul> <h2 id="changelog">Changelog</h2> <p><strong>328 contributors</strong> submitted <strong>1483 fixes</strong> since the release of 4.5-stable. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6"><strong>interactive changelog</strong></a> for the complete list of changes. You can also review <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6-beta1">changes since the 4.6-dev6 snapshot</a>, for a more curated selection of <strong>52 fixes</strong> from <strong>29 contributors</strong>.</p> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/d743736f84fb668bcdfb5bf86258e483f35c6fec"><code class="language-plaintext highlighter-rouge">d743736f8</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.6-beta1"> Download Godot 4.6 beta1 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-6-beta-1.jpg" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=beta1&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=beta1&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=beta1&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=beta1&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=beta1&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=beta1&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.6-beta1"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript and GDExtension.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript and GDExtension.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <p>During the beta stage, we focus on solving both regressions (i.e. something that worked in a previous release is now broken) and significant new bugs introduced by new features. You can have a look at our current <a href="https://github.com/orgs/godotengine/projects/61">list of regressions and significant issues</a> which we aim to address before releasing 4.6. This list is dynamic and will be updated if we discover new showstopping issues after more users start testing the beta snapshots.</p> <p>With every release, we accept that there are going to be various issues which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug">known bugs</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open-source game engine developed by hundreds of contributors in their free time, as well as a handful of part and full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by <a href="https://godot.foundation/">Godot Foundation</a>. There are also several <a href="/donate">alternative ways to donate</a> which you may find more suitable.</p> <p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p>Thaddeus CrewsDev snapshot: Godot 4.6 dev 62025-12-05T12:00:00+00:00https://godotengine.org/article/dev-snapshot-godot-4-6-dev-6/Feature freeze is here; time for one last round-up!<p>Woah, two development snapshots in the same week? Indeed, we’re gonna be handling the transition to the beta stage a little differently this time around.</p> <p>During the development pipeline of Godot 4.x, we developed a bit of a bad habit by starting the feature freeze AT the first beta release. While not <em>inherently</em> bad, this did lead to somewhat bloated blog posts that had to juggle both newly-added features and the more general feature roundup for the release as a whole. So while this format may work for some organizations, we’re trying something new by implementing the feature freeze preemptively. As of this moment: Godot 4.6 is in feature freeze, and dev 6 will be our final development snapshot.</p> <p>A big benefit of this is the ability to isolate the big additions and fixes for the final new features that made it over the finish line in time. So while this will be a smaller roundup than usual, there’s still plenty of exciting additions we’re eager to showcase.</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/4.6.dev6/"><strong>Web editor</strong></a>, the <a href="https://www.meta.com/s/3yJ7i8kop"><strong>XR editor</strong></a>, or the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4"><strong>Android editor</strong></a> for this release. If you are interested in the latter, please request to join <a href="https://groups.google.com/g/godot-testers">our testing group</a> to get access to pre-release builds.</p> <hr /> <p><em>The cover illustration is from</em> <a href="https://store.steampowered.com/app/3167260/WAR_RATS_The_Rat_em_Up/?curator_clanid=41324400"><strong>WAR RATS: The Rat em Up</strong></a>, <em>a tactical shoot ‘em up, where you lead your fearless troops in the Great Rat War against the onslaught of the TechnoRat legion. You can get the game on <a href="https://store.steampowered.com/app/3167260/WAR_RATS_The_Rat_em_Up/?curator_clanid=41324400">Steam</a>, and check out the developers on <a href="https://twitter.com/wootusart">Twitter</a> or <a href="https://www.instagram.com/wootusart/">Instagram</a>!</em></p> <h2 id="highlights">Highlights</h2> <h3 id="gdscript-tracy-profiler-support">GDScript: Tracy profiler support</h3> <p>In the 4.6 dev 4 blog post, we had a section featuring <a href="/article/dev-snapshot-godot-4-6-dev-4/#buildsystem-support-dedicated-profilers">dedicated profiler support</a>. That section was written for more technical users that were already familiar with how dedicated profilers operated, so it focused on their immediate benefit of profiling the C++ code of the Godot Engine itself. In hindsight, we could’ve expanded it to be more readable for the average user, as this system had the potential to expand to profiling well beyond our system internals. It was ultimately considered superfluous, as no such integrations existed, and implementing them in a handful of weeks before feature freeze was extremely unlikely.</p> <p>…You read the header, you know where this is going. <a href="https://github.com/Ivorforce">Lukas Tenbrink</a>, the original implementer of dedicated profiler support, collaborated with <a href="https://github.com/enetheru">enetheru</a> to bring this native support to GDScript (<a href="https://github.com/godotengine/godot/pull/113279">GH-113279</a>)! While currently limited to tracy, this is a major first step in allowing these dedicated profilers to be a universal solution for debugging performance.</p> <p>Documentation on how to utilize these native profilers yourself will soon be available <a href="https://docs.godotengine.org/en/latest/engine_details/development/debugging/using_cpp_profilers.html">here</a> (currently <a href="https://github.com/godotengine/godot-docs/pull/11484">in PR form</a>).</p> <h3 id="android-storage-access-framework-support">Android: Storage Access Framework support</h3> <p>Godot apps on Android have this unfortunate hurdle of effectively requiring the <code class="language-plaintext highlighter-rouge">MANAGE_EXTERNAL_STORAGE</code> permission. Without it, users were limited to files within the Documents/Download directories that the app itself created. Despite other scoped permissions being available for media files (<code class="language-plaintext highlighter-rouge">READ_MEDIA_IMAGES</code>, <code class="language-plaintext highlighter-rouge">READ_MEDIA_AUDIO</code>, and <code class="language-plaintext highlighter-rouge">READ_MEDIA_VIDEO</code>), non-media files (<code class="language-plaintext highlighter-rouge">.txt</code>, <code class="language-plaintext highlighter-rouge">.json</code>, etc) still required the special <code class="language-plaintext highlighter-rouge">MANAGE_EXTERNAL_STORAGE</code> permission. While workarounds did exist, the best solution would be one that sidesteps the issue entirely.</p> <p><a href="https://github.com/syntaxerror247">syntaxerror247</a> has brought a solution in the form of implementing full Storage Access Framework (SAF) support (<a href="https://github.com/godotengine/godot/pull/112215">GH-112215</a>). With the addition of SAF, users are now free to open and save files from any directory with the system file picker. Because the system itself handles the logic for permissions, the app no longer needs to concern itself with requesting explicit permissions from the end-user.</p> <h3 id="and-more">And more!</h3> <p>There are too many exciting changes to list them all here, but here’s a curated selection:</p> <ul> <li>Animation: Add BoneTwistDisperser3D to propagate IK target’s twist (<a href="https://github.com/godotengine/godot/pull/113284">GH-113284</a>).</li> <li>Animation: Add solo/hide/lock/delete buttons to node groups in bezier track editor (<a href="https://github.com/godotengine/godot/pull/110866">GH-110866</a>).</li> <li>Audio: AudioServer to have function to access microphone buffer directly (<a href="https://github.com/godotengine/godot/pull/113288">GH-113288</a>).</li> <li>Core: Add Apple Instruments support (<a href="https://github.com/godotengine/godot/pull/113342">GH-113342</a>).</li> <li>Core: Reuse/optimize common <code class="language-plaintext highlighter-rouge">OperatorEvaluator*::evaluate</code> logic (<a href="https://github.com/godotengine/godot/pull/113132">GH-113132</a>).</li> <li>GDScript: Prevent shallow scripts from leaking into the <code class="language-plaintext highlighter-rouge">ResourceCache</code> (<a href="https://github.com/godotengine/godot/pull/109345">GH-109345</a>).</li> <li>GUI: Add scroll hints to <code class="language-plaintext highlighter-rouge">ScrollContainer</code> and <code class="language-plaintext highlighter-rouge">Tree</code> (<a href="https://github.com/godotengine/godot/pull/112491">GH-112491</a>).</li> <li>GUI: Make EditorFileDialog inherit FileDialog (<a href="https://github.com/godotengine/godot/pull/111212">GH-111212</a>).</li> <li>Rendering: Add <code class="language-plaintext highlighter-rouge">white</code>, <code class="language-plaintext highlighter-rouge">contrast</code>, and future HDR support to the AgX tonemapper (<a href="https://github.com/godotengine/godot/pull/106940">GH-106940</a>).</li> <li>Rendering: Implement point size emulation in the forward shader for D3D12 (<a href="https://github.com/godotengine/godot/pull/112191">GH-112191</a>).</li> <li>Rendering: Rewrite Radiance and Reflection probes to use Octahedral maps (<a href="https://github.com/godotengine/godot/pull/107902">GH-107902</a>).</li> <li>Rendering: Use re-spirv in the Vulkan driver to optimize shaders (<a href="https://github.com/godotengine/godot/pull/111452">GH-111452</a>).</li> </ul> <h2 id="changelog">Changelog</h2> <p><strong>67 contributors</strong> submitted <strong>140 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6-dev6"><strong>interactive changelog</strong></a> for the complete list of changes since <a href="/article/dev-snapshot-godot-4-6-dev-5/">4.6-dev5</a>. You can also review <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6">all changes included in 4.6</a> compared to the previous <a href="/releases/4.5/">4.5 feature release</a>.</p> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/dec5a373d97cbadce5e1fabe6095ae9957ff3aa6"><code class="language-plaintext highlighter-rouge">dec5a373d</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.6-dev6"> Download Godot 4.6 dev6 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-6-dev-6.jpg" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev6&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev6&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev6&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev6&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev6&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev6&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.6-dev6"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript and GDExtension.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript and GDExtension.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <p>With every release we accept that there are going to be various issues, which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug">known bugs</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part and full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by <a href="https://godot.foundation/">Godot Foundation</a>. There are also several <a href="/donate">alternative ways to donate</a> which you may find more suitable.</p> <p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p>Thaddeus CrewsDev snapshot: Godot 4.6 dev 52025-12-01T12:00:00+00:00https://godotengine.org/article/dev-snapshot-godot-4-6-dev-5/A chill rises… Feature freeze is imminent<p>As the Northern Hemisphere’s days get shorter and colder, we get closer to our much anticipated feature freeze. Dev 5 is jam-packed with new features and enhancements as contributors try to finish off their big contributions before we hit the feature freeze and Beta 1 shortly after. As a reminder, feature freeze is the period where we stop merging anything except for bug fixes as we shift our focus to polishing the existing code in preparation for release. We plan on entering our feature freeze on December 3 and only releasing one more dev snapshot before entering the Beta phase.</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/4.6.dev5/"><strong>Web editor</strong></a>, the <a href="https://www.meta.com/s/3yJ7i8kop"><strong>XR editor</strong></a>, or the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4"><strong>Android editor</strong></a> for this release. If you are interested in the latter, please request to join <a href="https://groups.google.com/g/godot-testers">our testing group</a> to get access to pre-release builds.</p> <hr /> <p><em>The cover illustration is from</em> <a href="https://store.steampowered.com/app/2159270/Kingdoms_of_the_Dump/?curator_clanid=41324400"><strong>Kingdoms of the Dump</strong></a>, <em>a SNES-inspired JRPG where Trash Can Knight, a trash can knight, guides their party through a fantasy world of garbage. You can get the game on <a href="https://store.steampowered.com/app/2159270/Kingdoms_of_the_Dump/?curator_clanid=41324400">Steam</a>, and check out the developer websites for <a href="https://kingdomsofthedump.com/">Roach Games</a> and <a href="https://www.dreamslothgames.com/">Dream Sloth Games</a>. Notably: this title was created using Godot 2.1!</em></p> <h2 id="highlights">Highlights</h2> <h3 id="use-d3d12-by-default-on-windows">Use D3D12 by default on Windows</h3> <p>Ever since its addition in Godot 4.3 by <a href="https://github.com/RandomShaper">RandomShaper</a> and further refinement by <a href="https://github.com/DarioSamo">DarioSamo</a>, Direct3D 12 has been a mainstay renderer for supported devices (Windows). This is because Vulkan is unfortunately unstable on Windows, with GPU drivers being poorly maintained compared to their Direct3D 12 counterparts. As such, for the 4.6 release cycle, <a href="https://github.com/blueskythlikesclouds">Skyth</a> was sponsored by the Godot Foundation to make Direct3D 12 the default RenderingDevice driver on Windows. His efforts paid off, and the change was integrated just before feature freeze (<a href="https://github.com/godotengine/godot/pull/113213">GH-113213</a>).</p> <div class="card card-info" style="margin-top: 1em;"> <p>This will only impact <strong>new projects</strong> created in 4.6-dev5 or later. To use this new default in pre-existing Godot 4.5 projects, you should set the <code class="language-plaintext highlighter-rouge">rendering/rendering_device/driver.windows</code> project setting to <code class="language-plaintext highlighter-rouge">d3d12</code> manually.</p> </div> <h3 id="add-support-for-delta-encoding-to-patch-pcks">Add support for delta encoding to patch PCKs</h3> <p>In Godot 4.4 we introduced the ability to export PCK files as a patch PCK, by letting you provide a set of base PCK files with which to compare against, and then only export the files that had actually changed since then. While this isn’t strictly needed when dealing with most of the major distribution platforms, since they will often distribute only the minimal difference between any two releases anyway, it can become important if you’re distributing content patches through your own means, where things like disk space, bandwidth costs and metered connections come more into focus.</p> <p>However, while this initial implementation did allow for much smaller PCK files compared to exporting everything, it was still an all-or-nothing deal on a per-file level. This meant that if you changed just a single character in some localization string, you would end up exporting the entire localization file for that language, which can potentially be dozens of megabytes in size. This also applied to certain metadata files that Godot manages behind the scenes, which can grow quite big in large-scale projects, and which would be modified anytime you added or removed resources.</p> <p>To help with this, <a href="https://github.com/mihe">Mikael Hermansson</a> added support for what’s called “delta encoding”, also known as “binary patching” or “binary diffing” (<a href="https://github.com/godotengine/godot/pull/112011">GH-112011</a>). This is the same technique used by the major distribution platforms in order to figure out what the minimal difference is between the latest release and the one you have installed, where you simply compare two arbitrary files (binary or otherwise) and try to extract the minimal set of changes from it. This means that you can now optionally export only the parts of a file that actually changed since your last patch, meaning changing a single character in some localization string results in a patch that’s on the order of a few dozen bytes, as opposed to megabytes.</p> <p>Note that this feature must be explicitly enabled, under the “Patching” tab in the export dialog, because it comes with a slight runtime overhead when patches are applied, which they are every time a patched file is loaded. This overhead can be as much as a few milliseconds in the worst case.</p> <h3 id="dedicated-build-app-for-gradle-builds-on-android">Dedicated build app for Gradle builds on Android</h3> <p>Godot supports two ways to export to Android: injecting your game’s data into a pre-built APK (the default) or by running the Gradle build system, which is how native Android apps are usually built.</p> <p>Modifying the pre-built APK is faster and requires less setup, but is more limited. If you want to use <a href="https://docs.godotengine.org/en/latest/tutorials/platform/android/android_plugin.html">Godot Android Plugins</a> to integrate, for example, <a href="https://github.com/godot-sdk-integrations/godot-google-play-billing">Google Play Billing</a>, <a href="https://github.com/godot-sdk-integrations/godot-admob">AdMob</a>, or build an <a href="https://github.com/godotvr/godot_openxr_vendors">XR app</a>, you need to use Gradle.</p> <p>While the Godot editor itself runs on Android, allowing you to develop games on your phone or tablet, it has only ever supported exporting via the pre-built APK… until now!</p> <p>Thanks to the efforts of <a href="https://github.com/dsnopek">David Snopek</a> and <a href="https://github.com/devloglogan">Logan Lang</a> in <a href="https://github.com/godotengine/godot/pull/111732">GH-111732</a>, Godot is now able to initiate Gradle builds on Android, by sending commands to a companion app that provides a full Linux-like build environment to run Gradle. Using a companion app allows us to make setup easy by including everything you need within the app, while keeping Godot itself lightweight. We plan to release the app on Google Play and other Android stores before Godot 4.6 stable is released, but for now you can <a href="https://drive.google.com/file/d/1YFTL-SsVAfx7zCS7_fmuA9cRL7kY5JOz/view?usp=sharing">download an APK</a> from the PR.</p> <h3 id="moving-openxr-forward">Moving OpenXR forward</h3> <p>Godot now supports OpenXR 1.1 and will automatically enable OpenXR 1.1 features on devices that support this (<a href="https://github.com/godotengine/godot/pull/109302">GH-109302</a>). This comes with a compatibility layer to make this as transparent as possible for developers who want to deploy their games both to headsets that support OpenXR 1.1, and those that only support OpenXR 1.0.</p> <p>The OpenXR loader logic for AOSP platforms has moved from the vendor plugin into the core (<a href="https://github.com/godotengine/godot/pull/106891">GH-106891</a>). Godot can now export to any supported OpenXR platform without relying on any plugins. This enables creating and distributing a single APK that runs on nearly all AOSP devices, a potential game changer for tutorial makers and developers who target vendor-agnostic stores like itch.io. The Godot OpenXR vendor plugin remains an important first-party plugin that enables the use of vendor extensions and implements support for specific vendor permissions and feature settings.</p> <h3 id="massive-optimizations-to-the-2d-renderer">Massive optimizations to the 2D renderer</h3> <p>In Godot 4.4 we introduced automatic 2D batching which is an optimization that saves a huge amount of CPU resources by drawing similar objects in a single draw call. 2D batching results in huge wins for content that can easily be batched, like text-heavy games or bullet hells.</p> <p>Batching doesn’t come without a cost, when the batching system is unable to create any batches, then it adds a performance cost, but doesn’t improve performance. It also makes rendering slightly more expensive for the GPU.</p> <p>In our testing we found that most scenes we tested were CPU-bottlenecked, so the increase in GPU cost did not make a noticeable difference, and where it did, the decrease in performance was very small.</p> <p>However, over time we have had a few concerning reports of 4.4 being significantly slower than 4.3, especially on older and lower-end mobile devices. These devices also tended to be GPU-bottlenecked, which made the performance regression even more concerning.</p> <p>In this release, we did a huge overhaul to the design of our 2D renderer to reduce the GPU performance cost when batching. The end result is significantly better performance on a range of hardware. In our testing this change has resulted in improved performance on all devices (in GPU-bound scenarios) ranging from 1.1x to 7x as fast.</p> <p>To read more and see the benchmarks, check out the <a href="https://github.com/godotengine/godot/pull/112481">pull request</a>.</p> <h3 id="and-more">And more!</h3> <p>There are too many exciting changes to list them all here, but here’s a curated selection:</p> <ul> <li>2D: Add support for rotating scene tiles in TileMapLayer (<a href="https://github.com/godotengine/godot/pull/108010">GH-108010</a>).</li> <li>Animation: Add option to BoneConstraint3D to make reference target allow to set Node3D (<a href="https://github.com/godotengine/godot/pull/110336">GH-110336</a>).</li> <li>Animation: Change AnimationLibrary serialization to avoid using Dictionary (<a href="https://github.com/godotengine/godot/pull/110502">GH-110502</a>).</li> <li>Core: Add <code class="language-plaintext highlighter-rouge">RequiredParam&lt;T&gt;</code> and <code class="language-plaintext highlighter-rouge">RequiredResult&lt;T&gt;</code> to mark <code class="language-plaintext highlighter-rouge">Object *</code> arguments and return values as required (<a href="https://github.com/godotengine/godot/pull/86079">GH-86079</a>).</li> <li>Core: Fix EnumDevices stall using IAT hooks (issue with certain USB peripherals) (<a href="https://github.com/godotengine/godot/pull/113013">GH-113013</a>).</li> <li>Core: Implement support for reading and writing extended file attributes/alternate data streams (<a href="https://github.com/godotengine/godot/pull/102232">GH-102232</a>).</li> <li>Editor: Add “Use Local Space” option to the 2D editor (<a href="https://github.com/godotengine/godot/pull/107264">GH-107264</a>).</li> <li>Editor: Add ability to add new EditorSettings shortcuts (<a href="https://github.com/godotengine/godot/pull/102889">GH-102889</a>).</li> <li>Editor: Add expression history to evaluator (<a href="https://github.com/godotengine/godot/pull/108391">GH-108391</a>).</li> <li>Editor: Add tab menu button to list currently opened scenes (<a href="https://github.com/godotengine/godot/pull/108079">GH-108079</a>).</li> <li>Editor: Allow customization of TabContainer tabs in editor (<a href="https://github.com/godotengine/godot/pull/58749">GH-58749</a>).</li> <li>Editor: Allow dragging setting flags in layers property editor (<a href="https://github.com/godotengine/godot/pull/112174">GH-112174</a>).</li> <li>Editor: Allow editing groups on multiple nodes (<a href="https://github.com/godotengine/godot/pull/112729">GH-112729</a>).</li> <li>Editor: Allow resizing the length of animations by dragging the timeline (<a href="https://github.com/godotengine/godot/pull/110623">GH-110623</a>).</li> <li>Editor: Make bottom panel into available dock slot (<a href="https://github.com/godotengine/godot/pull/108647">GH-108647</a>).</li> <li>Editor: Make rotation gizmo white outline a 4th handle that rotates around the camera’s view-axis (<a href="https://github.com/godotengine/godot/pull/108608">GH-108608</a>).</li> <li>Editor: Move History dock to the bottom left by default (<a href="https://github.com/godotengine/godot/pull/112996">GH-112996</a>).</li> <li>Editor: Rename Select Mode to Transform Mode, and create a new Select Mode without transform gizmo (<a href="https://github.com/godotengine/godot/pull/101168">GH-101168</a>).</li> <li>Editor: Separate Node editor dock into two new docks: Signals and Groups (<a href="https://github.com/godotengine/godot/pull/101787">GH-101787</a>).</li> <li>Editor: Show a warning toast when saving a large text-based scene (<a href="https://github.com/godotengine/godot/pull/53679">GH-53679</a>).</li> <li>GDExtension: Store source of gdextension_interface.h in JSON (<a href="https://github.com/godotengine/godot/pull/107845">GH-107845</a>).</li> <li>GDScript: Add debug/gdscript/warnings/directory_rules project setting (<a href="https://github.com/godotengine/godot/pull/93889">GH-93889</a>).</li> <li>GDScript: Add step out to script debugger (<a href="https://github.com/godotengine/godot/pull/97758">GH-97758</a>).</li> <li>GDScript: LSP: Rework and extend BBCode to Markdown docstring conversion (<a href="https://github.com/godotengine/godot/pull/113099">GH-113099</a>).</li> <li>GUI: Allow SplitContainer to have more than two children (<a href="https://github.com/godotengine/godot/pull/90411">GH-90411</a>).</li> <li>Platforms: Android: Adjust script editor size for virtual keyboard (<a href="https://github.com/godotengine/godot/pull/112766">GH-112766</a>).</li> <li>Platforms: Wayland: Implement game embedding (<a href="https://github.com/godotengine/godot/pull/107435">GH-107435</a>).</li> <li>Rendering: Refactor rendering driver copy APIs to fix several D3D12 issues (<a href="https://github.com/godotengine/godot/pull/111954">GH-111954</a>).</li> <li>Rendering: TAA adjustment to reduce ghosting (<a href="https://github.com/godotengine/godot/pull/112196">GH-112196</a>).</li> <li>XR: Add support for Android XR devices to the Godot XR Editor (<a href="https://github.com/godotengine/godot/pull/112777">GH-112777</a>).</li> <li>XR: Implement <code class="language-plaintext highlighter-rouge">XR_KHR_android_thread_settings</code> (<a href="https://github.com/godotengine/godot/pull/112889">GH-112889</a>).</li> <li>XR: Implement <code class="language-plaintext highlighter-rouge">XR_META_foveation_eye_tracked</code> (<a href="https://github.com/godotengine/godot/pull/112888">GH-112888</a>).</li> <li>XR: OpenXR: Add profiling macro for process, <code class="language-plaintext highlighter-rouge">xrWaitFrame()</code> and acquiring swapchain (<a href="https://github.com/godotengine/godot/pull/112893">GH-112893</a>).</li> </ul> <h2 id="changelog">Changelog</h2> <p><strong>134 contributors</strong> submitted <strong>323 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6-dev5"><strong>interactive changelog</strong></a> for the complete list of changes since <a href="/article/dev-snapshot-godot-4-6-dev-4/">4.6-dev4</a>. You can also review <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6">all changes included in 4.6</a> compared to the previous <a href="/releases/4.5/">4.5 feature release</a>.</p> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/f5918a9d35350bf6402dd1b4902ab539747d77a6"><code class="language-plaintext highlighter-rouge">f5918a9d3</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.6-dev5"> Download Godot 4.6 dev5 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-6-dev-5.jpg" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev5&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev5&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev5&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev5&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev5&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev5&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.6-dev5"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript and GDExtension.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript and GDExtension.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <p>With every release we accept that there are going to be various issues, which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug">known bugs</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part and full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by <a href="https://godot.foundation/">Godot Foundation</a>. There are also several <a href="/donate">alternative ways to donate</a> which you may find more suitable.</p> <p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p>Thaddeus CrewsGodot XR update - November 20252025-11-21T12:00:00+00:00https://godotengine.org/article/godot-xr-update-nov-2025/MOAT XR, XR game jam results, new features, OpenXR inventory<h2 id="the-museum-of-all-things-released-on-the-meta-quest-store">“The Museum of All Things” released on the Meta Quest store!</h2> <p>The Museum of All Things is a virtual museum where each exhibit is generated from an article on Wikipedia, and the links to other articles become doors to other exhibits.</p> <p><img src="/storage/blog/godot-xr/updates/moat.png" alt="Museum of All Things" /></p> <p>It was the topic of a <a href="https://godotengine.org/article/museum-of-all-things/">showcase back in February</a>, where it had a PCVR version, but no port to the Meta Quest.</p> <p>However, now it’s launched on the <a href="https://www.meta.com/experiences/the-museum-of-all-things/25148973151401467/">Meta Quest store</a>!</p> <h2 id="results-of-the-godot-xr-community-game-jam">Results of the Godot XR Community Game Jam</h2> <p>In September the Godot XR Community held its latest game jam and we had some amazing entries. The quality is definitely rising from previous jams.</p> <p>The theme this time around was “It takes two”, and the interpretations of the theme did not disappoint.</p> <p>You can find the full results here, we’ll list the top 5 results below. I highly recommend checking out the other entries. There are a number of gems that didn’t make the top 5.</p> <h3 id="no-5-rogue-vantage-by-allen-dawodu">No 5. “Rogue Vantage” by Allen Dawodu</h3> <p><a href="https://itch.io/jam/godot-xr-game-jam-sep-2025/rate/3879177">Rogue Vantage</a> by <a href="https://allendawodu.itch.io/">Allen Dawodu</a> ranked 5th with 11 ratings (Score: 3.606).</p> <iframe width="560" height="315" style="width: 100%; height: 100%; aspect-ratio: 16/9;" src="https://www.youtube.com/embed/iX6pwozpcC8" title="Rogue Vantage" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe> <p>This entry is a variation on the Superhot formula where time only progresses when you move.</p> <p>However the main character is now an NPC that you need to assist. Levels get progressively more difficult as you’re trying to keep your NPC alive.</p> <h3 id="no-4-and-2-we-are-by-miguebc">No 4. “And 2 We Are” by MigueBC</h3> <p><a href="https://itch.io/jam/godot-xr-game-jam-sep-2025/rate/3883812">And 2 We Are</a> by <a href="https://miguebc.itch.io/">MigueBC</a> ranked 4th with 10 ratings (Score: 3.617).</p> <iframe width="560" height="315" style="width: 100%; height: 100%; aspect-ratio: 16/9;" src="https://www.youtube.com/embed/zowvWSvMEbg" title="And 2 We Are" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe> <p>This entry has you play two separate characters that need to perform complimentary actions to escape a maze. It has a very Portal feel to it and I wish it had many more levels to it.</p> <p>The miniaturization part was especially well executed.</p> <h3 id="no-3-runaway-rails-by-copper-tunic">No 3. “Runaway Rails” by Copper Tunic</h3> <p><a href="https://itch.io/jam/godot-xr-game-jam-sep-2025/rate/3880221">Runaway Rails</a> by <a href="https://copper-tunic.itch.io/">Copper Tunic</a> ranked 3rd with 11 ratings (Score: 3.833).</p> <iframe width="560" height="315" style="width: 100%; height: 100%; aspect-ratio: 16/9;" src="https://www.youtube.com/embed/euV89UPG4Go" title="Runaway Rails" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe> <p>This great little rhythm game has you play together with another player to place rail road tracks to the beat of music in order to prevent a train from derailing.</p> <p>If you don’t have a friend at hand, you can play together with an NPC.</p> <p>The developer seems set to continue building this game out and has already released several updates to his game since the jam ended.</p> <h3 id="no-2-things-you-can-do-with-two-hands-by-matt-giuca">No 2. “Things You Can Do With Two Hands” by Matt Giuca</h3> <p><a href="https://itch.io/jam/godot-xr-game-jam-sep-2025/rate/3874113">Things You Can Do With Two Hands</a> by <a href="https://mgiuca.itch.io/">Matt Giuca</a> ranked 2nd with 11 ratings (Score: 4.000).</p> <iframe width="560" height="315" style="width: 100%; height: 100%; aspect-ratio: 16/9;" src="https://www.youtube.com/embed/L41KnIcSRzE" title="Things You Can Do With Two Hands" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe> <p>This game might have a simple aesthetic, but it is a unique experience to play through.</p> <p>The aim is to coordinate and perform actions with both your hands to complete levels. Whether it is turning keys in moving locks, throwing bowling balls that have to hit a cone at the same time, or trying to hit the moon while also hitting a target, it is deceptively tricky to complete the whole game.</p> <h3 id="no-1-wiener-wobble-dog-park-by-andyman404">No 1. “Wiener Wobble Dog Park” by Andyman404</h3> <p><a href="https://itch.io/jam/godot-xr-game-jam-sep-2025/rate/3883622">Wiener Wobble Dog Park</a> by <a href="https://andyman404.itch.io/">Andyman404</a> ranked 1st with 7 ratings (Score: 4.048).</p> <iframe width="560" height="315" style="width: 100%; height: 100%; aspect-ratio: 16/9;" src="https://www.youtube.com/embed/DNN8vEwrVdg" title="Wiener Wobble Dog Park" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe> <p>The winner of the game jam was Wiener Wobble Dog Park. This unique entry has you control a sausage dog with two fingers on each hand. One hand controls the front of the dog, while the other controls the rear.</p> <p>The dog works like a slinky and you have to move it through an obstacle course where you can move only when the dog touches the course. It is a frantic and very enjoyable experience.</p> <h2 id="introducing-spatial-entities">Introducing spatial entities</h2> <p>Spatial entities is a new collection of APIs within the OpenXR specification that gives us access to information about the real world around us. This API is designed to grow over time. Its initial iteration gives access to:</p> <ol> <li>Spatial anchors allow users to mark real world locations that are tracked by the headset. These can be stored on the headset and retrieved on subsequent runs of your application. They are great for placing virtual objects in a fixed location in your real space.</li> <li>Plane tracking provides us with insight about the world around us, where is our floor, where are walls, where are tables, etc.</li> <li>Marker tracking allows us to use various printed markers like QR codes, April tags, and Aruca codes, and have our headset identify and track those locations.</li> </ol> <p>Godot is an early adopter of this API thanks to funding through the Khronos Godot Integration Project.</p> <p>You can try out this new API using the Galaxy XR headset as Android XR has support for all three implementations. We are eagerly awaiting news of other headsets supporting this functionality.</p> <h2 id="frame-synthesis">Frame synthesis</h2> <p>Frame synthesis is a new OpenXR API that defines a standard for advanced reprojection techniques. This allows you to run your application at a lower frame rate and have the runtime inject reprojected frames that use motion vectors and depth information to improve the image.</p> <p>Note that this API only works with the Compatibility and Mobile renderers.</p> <p>This work was made possible thanks to funding through the Khronos Godot Integration Project.</p> <h2 id="openxr-inventory">OpenXR inventory</h2> <p>The OpenXR working group maintains an <a href="https://github.khronos.org/OpenXR-Inventory/extension_support.html">inventory website</a> where you can see which OpenXR extensions are supported on various OpenXR Runtimes.</p> <p>The past year our very own Bastiaan Olij has spent time on extending this inventory to also support a <a href="https://github.khronos.org/OpenXR-Inventory/extension_support.html#client_matrix">client matrix</a> showing which OpenXR extensions are supported by various game engines. Working together with developers from these other engines we were able to present a complete list and devise a system that will inform users of needed plugins to get access to these features.</p> <p>We can now see that Godot leads the pack, supporting 95 official OpenXR extensions in total. This number is made up of:</p> <ul> <li>14 core extensions (KHR)</li> <li>22 multi-vendor extensions (EXT)</li> <li>59 vendor extensions</li> </ul>Bastiaan OlijGodot and W4 Games support Android XR from day One2025-11-14T12:00:00+00:00https://godotengine.org/article/announcing-android-xr-support/Announcing support for the Android XR ecosystem by the Godot Foundation and W4 Games<p>With the recent public release of Samsung Galaxy XR, the first headset using the new Android XR operating system, we are pleased to announce that Godot already supports this new ecosystem.</p> <p>As a game engine that puts OpenXR front and center, Godot is uniquely positioned to excel on this platform.</p> <p>With the release of the <a href="https://store-beta.godotengine.org/asset/godot-xr/godot-openxr-vendors-plugin/">Godot OpenXR vendor plugin v4.2.0</a>, a new option for Android XR has been added that allows developers using <a href="https://godotengine.org/download/">Godot 4.5 and newer</a> to effortlessly export their existing projects to this new platform.</p> <p>The Godot XR Editor has also been updated with Android XR support and runs beautifully on this new device. Users can download the Godot XR Editor from <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4">Google Play</a>.</p> <p>W4 Games has <a href="https://www.w4games.com/blog/w4-games-news-1/w4-games-works-with-the-androidxr-team-and-the-godot-foundation-to-improve-godots-android-xr-support-123">announced their support of the platform</a> including implementing various vendor specific extensions that expose functionality unique to Android XR.</p> <p>As part of this initiative, W4 Games will be making a donation to the Godot Foundation to ensure supporting Android XR long term and continue their work on enhancing Godot’s OpenXR support.</p>Bastiaan OlijDev snapshot: Godot 4.6 dev 42025-11-14T11:00:00+00:00https://godotengine.org/article/dev-snapshot-godot-4-6-dev-4/Powering through the post-GodotFest blues<p>With <a href="https://godotfest.com/">GodotFest</a> now behind us, it’s only natural that some users would be left with a sense of longing. Well we have just the thing: our most recent Godot 4.6 development snapshot! It’s not even been two weeks since the last one, but we couldn’t just leave y’all hanging for more Godot content. As always, these snapshots feature big changes, meaning they’re likely accompanied by big regressions and bugs; get those tests and reports in as early as possible to ensure an expedient release cycle!</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/4.6.dev3/"><strong>Web editor</strong></a>, the <a href="https://www.meta.com/s/3yJ7i8kop"><strong>XR editor</strong></a>, or the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4"><strong>Android editor</strong></a> for this release. If you are interested in the latter, please request to join <a href="https://groups.google.com/g/godot-testers">our testing group</a> to get access to pre-release builds.</p> <hr /> <p><em>The cover illustration is from</em> <a href="https://store.steampowered.com/app/2005870/House_of_Necrosis/?curator_clanid=41324400"><strong>House of Necrosis</strong></a>, <em>a turn-based, horror RPG where you must survive the horrors of a mansion that changes every time it’s entered. You can get the game or try the demo on <a href="https://store.steampowered.com/app/2005870/House_of_Necrosis/?curator_clanid=41324400">Steam</a>, and follow the developer on <a href="https://www.youtube.com/@Warrrkus">YouTube</a>, <a href="https://bsky.app/profile/mycard.utustudios.com">Bluesky</a>, or <a href="https://warrrkus.itch.io/">itch.io</a>.</em></p> <h2 id="highlights">Highlights</h2> <h3 id="animation-add-skeletonmodifier3d-iks-as-ikmodifier3d">Animation: Add <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code> IKs as <code class="language-plaintext highlighter-rouge">IKModifier3D</code></h3> <p>For those that aren’t already aware, <code class="language-plaintext highlighter-rouge">SkeletonModificationStack3D</code> was removed in the transition from 3.x to 4.0, as it was deemed wildly unstable and unsalvageable. Since then, <a href="https://github.com/TokageItLab">Tokage</a> has been on a journey to reincorporate the functionality such that it lives up to the standards the rest of the engine aims for. This started early last year with the incorporation of <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code> (<a href="https://github.com/godotengine/godot/pull/87888">GH-87888</a>), which restored the majority of baseline functionality. However, there was one area which didn’t make the transiton: <abbr title="Inverse kinematics">IKs</abbr>.</p> <p>The process of supporting IKs proved to be far more involved, as it too needed to be incorporated in a way that matched the engine’s standards and expectations. Consequently, that meant a solution that naturally expands off our <code class="language-plaintext highlighter-rouge">Node</code> paradigm; a tall order for how many use-cases and scenarios one must consider and account for when dealing with IKs. This resulted in <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code> receiving <strong>8 new subclasses</strong>, which are as follows:</p> <ul> <li><a href="https://docs.godotengine.org/en/latest/classes/class_ikmodifier3d.html"><code class="language-plaintext highlighter-rouge">IKModifier3D</code></a> <ul> <li><a href="https://docs.godotengine.org/en/latest/classes/class_chainik3d.html"><code class="language-plaintext highlighter-rouge">ChainIK3D</code></a></li> <li><a href="https://docs.godotengine.org/en/latest/classes/class_iterateik3d.html"><code class="language-plaintext highlighter-rouge">IterateIK3D</code></a> <ul> <li><a href="https://docs.godotengine.org/en/latest/classes/class_ccdik3d.html#class-ccdik3d"><code class="language-plaintext highlighter-rouge">CCDIK3D</code></a></li> <li><a href="https://docs.godotengine.org/en/latest/classes/class_fabrik3d.html#class-fabrik3d"><code class="language-plaintext highlighter-rouge">FABRIK3D</code></a></li> <li><a href="https://docs.godotengine.org/en/latest/classes/class_jacobianik3d.html#class-jacobianik3d"><code class="language-plaintext highlighter-rouge">JacobianIK3D</code></a></li> </ul> </li> <li><a href="https://docs.godotengine.org/en/latest/classes/class_splineik3d.html#class-splineik3d"><code class="language-plaintext highlighter-rouge">SplineIK3D</code></a></li> </ul> </li> <li><a href="https://docs.godotengine.org/en/latest/classes/class_twoboneik3d.html#class-twoboneik3d"><code class="language-plaintext highlighter-rouge">TwoBoneIK3D</code></a></li> </ul> <p>Attempting to go over all of these is well beyond the scope of this blog post, so readers wanting more information should check out the pull request for more details. Instead, we’ll show off one of the bugfixes to this new system in (<a href="https://github.com/godotengine/godot/pull/112573">GH-112573</a>), as it provides an easily digestable visualization of what this system is capable of.</p> <h4 id="before">Before</h4> <p><img src="/storage/blog/dev-snapshot-godot-4-6-dev-4/haha-funny-wiggle.webp" alt="gmod-ragdoll.mp3" /></p> <h4 id="after">After</h4> <video autoplay="" loop="" muted="" playsinline="" title="Still funny, but functional!"> <source src="/storage/blog/dev-snapshot-godot-4-6-dev-4/haha-funny-stretch.mp4?1" type="video/mp4" /> </video> <h3 id="project-manager-various-improvements">Project manager: Various improvements</h3> <p>The editor received a <strong>lot</strong> of love this development snapshot, with many features well worth a look in the curated highlights. However, for this blog post, we’ll be focusing on an often overlooked element of our editor: the project manager. While technically separate from the editor in the traditional sense, it is editor-exclusive functionality which exists to launch project editors, so they’re invariably intertwined. With the project manager getting an uncharacteristic amount of attention this cycle, here’s a quick lightning-round of changes:</p> <p><a href="https://github.com/Rindbee">Rindbee</a> is starting things off with an improved UI navigation (<a href="https://github.com/godotengine/godot/pull/101129">GH-101129</a>). The previous implementation clashed with our recent AccessKit integration, as it didn’t lend itself to keyboard navigation. Now a new focus style makes navigation easier than ever:</p> <video autoplay="" loop="" muted="" playsinline="" title="Project manager navigation"> <source src="/storage/blog/dev-snapshot-godot-4-6-dev-4/project-manager-nagivation.mp4?1" type="video/mp4" /> </video> <p>Next is <a href="https://github.com/Meorge">Malcolm Anderson</a>, who implemented functionality for opening the project in the file explorer as a “Show in File Manager” button (<a href="https://github.com/godotengine/godot/pull/111624">GH-111624</a>). Unfortunately, while a highly-requested feature, it proved to be too cluttered and was slated for a revert. Not being one to throw out the baby with the bathwater, <a href="https://github.com/KoBeWi">Tomasz Chabora</a> saved the functionality by reimplementing it in the form of a newly-added right-click menu:</p> <video autoplay="" loop="" muted="" playsinline="" title="Project manager navigation"> <source src="/storage/blog/dev-snapshot-godot-4-6-dev-4/project-manager-right-click.mp4?1" type="video/mp4" /> </video> <p>Speaking of Tomasz, he’s here to round things off with yet another highly-requested feature: the ability to modify editor settings within the project manager (<a href="https://github.com/godotengine/godot/pull/82212">GH-82212</a>). Now opening a project just to make general adjustments is no longer necessary, as it can all be handled in the much more lightweight context of the project manager:</p> <video autoplay="" loop="" muted="" playsinline="" title="Project manager navigation"> <source src="/storage/blog/dev-snapshot-godot-4-6-dev-4/project-manager-editor-settings.mp4?1" type="video/mp4" /> </video> <h3 id="buildsystem-support-dedicated-profilers">Buildsystem: Support dedicated profilers</h3> <div class="card card-warning"> <p>This is unapologetically super-nerd territory, and strictly targeting those who already know what this is talking about. Everyone else, feel free to jump to the curated highlights instead.</p> </div> <p>It’s rare for our blog posts to mention the buildsystem in any capacity — let alone as a featured highlight — but this is a very special exception: Godot can now natively support dedicated profilers <a href="https://github.com/godotengine/godot/pull/104851">GH-104851</a>! Note that this is separate from <a href="https://docs.godotengine.org/en/latest/tutorials/scripting/debug/the_profiler.html">Godot’s built-in profiler</a>, as that’s suited for projects running <em>in</em> the engine, rather than the engine <em>itself</em>. Godot’s built-in profiler is still very useful, but these dedicated profilers are a great option for people who are very serious about optimizing Godot or their games.</p> <p>Thanks to the efforts of <a href="https://github.com/Ivorforce">Lukas Tenbrink</a>, engine developers will no longer need to manually integrate (and constantly re-integrate) profiling logic to the engine. Instead, they merely need to pass the appropriate path to <code class="language-plaintext highlighter-rouge">profiler_path</code>, and our buildsystem will automatically detect and integrate the given profiler. Currently, the buildsystem supports <a href="https://github.com/wolfpld/tracy">Tracy</a> and <a href="https://perfetto.dev/">Perfetto</a>, but the groundwork exists for additional tools to be integrated down the road.</p> <h3 id="and-more">And more!</h3> <p>There are too many exciting changes to list them all here, but here’s a curated selection:</p> <ul> <li>2D: Fix smart snapping lines to disappear after using the pivot tool (<a href="https://github.com/godotengine/godot/pull/105203">GH-105203</a>).</li> <li>3D: Add Bresenham Line Algorithm to GridMap Drawing (<a href="https://github.com/godotengine/godot/pull/105292">GH-105292</a>).</li> <li>Core: Add ability to get list of Project Settings changed, similar to Editor Settings functionality (<a href="https://github.com/godotengine/godot/pull/110748">GH-110748</a>).</li> <li>Editor: Add indicator to linked resources (<a href="https://github.com/godotengine/godot/pull/109458">GH-109458</a>).</li> <li>Editor: Allow concurrent unbinding and binding of signal arguments in editor (<a href="https://github.com/godotengine/godot/pull/108741">GH-108741</a>).</li> <li>Editor: Autoloads with UIDs (<a href="https://github.com/godotengine/godot/pull/112193">GH-112193</a>).</li> <li>Editor: Automatically open newly created script (<a href="https://github.com/godotengine/godot/pull/108342">GH-108342</a>).</li> <li>Editor: Fix edit resource on inspector when inside array or dictionary (<a href="https://github.com/godotengine/godot/pull/106099">GH-106099</a>).</li> <li>Editor: Open source code errors in external editor (<a href="https://github.com/godotengine/godot/pull/111805">GH-111805</a>).</li> <li>Editor: Persist fullscreen setting on Android Editor (<a href="https://github.com/godotengine/godot/pull/112246">GH-112246</a>).</li> <li>GUI: PopupMenu: Add theme option for merging icon and checkbox gutters (<a href="https://github.com/godotengine/godot/pull/112545">GH-112545</a>).</li> <li>I18n: Add CSV translation template generation (<a href="https://github.com/godotengine/godot/pull/112149">GH-112149</a>).</li> <li>I18n: Make editor language setting default to Auto (<a href="https://github.com/godotengine/godot/pull/112317">GH-112317</a>).</li> <li>Input: Add support for setting a joypad’s LED light color (<a href="https://github.com/godotengine/godot/pull/111681">GH-111681</a>).</li> <li>Rendering: Apply viewport oversampling to Polygon2D (<a href="https://github.com/godotengine/godot/pull/112352">GH-112352</a>).</li> <li>XR: OpenXR: Add support for frame synthesis (<a href="https://github.com/godotengine/godot/pull/109803">GH-109803</a>).</li> </ul> <h2 id="changelog">Changelog</h2> <p><strong>83 contributors</strong> submitted <strong>168 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6-dev4"><strong>interactive changelog</strong></a> for the complete list of changes since <a href="/article/dev-snapshot-godot-4-6-dev-3/">4.6-dev3</a>. You can also review <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6">all changes included in 4.6</a> compared to the previous <a href="/releases/4.5/">4.5 feature release</a>.</p> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/bd2ca13c6f3a5198eac035c855dcd1759e077313"><code class="language-plaintext highlighter-rouge">bd2ca13c6</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.6-dev4"> Download Godot 4.6 dev4 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-6-dev-4.jpg" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev4&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev4&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev4&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev4&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev4&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev4&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.6-dev4"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript and GDExtension.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript and GDExtension.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <p>With every release we accept that there are going to be various issues, which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug">known bugs</a>.</p> <ul> <li>The newly released <a href="https://learn.microsoft.com/en-us/visualstudio/releases/2026/release-notes">Visual Studio 2026</a> isn’t detected, instead falling back to VS2022/VS2019 <a href="https://github.com/godotengine/godot/issues/112675">GH-112675</a>. There already exist a couple of <a href="https://github.com/godotengine/godot/pull/110851">potential</a> <a href="https://github.com/godotengine/godot/pull/112677">solutions</a>, so this will likely be resolved next update.</li> </ul> <p>Additionally, SCons fails to detect/utilize Visual Studio 2026 when attempting a build. While not technically an engine issue, a number of contributors have expressed confusion over the lack of support, so it’s worth an explicit mention. This issue has since been <a href="https://github.com/SCons/scons/pull/4780">resolved upstream</a>, and will be incorporated in the next official release; anyone requiring the fix immediately should build SCons from the <a href="https://github.com/SCons/scons">source repository</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part and full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by <a href="https://godot.foundation/">Godot Foundation</a>. There are also several <a href="/donate">alternative ways to donate</a> which you may find more suitable.</p> <p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p>Thaddeus CrewsDev snapshot: Godot 3.7 dev 12025-11-13T12:00:00+00:00https://godotengine.org/article/dev-snapshot-godot-3-7-dev-1/Since Godot 3.6's release in September 2024, we have been working hard on the new feature branch: 3.7.<p>Although the vast majority of contributors are busily working on Godot 4, a small problematic group refuse to stop improving Godot 3. Since <a href="/article/godot-3-6-finally-released">Godot 3.6</a>’s release in September 2024, we have been working hard on the new feature branch, 3.7.</p> <p>Although a number of features are still in preparation, there have already been a number of improvements since 3.6, so consider this a sneak peek at some of the advances that will be available.</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/3.7.dev1/"><strong>Web editor</strong></a> for this release.</p> <hr /> <p><em>The cover illustration is from</em> <a href="https://store.steampowered.com/app/2134980/Soul_Dier__Part_1/?curator_clanid=41324400"><strong>Soul Dier - Part 1</strong></a>, <em>a turn-based JRPG where you embark on a story-driven journey in a mysterious, hand-crafted world. You can buy the game or try out the demo on <a href="https://store.steampowered.com/app/2134980/Soul_Dier__Part_1/?curator_clanid=41324400">Steam</a> and follow the developers on their <a href="https://80.lv/author/ponpoppocpok-software">website</a>, <a href="https://www.youtube.com/@soul_dier_dev">YouTube</a>, or <a href="https://discord.com/invite/QzUfHUHDu6">Discord</a>.</em></p> <h2 id="highlights">Highlights</h2> <h3 id="core">Core</h3> <p>Thanks to work particularly by <a href="https://github.com/lawnjelly">lawnjelly</a> and <a href="https://github.com/Ivorforce">Lukas Tenbrink</a>, much of core has been heavily optimized, including faster access to <code class="language-plaintext highlighter-rouge">ProjectSettings</code>, faster object casting, move semantics, and use of faster data structures benefiting 2D and 3D.</p> <h3 id="3d-physics-interpolation">3D physics interpolation</h3> <p>In tandem with work on Godot 4.5, the 3D physics interpolation has been rewritten from the ground up (<a href="https://github.com/godotengine/godot/pull/103685">GH-103685</a>).</p> <p>This has enabled us to fix a number of longstanding bugs and usability issues (particularly with non-interpolated tree branches), as well as more accurately representing pivot relationships which should give a smoother result.</p> <p>Luckily we have already worked through a lot of the bugs in 4.5 betas, but let us know if you spot any!</p> <h3 id="blob-shadows">Blob shadows</h3> <p>As an alternative to traditional shadow mapping, Godot 3.7 introduces support for analytical sphere and capsule soft shadows. While this requires some setup of blob shadow caster nodes, the results can look great, and can perform better than shadow mapping in many situations, and are an attractive option especially on mobile.</p> <p><img src="/storage/blog/dev-snapshot-godot-3-7-dev-1/blob_shadow.webp" alt="BlobShadow illustration" /></p> <p>Blob shadows are typically only used on moving objects (as only a limited number of blobs can be used at one time), and are ideally used in conjunction with lightmaps for static geometry.</p> <p>See (<a href="https://github.com/godotengine/godot/pull/84804">GH-84804</a>) for full details.</p> <h3 id="mutable-audio-drivers">Mutable audio drivers</h3> <p>While most of you will be making games with constant audio, those making applications (as well as users of the Editor itself) can now benefit from experimental “mutable audio” via hotswapping the audio driver (<a href="https://github.com/godotengine/godot/pull/63458">GH-63458</a>). This can dramatically reduce CPU usage. Audio is surprisingly one of the biggest CPU hogs in the Editor, despite it rarely playing any sounds!</p> <p>This is good news especially for those of you using low-power PCs, or developing on battery-powered devices.</p> <p><strong>Note</strong> that we are <em>expecting</em> regressions on some platforms / systems if hotswapping is not supported, this release is experimental and we are using it to identify problem platforms. You can help us by testing this in the editor, by checking that sound effects play correctly. If you encounter problems playing sounds, please report it on GitHub so we can investigate, and temporarily clear the muting flags in the editor in <code class="language-plaintext highlighter-rouge">editor_settings/interface/audio/</code> until we have it fixed.</p> <h3 id="bug-fixes-and-backports">Bug fixes and backports</h3> <p>As always, in addition to feature work, there have been a number of bugs fixed, and backports from Godot 4.x. These are detailed in the notes below. Of course the flow is two-way. Godot 4.x has also benefited from a number of new features forward ported from 3.x.</p> <h3 id="and-more">And more!</h3> <p>There are too many exciting changes to list them all here, but here’s a curated selection:</p> <ul> <li>2D: Make selected tile in <code class="language-plaintext highlighter-rouge">TileSet</code> more visible through red outline (<a href="https://github.com/godotengine/godot/pull/105439">GH-105439</a>).</li> <li>3D: FTI - <code class="language-plaintext highlighter-rouge">global_transform_interpolated()</code> on demand for invisible nodes (<a href="https://github.com/godotengine/godot/pull/107307">GH-107307</a>).</li> <li>3D: Pre-calculate <code class="language-plaintext highlighter-rouge">is_visible_in_tree()</code> (<a href="https://github.com/godotengine/godot/pull/107324">GH-107324</a>).</li> <li>Audio: Add ability to mute AudioServer (<a href="https://github.com/godotengine/godot/pull/63458">GH-63458</a>).</li> <li>Codestyle: Simplify <code class="language-plaintext highlighter-rouge">ObjectDB::get_instance()</code> casting (<a href="https://github.com/godotengine/godot/pull/100603">GH-100603</a>).</li> <li>Core: Allow constructing Quat from two Vector3s (<a href="https://github.com/godotengine/godot/pull/90464">GH-90464</a>).</li> <li>Core: <code class="language-plaintext highlighter-rouge">Object::call()</code> prevent debug lock accessing dangling pointer (<a href="https://github.com/godotengine/godot/pull/96862">GH-96862</a>).</li> <li>Core: Add move semantics to core containers (<a href="https://github.com/godotengine/godot/pull/100995">GH-100995</a>).</li> <li>Core: Add <code class="language-plaintext highlighter-rouge">GLOBAL_GET</code> cached macros (<a href="https://github.com/godotengine/godot/pull/103763">GH-103763</a>).</li> <li>Editor: Cancel tooltips when the mouse leaves the window (<a href="https://github.com/godotengine/godot/pull/95978">GH-95978</a>).</li> <li>Editor: Improve Class display in Create dialog (<a href="https://github.com/godotengine/godot/pull/105459">GH-105459</a>).</li> <li>Editor: Add an editor option to copy system info to clipboard (<a href="https://github.com/godotengine/godot/pull/105674">GH-105674</a>).</li> <li>GDScript: Backport “Cleanup function state connections when destroying instance” for Godot 3 (<a href="https://github.com/godotengine/godot/pull/97464">GH-97464</a>).</li> <li>GUI: Expose some helper methods on Viewport (<a href="https://github.com/godotengine/godot/pull/92573">GH-92573</a>).</li> <li>Input: Fix Xbox Controller on Android (<a href="https://github.com/godotengine/godot/pull/106021">GH-106021</a>).</li> <li>Physics: Fix physics platform behaviour regression (<a href="https://github.com/godotengine/godot/pull/97316">GH-97316</a>).</li> <li>Plugin: Backport “[Editor] Add <code class="language-plaintext highlighter-rouge">EditorPlugin::scene_saved</code> signal” (<a href="https://github.com/godotengine/godot/pull/99857">GH-99857</a>).</li> <li>Rendering: Implement glow map effect (<a href="https://github.com/godotengine/godot/pull/93133">GH-93133</a>).</li> <li>Rendering: Physics Interpolation - Move 3D FTI to <code class="language-plaintext highlighter-rouge">SceneTree</code> (<a href="https://github.com/godotengine/godot/pull/103685">GH-103685</a>).</li> <li>Rendering: FTI - Add custom interpolation for wheels (<a href="https://github.com/godotengine/godot/pull/105816">GH-105816</a>).</li> <li>Rendering: Blob shadows (<a href="https://github.com/godotengine/godot/pull/84804">GH-84804</a>).</li> <li>VisualScript: Bind Array and Pool*Array get and set functions (<a href="https://github.com/godotengine/godot/pull/96135">GH-96135</a>).</li> </ul> <h2 id="changelog">Changelog</h2> <p><strong>44 contributors</strong> submitted <strong>130 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#3.7-dev1"><strong>interactive changelog</strong></a> for the complete list of changes since <a href="/article/godot-3-6-finally-released">3.6-stable</a>.</p> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/a117d512b00f1646db174e703e7e888519b64608"><code class="language-plaintext highlighter-rouge">a117d512b</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/3.7-dev1"> Download Godot 3.7 dev1 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-3-7-dev-1.jpg" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=3.7&amp;flavor=dev1&amp;slug=x11.64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=3.7&amp;flavor=dev1&amp;slug=mono_x11_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=3.7&amp;flavor=dev1&amp;slug=osx.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=3.7&amp;flavor=dev1&amp;slug=mono_osx.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=3.7&amp;flavor=dev1&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=3.7&amp;flavor=dev1&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/3.7-dev1"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript, GDNative, and VisualScript.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript, GDNative, and VisualScript.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <p>There are currently no known issues introduced by this release.</p> <p>With every release we accept that there are going to be various issues, which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug">known bugs</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 3.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part and full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by <a href="https://godot.foundation/">Godot Foundation</a>. There are also several <a href="/donate">alternative ways to donate</a> which you may find more suitable.</p> <p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p>lawnjellyDev snapshot: Godot 4.6 dev 32025-11-04T12:00:00+00:00https://godotengine.org/article/dev-snapshot-godot-4-6-dev-3/Rocking a new look!<p>Our third development snapshot of the 4.6 release cycle is upon us, and now the floodgates are well and truly open. The enhancements are bigger than ever, with several of them overhauling the look of the editor itself entirely! Big features necessitate big changes, which means the potential for big bugs and regressions; early reports and tests remain crucial to catch these issues as soon as possible.</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/4.6.dev3/"><strong>Web editor</strong></a>, the <a href="https://www.meta.com/s/3yJ7i8kop"><strong>XR editor</strong></a>, or the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4"><strong>Android editor</strong></a> for this release. If you are interested in the latter, please request to join <a href="https://groups.google.com/g/godot-testers">our testing group</a> to get access to pre-release builds.</p> <hr /> <p><em>The cover illustration is from</em> <a href="https://store.steampowered.com/app/3617620/My_Card_Is_Better_Than_Your_Card/?curator_clanid=41324400"><strong>My Card Is Better Than Your Card!</strong></a>, <em>a roguelike deckbuilder where you stick stickers to become the coolest kid on the playground. You can get the game or try the demo on <a href="https://store.steampowered.com/app/3617620/My_Card_Is_Better_Than_Your_Card/?curator_clanid=41324400">Steam</a>, and follow the developers on <a href="https://www.youtube.com/@UtuStudios">YouTube</a> or <a href="https://bsky.app/profile/mycard.utustudios.com">Bluesky</a>.</em></p> <h2 id="highlights">Highlights</h2> <h3 id="new-editor-theme">New editor theme</h3> <p>Longtime users of the Godot Editor are likely familiar with one of its most popular custom themes: the <a href="https://github.com/passivestar/godot-minimal-theme">Godot Minimal Theme</a>. Created by <a href="https://github.com/passivestar">passivestar</a>, and showcased in the <a href="/article/dev-snapshot-godot-4-6-dev-1/">first dev snapshot</a>, this skin has become a favorite for many users thanks to a focus on its namesake: minimalism. One of the most frequent suggestions from the community has been an official integration of this theme in some capacity, to make the barrier of entry that much shorter. We’ll do you one better: it’s now the default theme for the editor!</p> <p><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/new-editor-theme.jpg" alt="New editor theme" /></p> <p><a href="https://github.com/YeldhamDev">Michael Alexsander</a> was tasked with helming the official implementation of this theme (<a href="https://github.com/godotengine/godot/pull/111118">GH-111118</a>), receiving help from passivestar directly to ensure a smooth and streamlined transition. Through his efforts, as well as several accompanying theme-related PRs from many other contributors such as <a href="https://github.com/DeeJayLSP">Douglas Leão</a>, we’re excited to (re)-introduce the newly dubbed “Modern Theme”!</p> <div class="card card-info" style="margin-top: 1em;"> <p>We still love our original theme, henceforth known as the “Classic Theme,” and will continue to support it in tandem. It can be accessed through the <code class="language-plaintext highlighter-rouge">interface/theme/style</code> and <code class="language-plaintext highlighter-rouge">interface/theme/preset</code> settings.</p> </div> <p>It may surprise some that we chose to set the default color to a dark grey instead of the classic blue that makes our editor stand out at first glance. It is primarily due to the fact that it caused some issues with the perceived white balance. Removing hue from the equation resolves most of these problems.</p> <p>While originally implemented as a 1-to-1 port of the Minimal Theme, we’ve already been making adjustments to better suit the design philosophies of the Godot Foundation itself. Namely: prioritizing accessibility options and retaining readability. As such, this implementation should <strong>not</strong> be taken as a final representation of this theme; the team fully welcomes and encourages early feedback in order to flush out any lingering blind spots. Nonetheless, we’re excited with the amount of progress made already, and hope you enjoy this new theme firsthand!</p> <div class="card card-info" style="margin-top: 1em;"> <p>The project showcased in the new theme exhibit is <a href="https://codeberg.org/Librerama/librerama">Librerama</a>, by Michael Alexsander.</p> </div> <h3 id="condense-inspector-layout-for-arrays">Condense inspector layout for arrays</h3> <p>In a similar vein to the previous point, we’ve applied a similar minimal-style overhaul to the array inspector. This change is inherent to the inspector itself, so the benefits will be shown regardless of which theme is chosen. <a href="https://github.com/dugramen">Koliur Rahman</a> has brought us this revamped implementation, trimming away wasted space by consolidating information and logic to their essential elements (<a href="https://github.com/godotengine/godot/pull/103257">GH-103257</a>).</p> <table> <thead> <tr> <th>Old</th> <th>New</th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/array-old.jpg" alt="Array old" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/array-new.jpg" alt="Array new" /></td> </tr> </tbody> </table> <h3 id="rendering-overhaul-screen-space-reflections">Rendering: Overhaul screen space reflections</h3> <p>The editor has gotten a lot of love in this blog post, so let’s shake things up with some rendering news! <a href="https://github.com/blueskythlikesclouds">Skyth</a> has been hard at work overhauling our current screen space reflection logic, and their efforts in <a href="https://github.com/godotengine/godot/pull/111210">GH-111210</a> have resulted in better performance <strong>and</strong> higher quality! The PR is readily available for those seeking a more technical deep-dive on the “how”, but we’re here to showcase the end results; they should speak for themselves:</p> <h4 id="64-max-steps">64 Max Steps</h4> <table> <thead> <tr> <th>Old</th> <th>New (half)</th> <th>New (full)</th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/64-max-steps-old.jpg" alt="64 max steps old" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/64-max-steps-new-half.jpg" alt="64 max steps new (half)" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/64-max-steps-new-full.jpg" alt="64 max steps new (full)" /></td> </tr> </tbody> </table> <h4 id="256-max-steps">256 Max Steps</h4> <table> <thead> <tr> <th>Old</th> <th>New (half)</th> <th>New (full)</th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/256-max-steps-old.jpg" alt="256 max steps old" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/256-max-steps-new-half.jpg" alt="256 max steps new (half)" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/256-max-steps-new-full.jpg" alt="256 max steps new (full)" /></td> </tr> </tbody> </table> <h4 id="roughness">Roughness</h4> <table> <thead> <tr> <th>Old</th> <th>New</th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/roughness-old.jpg" alt="Roughness old" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/roughness-new.jpg" alt="Roughness new" /></td> </tr> </tbody> </table> <h4 id="metallic-surface">Metallic Surface</h4> <table> <thead> <tr> <th>Old</th> <th>New (half)</th> <th>New (full)</th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/metallic-surface-old.jpg" alt="Metallic surface old" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/metallic-surface-new-half.jpg" alt="Metallic surface new (half)" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-3/metallic-surface-new-full.jpg" alt="Metallic surface new (full)" /></td> </tr> </tbody> </table> <h3 id="and-more">And more!</h3> <p>There are too many exciting changes to list them all here, but here’s a curated selection:</p> <ul> <li>Animation: Remove default skeleton path in <code class="language-plaintext highlighter-rouge">MeshInstance3D</code> (<a href="https://github.com/godotengine/godot/pull/112267">GH-112267</a>). <ul> <li>If relying on the default <code class="language-plaintext highlighter-rouge">skeleton_path</code> in some scenes, users should manually re-specify the parent node as the <code class="language-plaintext highlighter-rouge">NodePath</code>, or they can enable the <code class="language-plaintext highlighter-rouge">animation/compatibility/default_parent_skeleton_in_mesh_instance_3d</code> project setting to restore the pre-4.6 behavior.</li> </ul> </li> <li>Editor: Add Create Resource Hotkey (<a href="https://github.com/godotengine/godot/pull/110641">GH-110641</a>).</li> <li>Editor: Add splitter to “Create New Node” dialog (<a href="https://github.com/godotengine/godot/pull/111017">GH-111017</a>).</li> <li>Editor: Android Editor: Add game speed control options in game menu bar (<a href="https://github.com/godotengine/godot/pull/111296">GH-111296</a>).</li> <li>Editor: FindInFiles: Allow replacing individual results (<a href="https://github.com/godotengine/godot/pull/109727">GH-109727</a>).</li> <li>Editor: Speed up deletion via the Scene Tree Dock in large trees (<a href="https://github.com/godotengine/godot/pull/109511">GH-109511</a>).</li> <li>Editor: Use Inter as the default editor font, features enabled (<a href="https://github.com/godotengine/godot/pull/111140">GH-111140</a>).</li> <li>Export: Android: Add export option to use <a href="https://github.com/Genymobile/scrcpy">scrcpy</a> to run project from editor (<a href="https://github.com/godotengine/godot/pull/108737">GH-108737</a>).</li> <li>Export: Fix custom icon in Android export (<a href="https://github.com/godotengine/godot/pull/111688">GH-111688</a>).</li> <li>Import: Betsy: Convert RGB to RGBA on the GPU for faster compression (<a href="https://github.com/godotengine/godot/pull/110060">GH-110060</a>).</li> <li>Navigation: Make <code class="language-plaintext highlighter-rouge">NavigationServer</code> backend engine selectable (<a href="https://github.com/godotengine/godot/pull/106290">GH-106290</a>).</li> <li>Rendering: Add Persistent Buffers utilizing UMA (<a href="https://github.com/godotengine/godot/pull/111183">GH-111183</a>).</li> <li>Rendering: D3D12: Greatly reduce shader conversion time &amp; fix spec constant bitmasking (<a href="https://github.com/godotengine/godot/pull/111762">GH-111762</a>).</li> <li>Rendering: Implement a very simple SSAO in GLES3 (<a href="https://github.com/godotengine/godot/pull/109447">GH-109447</a>).</li> <li>Rendering: Overhaul and optimize Glow in the mobile renderer (<a href="https://github.com/godotengine/godot/pull/110077">GH-110077</a>).</li> <li>Rendering: Use half float precision buffer for 3D when HDR2D is enabled (<a href="https://github.com/godotengine/godot/pull/109971">GH-109971</a>).</li> <li>Tests: Add Android instrumented tests to the <code class="language-plaintext highlighter-rouge">app</code> module (<a href="https://github.com/godotengine/godot/pull/110829">GH-110829</a>).</li> </ul> <h2 id="changelog">Changelog</h2> <p><strong>101 contributors</strong> submitted <strong>239 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6-dev3"><strong>interactive changelog</strong></a> for the complete list of changes since <a href="/article/dev-snapshot-godot-4-6-dev-2/">4.6-dev2</a>. You can also review <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6">all changes included in 4.6</a> compared to the previous <a href="/releases/4.5/">4.5 feature release</a>.</p> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/9d84f3d135d4a53ee8c42f32d4df7cc66b2e3684"><code class="language-plaintext highlighter-rouge">9d84f3d13</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.6-dev3"> Download Godot 4.6 dev3 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-6-dev-3.jpg" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev3&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev3&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev3&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev3&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev3&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev3&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.6-dev3"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript and GDExtension.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript and GDExtension.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <p>There are currently no known issues introduced by this release.</p> <p>With every release we accept that there are going to be various issues, which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug">known bugs</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part and full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by <a href="https://godot.foundation/">Godot Foundation</a>. There are also several <a href="/donate">alternative ways to donate</a> which you may find more suitable.</p> <p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p>Thaddeus CrewsMaintenance release: Godot 3.6.22025-10-23T11:00:00+00:00https://godotengine.org/article/maintenance-release-godot-3-6-2/Although we fixed many of the major 3.6 bugs in Godot 3.6.1 in June, we have decided to make a new 3.6 point release in order to keep up to date with platform requirements.<p><strong>Edit 2025-10-25 @ 21:30 UTC:</strong> The original release had a regression affecting the Windows binaries (at least the editor) which lead to crashes (<a href="https://github.com/godotengine/godot/issues/111979">GH-111979</a>, <a href="https://github.com/godotengine/godot/issues/112021">GH-112021</a>). This was caused by the update to MinGW-GCC 14.2.1 for official build containers. We’ve temporarily reverted that change and rebuilt the Windows binaries today. If you downloaded this release for Windows or the export templates before 2025-10-25 21:30 UTC, please redownload it as the binaries have been replaced.</p> <hr /> <p>Although we fixed many of the major 3.6 bugs in <a href="/article/godot-3-6-finally-released">Godot 3.6.1</a> in June, we have decided to make a new 3.6 point release in order to keep up to date with platform requirements.</p> <p><a href="https://support.google.com/googleplay/android-developer/answer/11926878?hl=en">Google announced</a> that from August 31, 2025 (with possible extension to November 1, 2025), apps and updates submitted to the Play Store must target Android 15 (API level 35) and support 16 KiB page size. As a result we have updated Godot Android APIs and made compatibility changes to ensure users can update their Godot 3 games on Play Store with 3.6.2.</p> <p>Since we had to rebuild Mono for Android with a 16 KiB page size, we took the opportunity to update our build containers to provide more <a href="https://github.com/godotengine/build-containers/tree/3.6?tab=readme-ov-file#toolchains">recent toolchains</a> for official builds. Like for 3.6.1, UWP export templates are no longer provided in this build (but can be compiled from source if needed).</p> <p><strong>This is a safe and recommended update for all Godot 3.6.x users.</strong> It should have no major impact on your projects, even complex ones in production, if you’re already using 3.6.1-stable.</p> <p><a href="/download/3.x/"><strong>Download Godot 3.6.2 now</strong></a> or try the <a href="https://editor.godotengine.org/3.6.2.stable/">online version of the Godot editor</a>.</p> <div class="card card-download"> <a class="card-download-link" href="/download/archive/3.6.2-stable"> Download Godot 3.6.2 stable </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/maintenance-release-godot-3-6-2.jpg" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=3.6.2&amp;flavor=stable&amp;slug=x11.64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=3.6.2&amp;flavor=stable&amp;slug=mono_x11_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=3.6.2&amp;flavor=stable&amp;slug=osx.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=3.6.2&amp;flavor=stable&amp;slug=mono_osx.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=3.6.2&amp;flavor=stable&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=3.6.2&amp;flavor=stable&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/3.6.2-stable"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <hr /> <p><em>The illustration picture for this article comes from</em> <a href="https://store.steampowered.com/app/2005870/House_of_Necrosis/?curator_clanid=41324400"><strong>House of Necrosis</strong></a>, <em>a turn-based horror RPG with retro 32-bit 3D graphics. It is developed by <a href="https://warkus-productions.com/">Warkus</a> with Godot 3.6 Mono. You can get the game on <a href="https://store.steampowered.com/app/2005870/House_of_Necrosis/?curator_clanid=41324400">Steam</a>, and follow the developer on <a href="https://bsky.app/profile/warkus.bsky.social">Bluesky</a>.</em></p> <h2 id="changed">Changed</h2> <ul> <li>Buildsystem: Update toolchains for official builds (Fedora 42 base, Mono 6.12.0.206, <del>MinGW-GCC 14.2.1,</del> Xcode 16.2) (<a href="https://github.com/godotengine/build-containers/pull/156">build-containers#156</a>). <ul> <li>The update of the Windows toolchains to MinGW-GCC 14.2.1 was temporarily reverted as it introduced crashes with LTO. 3.6.2-stable Windows binaries (editor and export templates) were rebuilt with the previous MinGW-GCC version on 2025-10-25 at 21:30 UTC.</li> </ul> </li> <li>Network: mbedTLS: Update to mbedTLS 3.6.5 (<a href="https://github.com/godotengine/godot/pull/108382">GH-108382</a>, <a href="https://github.com/godotengine/godot/pull/111845">GH-111845</a>).</li> <li>Porting: Android: Update to target API 35, NDK r28, 16kb page size (<a href="https://github.com/godotengine/godot/pull/108433">GH-108433</a>).</li> <li>Porting: Android: Address API 35 UI changes (<a href="https://github.com/godotengine/godot/pull/110255">GH-110255</a>).</li> <li>Porting: Android: Set minsdk to 21, workaround <code class="language-plaintext highlighter-rouge">fseeko</code> error in Opus (<a href="https://github.com/godotengine/godot/pull/111061">GH-111061</a>).</li> <li>Porting: iOS: Switch window creation to UIScene (<a href="https://github.com/godotengine/godot/pull/111103">GH-111103</a>).</li> <li>Thirdparty: Enable builds with miniupnpc API 18 (<a href="https://github.com/godotengine/godot/pull/100389">GH-100389</a>).</li> </ul> <h2 id="fixed">Fixed</h2> <ul> <li>Buildsystem: Fix build on macOS 26 by removing AGL framework link (<a href="https://github.com/godotengine/godot/pull/110898">GH-110898</a>).</li> <li>Editor: Fix inability to assign script after clearing (<a href="https://github.com/godotengine/godot/pull/108171">GH-108171</a>).</li> <li>Editor: Fix Open Editor Data/Settings Folder menu in self-contained mode (<a href="https://github.com/godotengine/godot/pull/110414">GH-110414</a>).</li> <li>Export: Fix order of operations for macOS template check (<a href="https://github.com/godotengine/godot/pull/108930">GH-108930</a>).</li> <li>GUI: Fix Line breaking may not work correctly when using color tags with specific font (<a href="https://github.com/godotengine/godot/pull/109695">GH-109695</a>).</li> <li>Rendering: Batching: Fix <code class="language-plaintext highlighter-rouge">MultiRect</code> casting to wrong type (<a href="https://github.com/godotengine/godot/pull/109111">GH-109111</a>).</li> </ul> <h2 id="changelog">Changelog</h2> <p><strong>14 contributors</strong> submitted <strong>19 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#3.6.2"><strong>interactive changelog</strong></a> for the complete list of changes since the 3.6.1 release.</p> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/3cd3caab6779a7f3ec3bbeb9f200db50c735cfc8"><code class="language-plaintext highlighter-rouge">3cd3caab6</code></a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, you are encouraged to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with 3.6.2. Please check first the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a>, using the search function with relevant keywords, to ensure that the bug you experience is not known already.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in 3.6.1 or earlier 3.x releases no longer works in 3.6.2).</p> <h2 id="support">Support</h2> <p>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 <a href="/donate">donations from the Godot community</a>. A big thankyou to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so with the <a href="https://fund.godotengine.org">development fund</a>.</p>lawnjellyDev snapshot: Godot 4.6 dev 22025-10-20T12:00:00+00:00https://godotengine.org/article/dev-snapshot-godot-4-6-dev-2/Open the floodgates!<p>With our <a href="/article/dev-snapshot-godot-4-6-dev-1/">first dev snapshot</a> out of the way, the 4.6 development cycle is no longer constraining itself to the territory of bugfixes. Many long-awaited features and enhancements are seeing the light of day at long last, as this behemoth of a snapshot boasts <strong>over 300</strong> improvements in all! This blog post will aim to highlight the heavy-hitters to the best of its ability, but the sheer number of changes may warrant users to check the <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6-dev2">interactive changelog</a> for a more thorough dive. With new features comes the potential of new bugs, so early testing and reporting will be essential to catching regressions as quickly as possible.</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/4.6.dev2/"><strong>Web editor</strong></a>, the <a href="https://www.meta.com/s/3yJ7i8kop"><strong>XR editor</strong></a>, or the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4"><strong>Android editor</strong></a> for this release. If you are interested in the latter, please request to join <a href="https://groups.google.com/g/godot-testers">our testing group</a> to get access to pre-release builds.</p> <hr /> <p><em>The cover illustration is from</em> <a href="https://store.steampowered.com/app/3606890/Upload_Labs/?curator_clanid=41324400"><strong>Upload Labs</strong></a>, <em>an idle game where you build and optimize your computer’s system from the ground up. You can get the game for free on <a href="https://store.steampowered.com/app/3606890/Upload_Labs/?curator_clanid=41324400">Steam</a>, and follow the developers on <a href="https://www.youtube.com/@enigmadevstudios">YouTube</a> or <a href="https://discord.com/invite/enigmadev">Discord</a>.</em></p> <h2 id="highlights">Highlights</h2> <h3 id="build-godot-engine-as-a-library">Build Godot Engine as a library</h3> <p>A very common request we’ve seen regarding Godot is the ability to build the engine as a standalone library. In the past, it’s not something we’ve actively pursued, as the engine paradigm is so central to many of our design philosophies. However, as time has gone on, we’ve encountered more and more scenarios where simply having the ability to access Godot in an isolated context is absolutely necessary for certain workflows. So while a fully-fledged integration of this concept isn’t something we fully support at this time, <a href="https://github.com/kisg">Gergely Kis</a> has put in the work to allow for a functional baseline (<a href="https://github.com/godotengine/godot/pull/110863">GH-110863</a>). Currently dubbed <code class="language-plaintext highlighter-rouge">LibGodot</code> internally, there’s now a basic support for a <code class="language-plaintext highlighter-rouge">GodotInstance</code> to function as an entry point for these specialized workflows.</p> <h3 id="objectdb-profiling-tool"><code class="language-plaintext highlighter-rouge">ObjectDB</code> profiling tool</h3> <p>Another common request from more technically-minded users has been a proper means of profiling <code class="language-plaintext highlighter-rouge">ObjectDB</code>, which can be considered the heart of our entire <code class="language-plaintext highlighter-rouge">Object</code> structure. First-time contributor <a href="https://github.com/AleksLitynski">Aleksander Litynski</a> took to this daunting task, bringing us the <code class="language-plaintext highlighter-rouge">ObjectDB Profiler</code> tool (<a href="https://github.com/godotengine/godot/pull/97210">GH-97210</a>). With this, users will be able to take snapshots of the current <code class="language-plaintext highlighter-rouge">ObjectDB</code> state during debug sessions, and compare that to other snapshots at a given point in time. These snapshots can also be viewed in a variety of contexts detailed in the PR’s original post, but the short version is finding or exporting a diff between states has never been easier or more accessible!</p> <p><img src="/storage/blog/dev-snapshot-godot-4-6-dev-2/objectdb-profiler.jpg" alt="ObjectDB Profiler" /></p> <h3 id="improved-automatic-mesh-lod-using-component-pruning">Improved automatic mesh LOD using component pruning</h3> <p>Our mesh simplifier currently supports the ability to collapse edges, but lacked functionality for simplifying the components themselves. <a href="https://github.com/zeux">Arseny Kapoulkine</a> has addressed this shortcoming, enabling topologically complex sections of a larger mesh to more easily reach the desired <abbr title="Level of Detail">LOD</abbr> target (<a href="https://github.com/godotengine/godot/pull/110028">GH-110028</a>).</p> <p><img src="/storage/blog/dev-snapshot-godot-4-6-dev-2/mesh-component-prune.jpg" alt="Pruned components in simplified mesh" /></p> <h3 id="rotation-visualization-and-snapping">Rotation visualization and snapping</h3> <p>The way that we present and handle our 3D space has already seen a fair number of improvements in the 4.6 cycle, but these two warrant particular mention for implementing popular features that are found in many 3D modelling programs today. Firstly, <a href="https://github.com/ryevdokimov">Robert Yevdokimov</a> has expanded the 3D Transform gizmo to visualize the current delta angle of a rotation operation (<a href="https://github.com/godotengine/godot/pull/108576">GH-108576</a>). This process is non-accumulating, meaning rotations beyond 360° are reset.</p> <video autoplay="" loop="" muted="" playsinline="" title="Rotation accumulation"> <source src="/storage/blog/dev-snapshot-godot-4-6-dev-2/rotation-accumulation.mp4?1" type="video/mp4" /> </video> <p>The second comes to us from <a href="https://github.com/passivestar">passivestar</a>, who integrated orbit snapping to the 3D Viewport (<a href="https://github.com/godotengine/godot/pull/111509">GH-111509</a>). While holding <code class="language-plaintext highlighter-rouge">Alt</code>, exiting an orbit pan will cause the resulting view to be snapped to a static, 45° offset. This is similar to directly swapping to an orthographic view, but from the convenience of orbitting and allowing for more granular 45° midpoints.</p> <video autoplay="" loop="" muted="" playsinline="" title="Rotation snapping"> <source src="/storage/blog/dev-snapshot-godot-4-6-dev-2/rotation-snapping.mp4?1" type="video/mp4" /> </video> <h3 id="rendering-blend-glow-before-tonemapping-and-change-default-to-screen">Rendering: Blend glow before tonemapping and change default to screen</h3> <p><abbr title="High dynamic range"><a href="https://en.wikipedia.org/wiki/High_dynamic_range">HDR</a></abbr> has been growing in prevalence as a feature in modern displays, but actual support of the feature is lagging behind somewhat. This is largely because most existing programs were designed with <abbr title="Standard RGB"><a href="https://en.wikipedia.org/wiki/SRGB">sRGB</a></abbr> in mind, and necessitate retrofitting themselves to handle HDR. This process is much easier said than done, and sometimes the effects can be invisible to the average user, meaning such advancements are rarely given a proper highlight. <a href="https://github.com/allenwp">Allen Pestaluky</a> has broken this convention, with a PR that improves visual quality for all users <strong>and</strong> sets the stage for HDR output support (<a href="https://github.com/godotengine/godot/pull/110671">GH-110671</a>).</p> <p>The first change was to blend glow before tonemapping for all rendering methods and blend modes (except soft light). While this was always the case in the Compatibility renderer, the functionality has been expanded to the Mobile and Forward+ renderers as well. Blending beforehand results in the glow effect blending in a more realistic fashion, sidestepping the hard edges and hue shifts if blended after.</p> <table> <thead> <tr> <th>Original scene</th> <th>Before tonemapping (screen, AgX, 16.29 white)</th> <th>After tonemapping (screen, AgX, 16.29 white)</th> </tr> </thead> <tbody> <tr> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-2/glow-original.jpg" alt="Original Scene" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-2/glow-before.jpg" alt="Before tonemapping (screen, AgX, 16.29 white)" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-2/glow-after.jpg" alt="After tonemapping (screen, AgX, 16.29 white)" /></td> </tr> </tbody> </table> <p>The second change was adjusting the default blend mode from soft light to screen for all renderers. This too was already the case for the Compatibility renderer, though that default was set with the behavior of blend glow before tonemapping in mind. As such, a change in the other renderers to match the new behavior is to be expected.</p> <table> <thead> <tr> <th>Renderer</th> <th>Soft light blend mode</th> <th>Screen blend mode</th> </tr> </thead> <tbody> <tr> <td>Mobile</td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-2/soft-light-blend-mobile.jpg" alt="Mobile renderer, soft light blend mode" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-2/screen-blend-mobile.jpg" alt="Mobile renderer, screen blend mode" /></td> </tr> <tr> <td>Forward+</td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-2/soft-light-blend-forward.jpg" alt="Forward+ renderer, soft light blend mode" /></td> <td><img src="/storage/blog/dev-snapshot-godot-4-6-dev-2/screen-blend-forward.jpg" alt="Forward+ renderer, screen blend mode" /></td> </tr> </tbody> </table> <div class="card card-warning"> <p>This change technically breaks compatibility since it will result in a noticeable visual change, and the previous behavior cannot be restored by simply adjusting settings. In most cases we are confident that this change in behavior will be a direct upgrade. But this change is something to be aware of if your game is using Glow at all.</p> </div> <h3 id="and-more">And more!</h3> <p>There are too many exciting changes to list them all here, but here’s a curated selection:</p> <ul> <li>Core: Add <code class="language-plaintext highlighter-rouge">reserve_exact</code> to <code class="language-plaintext highlighter-rouge">CowData</code>, and change growth factor to 1.5x (<a href="https://github.com/godotengine/godot/pull/106039">GH-106039</a>).</li> <li>Core: Add <code class="language-plaintext highlighter-rouge">reserve</code> function to <code class="language-plaintext highlighter-rouge">Array</code>, <code class="language-plaintext highlighter-rouge">Vector</code>, and <code class="language-plaintext highlighter-rouge">String</code> (<a href="https://github.com/godotengine/godot/pull/105928">GH-105928</a>).</li> <li>Core: Add unique Node IDs to support base and instantiated scene refactorings (<a href="https://github.com/godotengine/godot/pull/106837">GH-106837</a>).</li> <li>Documentation: Drop the experimental label for the Jolt Physics integration (<a href="https://github.com/godotengine/godot/pull/111115">GH-111115</a>).</li> <li>Editor: Add game speed controls to the embedded game window (<a href="https://github.com/godotengine/godot/pull/107273">GH-107273</a>).</li> <li>Editor: Add source lines to file locations on POT generation (<a href="https://github.com/godotengine/godot/pull/111419">GH-111419</a>).</li> <li>Editor: Make file part of errors/warnings clickable in Output panel (<a href="https://github.com/godotengine/godot/pull/108473">GH-108473</a>).</li> <li>Editor: Rework editor docks (<a href="https://github.com/godotengine/godot/pull/106503">GH-106503</a>).</li> <li>Editor: Store script states for built-in scripts (<a href="https://github.com/godotengine/godot/pull/93713">GH-93713</a>).</li> <li>GDScript: Add opt-in GDScript warning for when calling coroutine without <code class="language-plaintext highlighter-rouge">await</code> (<a href="https://github.com/godotengine/godot/pull/107936">GH-107936</a>).</li> <li>GUI: Add <code class="language-plaintext highlighter-rouge">pivot_offset_ratio</code> property to Control (<a href="https://github.com/godotengine/godot/pull/70646">GH-70646</a>).</li> <li>GUI: Add auto-scroll behavior when selecting text outside the visible area in RichTextLabel (<a href="https://github.com/godotengine/godot/pull/104715">GH-104715</a>).</li> <li>GUI: Visualize MarginContainer margins when selected (<a href="https://github.com/godotengine/godot/pull/111095">GH-111095</a>).</li> <li>Import: OBJ: Support bump multiplier (normal scale) (<a href="https://github.com/godotengine/godot/pull/110925">GH-110925</a>).</li> <li>Network: Add Core UNIX domain socket support (<a href="https://github.com/godotengine/godot/pull/107954">GH-107954</a>).</li> <li>Physics: Add MeshInstance3D primitive conversion options (<a href="https://github.com/godotengine/godot/pull/101521">GH-101521</a>).</li> <li>Physics: Add MultiMesh physics interpolation for 2D transforms (MultiMeshInstance2D) (<a href="https://github.com/godotengine/godot/pull/107666">GH-107666</a>).</li> <li>Rendering: Add material debanding for use in Mobile rendering method (<a href="https://github.com/godotengine/godot/pull/109084">GH-109084</a>).</li> <li>Rendering: Implement motion vectors in compatibility renderer (<a href="https://github.com/godotengine/godot/pull/97151">GH-97151</a>).</li> <li>Rendering: Make <code class="language-plaintext highlighter-rouge">OpenXRCompositionLayer</code> and its children safe for multithreaded rendering (<a href="https://github.com/godotengine/godot/pull/109431">GH-109431</a>).</li> </ul> <h2 id="changelog">Changelog</h2> <p><strong>114 contributors</strong> submitted <strong>323 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6-dev2"><strong>interactive changelog</strong></a> for the complete list of changes since <a href="/article/dev-snapshot-godot-4-6-dev-1/">4.6-dev1</a>. You can also review <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6">all changes included in 4.6</a> compared to the previous <a href="/releases/4.5/">4.5 feature release</a>.</p> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/7864ac80192e9e91bf56176af9f04cc013b580aa"><code class="language-plaintext highlighter-rouge">7864ac801</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.6-dev2"> Download Godot 4.6 dev2 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-6-dev-2.jpg" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev2&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev2&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev2&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev2&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev2&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev2&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.6-dev2"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript and GDExtension.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript and GDExtension.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <ul> <li><strong>The “Replace in Files…” function is currently broken, and will clear the contents of all files with matches when used.</strong> This issue will be fixed in the next snapshot via <a href="https://github.com/godotengine/godot/pull/112033">GH-112033</a>.</li> </ul> <p>With every release we accept that there are going to be various issues, which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug">known bugs</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part and full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by <a href="https://godot.foundation/">Godot Foundation</a>. There are also several <a href="/donate">alternative ways to donate</a> which you may find more suitable.</p> <p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p>Thaddeus CrewsMaintenance release: Godot 4.5.12025-10-15T12:00:00+00:00https://godotengine.org/article/maintenance-release-godot-4-5-1/4.5's first maintenance release arrives!<p>We saw the release of <a href="/releases/4.5/">Godot 4.5</a> less than a month ago, and have already been absolutely overwhelmed with the positive reception. Since then, our team has been hard at work on the development phase of Godot 4.6 (and subsequently its <a href="/article/dev-snapshot-godot-4-6-dev-1/">first snapshot</a>), and ensuring that any new regressions/bugs reported after the release of 4.5 are dealt with swiftly. The community has done an absolutely fantastic job at helping our team find and squash all of those aforementioned issues, and paved the way for us to deliver 4.5.1-stable for you today!</p> <p>Maintenance releases are expected to be safe for an upgrade, but we recommend to always make backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss.</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="/download/"><strong>Download Godot 4.5.1 now</strong></a> or try the <a href="https://editor.godotengine.org/4.5.1.stable/">online version of the Godot editor</a>.</p> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.5.1-stable"> Download Godot 4.5.1 stable </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/maintenance-release-godot-4-5-1.jpg" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=stable&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=stable&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=stable&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=stable&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=stable&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=stable&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.5.1-stable"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <hr /> <p><em>The illustration picture for this article comes from</em> <a href="https://store.steampowered.com/app/3245640/Starfinder_Afterlight/?curator_clanid=41324400"><strong>Starfinder: Afterlight</strong></a>, <em>a party-based RPG set in the science-fantasy universe of <a href="https://paizo.com/starfinder">Paizo’s Starfinder</a>. You can support the title on <a href="https://www.kickstarter.com/projects/epictellers/starfinder-afterlight">Kickstarter</a> and pre-order the game on <a href="https://store.steampowered.com/app/3245640/Starfinder_Afterlight/?curator_clanid=41324400">Steam</a>. You can follow the developers on <a href="https://bsky.app/profile/epictellers.bsky.social">Bluesky</a> or <a href="https://www.youtube.com/@epictellers-entertainment">YouTube</a>.</em></p> <h2 id="changes">Changes</h2> <p><strong>50 contributors</strong> submitted around <strong>92 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5.1"><strong>interactive changelog</strong></a> for the complete list of changes since the <a href="/releases/4.5/">4.5-stable release</a>.</p> <ul> <li>2D: Fix redundant calls of <code class="language-plaintext highlighter-rouge">CanvasItemEditor::_update_lock_and_group_button</code> on <code class="language-plaintext highlighter-rouge">SceneTreeEditor</code> node selection (<a href="https://github.com/godotengine/godot/pull/110320">GH-110320</a>).</li> <li>3D: GridMap: Fix cell scale not applying to the cursor mesh (<a href="https://github.com/godotengine/godot/pull/104510">GH-104510</a>).</li> <li>Animation: Fix Reset on Save corrupt poses if scene has multiple Skeletons (<a href="https://github.com/godotengine/godot/pull/110506">GH-110506</a>).</li> <li>Animation: Make extended SkeletonModifiers retrieve interpolated global transform (<a href="https://github.com/godotengine/godot/pull/110987">GH-110987</a>).</li> <li>Audio: Add one padding frame to QOA buffer for short streams (<a href="https://github.com/godotengine/godot/pull/110515">GH-110515</a>).</li> <li>Core: Change “reserve called with a capacity smaller than the current size” error message to a verbose message (<a href="https://github.com/godotengine/godot/pull/110826">GH-110826</a>).</li> <li>Core: Check for <code class="language-plaintext highlighter-rouge">NUL</code> characters in string parsing functions (<a href="https://github.com/godotengine/godot/pull/110556">GH-110556</a>).</li> <li>Core: X11 input: prevent non-printable keys from producing empty strings (<a href="https://github.com/godotengine/godot/pull/110635">GH-110635</a>).</li> <li>Documentation: Document typed dictionaries and arrays in the class reference (<a href="https://github.com/godotengine/godot/pull/107071">GH-107071</a>).</li> <li>Editor: Add column boundary check in the autocompletion (<a href="https://github.com/godotengine/godot/pull/110017">GH-110017</a>).</li> <li>Editor: Fix selection of remote tree using the keyboard (<a href="https://github.com/godotengine/godot/pull/110738">GH-110738</a>).</li> <li>Editor: Set correct saved history after clearing (<a href="https://github.com/godotengine/godot/pull/111136">GH-111136</a>).</li> <li>Export: Android: Ensure proper cleanup of the fragment (<a href="https://github.com/godotengine/godot/pull/109764">GH-109764</a>).</li> <li>Export: Metal: Fix Metal compiler version inspection (<a href="https://github.com/godotengine/godot/pull/110873">GH-110873</a>).</li> <li>Export: Windows: Fix application manifest in exported projects with modified resources (<a href="https://github.com/godotengine/godot/pull/111316">GH-111316</a>).</li> <li>GDExtension: Fix <code class="language-plaintext highlighter-rouge">--dump-extension-api-with-docs</code> indentation (<a href="https://github.com/godotengine/godot/pull/110557">GH-110557</a>).</li> <li>GDExtension: Prevent breaking compatibility for unexposed classes that can only be created once (<a href="https://github.com/godotengine/godot/pull/111090">GH-111090</a>).</li> <li>GDScript: LSP: Fix repeated restart attempts (<a href="https://github.com/godotengine/godot/pull/111290">GH-111290</a>).</li> <li>GUI: Editor font: do not embolden the Main Font if it’s variable (<a href="https://github.com/godotengine/godot/pull/110737">GH-110737</a>).</li> <li>GUI: Enforce zero width spaces and joiners with missing font. Do not warn about missing non-visual characters (<a href="https://github.com/godotengine/godot/pull/111355">GH-111355</a>).</li> <li>GUI: Fix bottom panel being unintentionally draggable (<a href="https://github.com/godotengine/godot/pull/111121">GH-111121</a>).</li> <li>GUI: Fix text servers build with disabled FreeType (<a href="https://github.com/godotengine/godot/pull/111001">GH-111001</a>).</li> <li>GUI: TextServer: Enforce zero width spaces and joiners to actually be zero width and not fallback to regular space (<a href="https://github.com/godotengine/godot/pull/111014">GH-111014</a>).</li> <li>Import: Material Conversion Error Handling (<a href="https://github.com/godotengine/godot/pull/109369">GH-109369</a>).</li> <li>Import: OBJ importer: Support bump multiplier (normal scale) (<a href="https://github.com/godotengine/godot/pull/110925">GH-110925</a>).</li> <li>Input: Fix invalid reported joypad presses (<a href="https://github.com/godotengine/godot/pull/111192">GH-111192</a>).</li> <li>Input: Fix weak and strong joypad vibration being swapped (<a href="https://github.com/godotengine/godot/pull/111191">GH-111191</a>).</li> <li>Navigation: [Navigation 2D] Fix sign of cross product (<a href="https://github.com/godotengine/godot/pull/110815">GH-110815</a>).</li> <li>Navigation: Make navmesh rasterization errors more lenient (<a href="https://github.com/godotengine/godot/pull/110841">GH-110841</a>).</li> <li>Physics: Fix bug in ManifoldBetweenTwoFaces (<a href="https://github.com/godotengine/godot/pull/110507">GH-110507</a>).</li> <li>Physics: Fix CCD bodies adding multiple contact manifolds when using Jolt (<a href="https://github.com/godotengine/godot/pull/110914">GH-110914</a>).</li> <li>Physics: Fix crash when calling <code class="language-plaintext highlighter-rouge">move_and_collide</code> with a null <code class="language-plaintext highlighter-rouge">jolt_body</code> (<a href="https://github.com/godotengine/godot/pull/110964">GH-110964</a>).</li> <li>Physics: JoltPhysics: Fix Generic6DOFJoint3D not respecting angular limits (<a href="https://github.com/godotengine/godot/pull/111087">GH-111087</a>).</li> <li>Porting: Change <code class="language-plaintext highlighter-rouge">macos.permission.RECORD_SCREEN</code> version check from 10.15 to 11.0 (<a href="https://github.com/godotengine/godot/pull/110936">GH-110936</a>).</li> <li>Porting: macOS: Always use “Regular” activation policy for GUI, and headless main loop for command line only tools (<a href="https://github.com/godotengine/godot/pull/109795">GH-109795</a>).</li> <li>Porting: Unix: Fix retrieval of PID exit code (<a href="https://github.com/godotengine/godot/pull/111058">GH-111058</a>).</li> <li>Porting: Wayland: Emulate frame event for old <code class="language-plaintext highlighter-rouge">wl_seat</code> versions (<a href="https://github.com/godotengine/godot/pull/105587">GH-105587</a>).</li> <li>Porting: Workaround X11 crash issue (<a href="https://github.com/godotengine/godot/pull/106798">GH-106798</a>).</li> <li>Rendering: Compatibility: Fix backface culling gets ignored when double-sided shadows are used (<a href="https://github.com/godotengine/godot/pull/109793">GH-109793</a>).</li> <li>Rendering: DirectX DescriptorsHeap pooling on CPU (<a href="https://github.com/godotengine/godot/pull/106809">GH-106809</a>).</li> <li>Rendering: Disable unsupported SSR, SSS, DoF on transparent viewports (<a href="https://github.com/godotengine/godot/pull/108206">GH-108206</a>).</li> <li>Rendering: Divide screen texture by luminance multiplier in compatibility (<a href="https://github.com/godotengine/godot/pull/110004">GH-110004</a>).</li> <li>Rendering: Fix D3D12 stencil buffer not clearing (<a href="https://github.com/godotengine/godot/pull/111032">GH-111032</a>).</li> <li>Rendering: Fix glow intensity not showing in compatibility renderer (<a href="https://github.com/godotengine/godot/pull/110843">GH-110843</a>).</li> <li>Rendering: Fix LightmapGI not being correctly applied to objects (<a href="https://github.com/godotengine/godot/pull/111125">GH-111125</a>).</li> <li>Rendering: Fix OpenXR with D3D12 using the wrong clip space projection matrix (<a href="https://github.com/godotengine/godot/pull/110865">GH-110865</a>).</li> <li>Rendering: Increase precision of SpotLight attenuation calculation to avoid driver bug on Intel devices (<a href="https://github.com/godotengine/godot/pull/110363">GH-110363</a>).</li> <li>Rendering: Move check for sky cubemap array back into the SkyRD initializer (<a href="https://github.com/godotengine/godot/pull/110627">GH-110627</a>).</li> <li>Rendering: OpenXR: Fix ViewportTextures not displaying correct texture (OpenGL) (<a href="https://github.com/godotengine/godot/pull/110002">GH-110002</a>).</li> <li>Rendering: Sort render list correctly in RD renderers (<a href="https://github.com/godotengine/godot/pull/111054">GH-111054</a>).</li> <li>Rendering: Windows: Try reading GPU driver information directly from registry (<a href="https://github.com/godotengine/godot/pull/109346">GH-109346</a>).</li> <li>XR: Fix late destruction access violation with OpenXRAPIExtension object (<a href="https://github.com/godotengine/godot/pull/110868">GH-110868</a>).</li> </ul> <h2 id="known-incompatibilities">Known incompatibilities</h2> <p>As of now, there are no known incompatibilities with the previous Godot 4.5 release. <strong>We encourage all users to upgrade to 4.5.1.</strong></p> <p>If you experience any unexpected behavior change in your projects after upgrading to 4.5.1, please <a href="https://github.com/godotengine/godot/issues">file an issue on GitHub</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part and full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a>.</p> <p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p>Thaddeus CrewsGodot Showcase - Material Maker2025-10-14T14:00:00+00:00https://godotengine.org/article/godot-showcase-material-maker/RodZilla talks about his experience developing Material Maker, a procedural PBR material creation tool made with Godot.<p>Today, we want to showcase <a href="https://www.materialmaker.org/">Material Maker</a>, which is an open-source application made with Godot. Material Maker is designed to create materials and textures for use in physically-based rendering (PBR). As a reminder, Godot is more than just a game engine; using its <a href="https://docs.godotengine.org/en/stable/tutorials/ui/index.html">UI building blocks</a>, it is possible to create full-featured applications for desktop, mobile and web platforms. In fact, the Godot editor is made with Godot itself!</p> <p>Material Maker had its 1.4 release in early October. This marks a significant milestone in the project, as this is the first version to be running on Godot 4. We interviewed its author, RodZilla, about how this project came to fruition and what its future might look like.</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/MOZU1MKn6zU" title="Materials created using Material Maker" frameborder="0" allowfullscreen="" style="width: 100%; aspect-ratio: 16 / 9; height: auto;"></iframe> <h2 id="can-you-tell-us-a-little-bit-about-yourself-and-your-project">Can you tell us a little bit about yourself and your project?</h2> <p>Hello, I’m Rodolphe Suescun, also known as RodZilla. I am 53, I live in Grenoble, France, and work as a senior software developer in the microelectronics industry, mostly on electronic design automation tools and embedded software.</p> <p>I’ve been into game development as a hobby for 25 years, mostly learning, experimenting, and creating prototypes.</p> <p>I started Material Maker back in 2018 because I wanted to create 3D games but was not very good at drawing textures. I put the project on GitHub and itch.io without much of a plan, and didn’t really communicate about it. Then one day, GameFromScratch made a video about my project, downloads started rising, and a community began forming, first on Reddit, then later on Discord.</p> <p>When Material Maker reached 10,000 downloads, GameFromScratch encouraged me to apply for an Epic MegaGrant, which allowed me to spend a bit more time developing the project for a few months.</p> <p>Although it is perceived as a procedural texture authoring tool, Material Maker is mainly about generating shaders which is why it has a few uncommon features, such as exporting shaders for Shadertoy, or animated or even raymarching materials for game engines. This is also what makes it so much fun to develop.</p> <p>Material Maker now has almost 250 nodes and can export to Godot, Unity, and Unreal. It is also possible to create new nodes (either by assembling existing nodes or by writing their code using <a href="https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/shading_language.html">Godot shading language</a>) and new export targets.</p> <p>Another key part of the project is the website, where artists can share the amazing materials and nodes they create. It is the best showcase of what the tool can do, and a nice source of examples for new users.</p> <p>Finally, I’m no longer alone and Material Maker has a few active contributors such as williamchange, Jowan-Spooner, and NotArme who helped a lot on the 1.4 release.</p> <h2 id="can-you-give-us-some-examples-of-games-developed-with-the-help-of-material-maker">Can you give us some examples of games developed with the help of Material Maker?</h2> <p>The first two games that come to mind are <a href="https://store.steampowered.com/app/2447980/Crown_Gambit/?curator_clanid=41324400">Crown Gambit</a> and <a href="https://store.steampowered.com/app/1344990/Zefyr_A_Thiefs_Melody/">Zefyr: A Thief’s Melody</a>, which were both released on Steam in June.</p> <p><em>Crown Gambit</em> is a narrative dark fantasy deck-building game (made with Godot!). Rachel Dufossé, who worked as a 2D/3D artist on the project, joined our Discord server two years ago, asking questions and showing her work from time to time, while actively promoting Material Maker in the studio she works for, Wild Wits Games. She ended up giving a talk about her work with Material Maker to Atlangames, the network of video game companies in her region.</p> <p><em>Zefyr: A Thief’s Melody</em> is an action-adventure game with nice Wind Waker and Beyond Good and Evil vibes. Mathias Fontmarty, the solo developer of this project, did not interact as much with the community, but gave a few talks about Material Maker at conferences (such as Capitole du Libre in Toulouse).</p> <p>Those are beautiful projects, and it is always a real pleasure to see users carry the Material Maker flag in their own way, whether by creating amazing games or by sharing their experiences.</p> <p>I can mention a few others, released or soon-to-come, such as <a href="https://store.steampowered.com/app/2053370/Chrono_Weaver/">Chrono Weaver</a>, <a href="https://store.steampowered.com/app/3697370/Beyond_The_Space_Wall/">Beyond the Space Wall</a>, <a href="https://store.steampowered.com/app/1343040/Blocky_Ball/">Blocky Ball</a>, <a href="https://store.steampowered.com/app/1839060/Polylithic/">Polylithic</a>, <a href="https://store.steampowered.com/app/2329690/KOOK/?curator_clanid=41324400">KOOK</a>, and <a href="https://store.steampowered.com/app/1171980/Neverlooted_Dungeon/">Neverlooted Dungeon</a>.</p> <p>Note to readers: the 1.4 release has a new splash screen that shows games, shaders, and materials created with Material Maker, so please feel free to contact me on Discord if you used it for your game.</p> <p><img src="/assets/showcase/material-maker/material-maker-4.webp" alt="Material Maker splash screen featuring Crown Gambit" /></p> <blockquote> <p>One of Material Maker’s many splash screens; some of them are even animated!</p> </blockquote> <h2 id="what-were-some-of-the-biggest-challenges-you-faced-during-the-development-process-and-how-did-you-overcome-them">What were some of the biggest challenges you faced during the development process, and how did you overcome them?</h2> <p>At the very beginning of the project, nodes were nearly hardcoded in GDScript and I soon realized it was a huge mistake. So I had to take a step back and come up with a generic way of describing the shader code used by nodes and assembling them. Then I added an editor for those shader nodes, which made node creation really easy.</p> <p>I am not sure it was that big of a challenge, but it took a few weeks of not touching the code, and thinking about use cases and code generation to come up with the right solution. Although shader code generation has been improved and extended since then, it has not changed that much.</p> <p>Exporting to other game engines was a bit challenging. I had to understand how they handle materials and come up with a convenient export workflow. Unreal needs a material graph and I didn’t find an easy-to-generate file format for it, so Material Maker generates a Python script that creates the graph when executed in Unreal (I know it is an ugly solution).</p> <p>This challenge is not completely solved, though. When exporting dynamic materials to Unreal and Unity, Material Maker “translates” the generated GLSL shader code to HLSL. This part will need to be rewritten at some point, based on a proper GLSL parser.</p> <p>Of course, there is optimization, mainly to decrease rendering time for generated textures. And there is still a lot more to be done.</p> <p>On the non-technical challenges side, I would say that evolving from a “lone wolf working on personal projects” mindset to interacting with a very nice community of users and contributors was not without glitches. But I guess it was a well-needed evolution.</p> <h2 id="the-project-is-under-the-mit-license-and-available-for-everyone-at-github-what-made-you-decide-to-make-the-project-free-and-open-source">The project is under the MIT license and available for everyone <a href="https://github.com/RodZill4/material-maker">at GitHub</a>. What made you decide to make the project free and open source?</h2> <p>I have been an open-source software user (and advocate) for quite some time. I think I installed Linux for the first time back in 1993. If I remember correctly, that was about 30 floppy disks.</p> <p>When I started Material Maker, it was just an experiment I intended to use to create textures, so I shared it under the MIT license, just like all prototypes you can find on my GitHub.</p> <p>And for me it is a hobby anyway, so it was never meant to be paid software.</p> <p>That said, donations pay for the domain name, the <abbr title="Virtual Private Server">VPS</abbr>, the “Apple tax”, and whatever hardware I needed to develop Material Maker and port it to all supported platforms, and I’m pretty happy with that. Huge thanks to everyone who supports this project!</p> <p><img src="/assets/showcase/material-maker/material-maker-2.webp" alt="Beehive material graph and preview" /></p> <blockquote> <p>Material showcased: <em>Beehive</em> by RodZilla (included in the <code class="language-plaintext highlighter-rouge">examples/</code> folder with Material Maker)</p> </blockquote> <h2 id="how-did-you-discover-godot-what-made-you-pick-it-for-your-project">How did you discover Godot? What made you pick it for your project?</h2> <p>It is really funny that I discovered Godot just like Material Maker gained its current visibility. I discovered this game engine while watching a video from GameFromScratch covering Godot around the time it went open-source.</p> <p>I tried it for a few very small game prototypes (including one featuring a silly mouse for my very first game jam) and I must admit it immediately clicked for me. Godot was far from what it would become, but I already loved the nodes approach and how natural the overall design felt.</p> <p>I’ve been using Godot for all my game development projects and prototypes ever since, and it consistently proves easy and efficient to work with.</p> <h2 id="material-maker-14-is-the-first-version-to-be-running-on-godot-4-what-upgrades-does-godot-4-bring-to-your-project">Material Maker 1.4 is the first version to be running on Godot 4. What upgrades does Godot 4 bring to your project?</h2> <p>The main change that Godot 4 brings is compute shaders which give a lot more flexibility for shader generation and help improve performance. I also used them to introduce new generated meshes (rounded cube and cylinder) to replace the default ones.</p> <p>Support for multiple windows made it possible for me to add flexible layout with undockable panels, and I will probably expose this part as a Godot addon so other application developers can reuse it.</p> <p>I also started using the new GDScript features (mainly typed arrays and dictionaries), but it will take a long time before all of Material Maker’s code is updated.</p> <p><img src="/assets/showcase/material-maker/material-maker-3.webp" alt="Pavement Generator material preview" /></p> <blockquote> <p>Material showcased: <a href="https://www.materialmaker.org/material?id=548"><em>Pavement Generator</em> by Tarox</a></p> </blockquote> <h2 id="what-challenges-have-you-encountered-while-upgrading-the-project-to-godot-4-what-would-you-like-to-see-implemented">What challenges have you encountered while upgrading the project to Godot 4? What would you like to see implemented?</h2> <p>The main challenge for me was learning the new <a href="https://docs.godotengine.org/en/stable/classes/class_renderingserver.html">RenderingServer</a> and <a href="https://docs.godotengine.org/en/stable/classes/class_renderingdevice.html">RenderingDevice</a> and finding out how to best use compute shaders for Material Maker’s use cases. Also, API changes between releases have been a bit annoying, but that’s the price to pay when using bleeding edge releases.</p> <p>The only thing I’m missing for Material Maker is support for saving EXR files in the release templates. I currently have to use custom-built templates for Material Maker. This is not much of an annoyance since I only have to recompile Godot whenever I use a new release.</p> <p>But speaking of possible improvements for Godot, while doing game jams with my team, we noticed Godot makes it hard for audio designers to do their job without diving into the whole Godot project (since sounds are triggered wherever there is an AudioStreamPlayer node). I wrote a small addon (called TRAudio and <a href="https://github.com/RodZill4/TRAudio">available on my GitHub</a>) that tries to bridge the gap between the audio designer and the software developer, but I think Godot would benefit from supporting this natively. The addon is OK in most use cases, but triggering sounds in animations is not as convenient as it could be.</p> <h2 id="do-you-have-any-new-features-or-improvements-in-mind-for-material-maker-in-the-future">Do you have any new features or improvements in mind for Material Maker in the future?</h2> <p>Of course, Material Maker has a roadmap, but I generally do not communicate much about it so I do not promise anything my limited free time does not allow.</p> <p>That said, Material Maker 1.0 (and all previous releases) were about delivering a nice toolkit for creating seamlessly tileable materials. And 2.0 will focus on texturing 3D models (and 1.4 is a step in that direction with the new Mesh Map node).</p> <p>The painting tool in Material Maker is a nice prototype and can do quite a few impressive things (brushes are completely procedural and described by connecting nodes), and in 1.4, all PBR channels can be painted by a single compute shader. But it becomes way too slow with complex brushes, and the end result of each stroke is stored in the final textures of the painted layer. So we start with a procedural brush, and lose the procedural aspect while painting (which defeats the purpose of the approach).</p> <p>So instead of improving the current painting tool, I’m thinking of introducing very basic painting features in the material authoring tool. By “very basic”, I mean painting simple masks that can be applied to parts of the graph, or UV maps that will help place a procedural shape or pattern using a CustomUV node. Thus painting would become a guide for procedural generation, which would allow an interactive yet nearly non-destructive workflow for texturing models.</p> <p>And in the short term, the <a href="https://rodzill4.github.io/material-maker/doc/node_simple_easy_sdf.html">EasySDF node and its corresponding dialog</a> (that is used to edit 2D and 3D Signed Distance Functions) will get an update, on both UI and code generation sides.</p> <p><img src="/assets/showcase/material-maker/material-maker-1.webp" alt="Broken Floor material graph and preview" /></p> <blockquote> <p>Material showcased: <a href="https://www.materialmaker.org/material?id=975"><em>Broken Floor</em> by Tarox</a></p> </blockquote> <h2 id="how-can-one-learn-to-use-material-maker">How can one learn to use Material Maker?</h2> <p>This is probably the weakest point of this project. There are <a href="https://www.youtube.com/watch?v=mSuyrsJSZ_o&amp;list=PLI2XkW0E3DLhYDu30nxSiUsdBS-ziIbbo">nice video tutorials made by Kasper Arnklit Frandsen</a> and <a href="https://www.youtube.com/watch?v=yKQRfrxJRLM">a few more advanced ones by Pavel Oliva</a>, but they are a bit old. It is also possible to follow Substance Designer tutorials; the nodes are different, but the concepts are the same.</p> <p>Another great way to learn is to <a href="https://www.materialmaker.org/materials">grab materials from the website</a> and study their graph.</p> <p>In any case, you probably want to <a href="https://discord.gg/RnHgQS9Nqq">join our Discord server</a>. Material Maker has a very nice and welcoming community.</p> <p>Material Maker definitely needs a few good-quality “official” video tutorials and I really need to make sure they happen.</p> <h2 id="thank-you-for-sharing-your-experience-using-godot-is-there-anything-you-would-like-to-plug">Thank you for sharing your experience using Godot. Is there anything you would like to plug?</h2> <p>Although I mainly mentioned Material Maker, I recently participated in six <a href="https://godotwildjam.com/">Godot Wild Jams</a>, followed by a <a href="https://itch.io/jam/godot-xr-game-jam-sep-2025">Godot XR Game Jam</a>, with a truly awesome team (now named Cularo Games). We’re now planning to push one of those projects further. The lone wolf in me will soon be gone for good.</p> <hr /> <p>Thank you RodZilla for taking the time to answer our questions! We look forward to the future of Material Maker.</p> <p><a href="https://www.materialmaker.org/">Material Maker</a> is free and open-source. It can be downloaded for Windows, macOS, and Linux on <a href="https://rodzilla.itch.io/material-maker">itch.io</a>. Along with the <a href="https://github.com/RodZill4/material-maker">GitHub repository</a>, there is also a <a href="https://www.reddit.com/r/MaterialMaker/">subreddit</a> and <a href="https://discord.gg/RnHgQS9Nqq">Discord server</a> you can join to interact with its community.</p>Hugo LocurcioRelease candidate: Godot 4.5.1 RC 22025-10-08T12:00:00+00:00https://godotengine.org/article/release-candidate-godot-4-5-1-rc-2/Hotfixes so nice, we added 'em twice!<p>Last week saw our first <a href="https://en.wikipedia.org/wiki/Software_release_life_cycle#Release_candidate">Release Candidate</a> snapshot for <a href="/article/release-candidate-godot-4-5-1-rc-1/">4.5.1</a>, and in that time there have been even more critical bugfixes suitable for backporting. As such, we’re doing one more pass for good measure: 4.5.1-rc2 has arrived! Our top priority is ensuring the hotfix release is as stable as possible, so be sure to test and report any issues that aren’t present in 4.5-stable.</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/4.5.1.rc2/"><strong>Web editor</strong></a>, the <a href="https://www.meta.com/s/6Ls6Bfa34"><strong>XR editor</strong></a>, or the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4"><strong>Android editor</strong></a> for this release. If you are interested in the latter, please request to join <a href="https://groups.google.com/g/godot-testers">our testing group</a> to get access to pre-release builds.</p> <hr /> <p><em>The illustration picture for this article comes from</em> <a href="https://store.steampowered.com/app/3208560/Trainatic/?curator_clanid=41324400"><strong>Trainatic</strong></a>, <em>a cozy(?) game where you guide your train through a procedurally-generated world, unlocking powerful synergies and skilltrees to aid your unyielding destruction. You can buy the game on <a href="https://store.steampowered.com/app/3208560/Trainatic/?curator_clanid=41324400">Steam</a>, and follow the developer on <a href="https://bsky.app/profile/ryanforrester.bsky.social">Bluesky</a> or <a href="https://www.youtube.com/@RyanForresterDev">YouTube</a>.</em></p> <h2 id="whats-new">What’s new</h2> <p><strong>31 contributors</strong> submitted <strong>45 improvements</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5.1-rc2"><strong>interactive changelog</strong></a> for the complete list of changes since the 4.5.1-rc1 release. You can also review <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5.1">all changes included in 4.5.1</a> compared to the previous 4.5 feature release.</p> <ul> <li>2D: Fix redundant calls of <code class="language-plaintext highlighter-rouge">CanvasItemEditor::_update_lock_and_group_button</code> on <code class="language-plaintext highlighter-rouge">SceneTreeEditor</code> node selection (<a href="https://github.com/godotengine/godot/pull/110320">GH-110320</a>).</li> <li>3D: GridMap: Fix cell scale not applying to the cursor mesh (<a href="https://github.com/godotengine/godot/pull/104510">GH-104510</a>).</li> <li>Animation: Fix backward/pingpong root motion in AnimationTree (<a href="https://github.com/godotengine/godot/pull/110982">GH-110982</a>).</li> <li>Animation: Fix Reset on Save corrupt poses if scene has multiple Skeletons (<a href="https://github.com/godotengine/godot/pull/110506">GH-110506</a>).</li> <li>Animation: Make extended SkeletonModifiers retrieve interpolated global transform (<a href="https://github.com/godotengine/godot/pull/110987">GH-110987</a>).</li> <li>Core: Change “reserve called with a capacity smaller than the current size” error message to a verbose message (<a href="https://github.com/godotengine/godot/pull/110826">GH-110826</a>).</li> <li>Documentation: Fix and improve <code class="language-plaintext highlighter-rouge">Node2D.move_local_{x,y}()</code> description (<a href="https://github.com/godotengine/godot/pull/110878">GH-110878</a>).</li> <li>Editor: Add column boundary check in the autocompletion (<a href="https://github.com/godotengine/godot/pull/110017">GH-110017</a>).</li> <li>Editor: Fix <code class="language-plaintext highlighter-rouge">DPITexture</code> editor icon name (<a href="https://github.com/godotengine/godot/pull/110661">GH-110661</a>).</li> <li>Editor: Fix Quick Open history (<a href="https://github.com/godotengine/godot/pull/111068">GH-111068</a>).</li> <li>Editor: Fix selection of remote tree using the keyboard (<a href="https://github.com/godotengine/godot/pull/110738">GH-110738</a>).</li> <li>Editor: Fix the project file was not updated when some files were removed (<a href="https://github.com/godotengine/godot/pull/110576">GH-110576</a>).</li> <li>Editor: Set correct saved history after clearing (<a href="https://github.com/godotengine/godot/pull/111136">GH-111136</a>).</li> <li>Editor: Tweak macOS notarization export message in the editor (<a href="https://github.com/godotengine/godot/pull/110793">GH-110793</a>).</li> <li>Export: Windows: Fix application manifest in exported projects with modified resources (<a href="https://github.com/godotengine/godot/pull/111316">GH-111316</a>).</li> <li>GDExtension: Prevent breaking compatibility for unexposed classes that can only be created once (<a href="https://github.com/godotengine/godot/pull/111090">GH-111090</a>).</li> <li>GDScript: LSP: Fix repeated restart attempts (<a href="https://github.com/godotengine/godot/pull/111290">GH-111290</a>).</li> <li>GUI: Editor font: do not embolden the Main Font if it’s variable (<a href="https://github.com/godotengine/godot/pull/110737">GH-110737</a>).</li> <li>GUI: Enforce zero width spaces and joiners with missing font. Do not warn about missing non-visual characters (<a href="https://github.com/godotengine/godot/pull/111355">GH-111355</a>).</li> <li>GUI: Fix bottom panel being unintentionally draggable (<a href="https://github.com/godotengine/godot/pull/111121">GH-111121</a>).</li> <li>GUI: Fix LineEdit’s placeholder text being selected when double clicking (<a href="https://github.com/godotengine/godot/pull/110886">GH-110886</a>).</li> <li>GUI: Fix text servers build with disabled FreeType (<a href="https://github.com/godotengine/godot/pull/111001">GH-111001</a>).</li> <li>GUI: TextServer: Enforce zero width spaces and joiners to actually be zero width and not fallback to regular space (<a href="https://github.com/godotengine/godot/pull/111014">GH-111014</a>).</li> <li>Import: OBJ importer: Support bump multiplier (normal scale) (<a href="https://github.com/godotengine/godot/pull/110925">GH-110925</a>).</li> <li>Input: Fix invalid reported joypad presses (<a href="https://github.com/godotengine/godot/pull/111192">GH-111192</a>).</li> <li>Input: Fix weak and strong joypad vibration being swapped (<a href="https://github.com/godotengine/godot/pull/111191">GH-111191</a>).</li> <li>Physics: Fix crash when calling <code class="language-plaintext highlighter-rouge">move_and_collide</code> with a null <code class="language-plaintext highlighter-rouge">jolt_body</code> (<a href="https://github.com/godotengine/godot/pull/110964">GH-110964</a>).</li> <li>Physics: JoltPhysics: Fix Generic6DOFJoint3D not respecting angular limits (<a href="https://github.com/godotengine/godot/pull/111087">GH-111087</a>).</li> <li>Porting: Change <code class="language-plaintext highlighter-rouge">macos.permission.RECORD_SCREEN</code> version check from 10.15 to 11.0 (<a href="https://github.com/godotengine/godot/pull/110936">GH-110936</a>).</li> <li>Porting: macOS: Always use “Regular” activation policy for GUI, and headless main loop for command line only tools (<a href="https://github.com/godotengine/godot/pull/109795">GH-109795</a>).</li> <li>Porting: Unix: Fix retrieval of PID exit code (<a href="https://github.com/godotengine/godot/pull/111058">GH-111058</a>).</li> <li>Porting: Wayland: Emulate frame event for old <code class="language-plaintext highlighter-rouge">wl_seat</code> versions (<a href="https://github.com/godotengine/godot/pull/105587">GH-105587</a>).</li> <li>Porting: Wayland: Inhibit idle in DisplayServerWayland::screen_set_keep_on (<a href="https://github.com/godotengine/godot/pull/110875">GH-110875</a>).</li> <li>Rendering: Divide screen texture by luminance multiplier in compatibility (<a href="https://github.com/godotengine/godot/pull/110004">GH-110004</a>).</li> <li>Rendering: Fix glow intensity not showing in compatibility renderer (<a href="https://github.com/godotengine/godot/pull/110843">GH-110843</a>).</li> <li>Rendering: Fix LightmapGI not being correctly applied to objects (<a href="https://github.com/godotengine/godot/pull/111125">GH-111125</a>).</li> </ul> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/69796bf7d67599b21308fb54723ed53a84e2e335"><code class="language-plaintext highlighter-rouge">69796bf7d</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.5.1-rc2"> Download Godot 4.5.1 rc2 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/release-candidate-godot-4-5-1-rc-2.webp" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=rc2&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=rc2&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=rc2&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=rc2&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=rc2&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=rc2&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.5.1-rc2"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript and GDExtension.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript and GDExtension.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <p>During the Release Candidate stage, we focus exclusively on solving showstopping regressions (i.e. something that worked in a previous release is now broken, without workaround). You can have a look at our current <a href="https://github.com/orgs/godotengine/projects/61">list of regressions and significant issues</a> which we aim to address before releasing 4.5.1. This list is dynamic and will be updated if we discover new showstopping issues after more users start testing the RC snapshots.</p> <p>With every release we accept that there are going to be various issues, which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug+">known bugs</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part and full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a>.</p> <p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p>Thaddeus CrewsRelease candidate: Godot 4.5.1 RC 12025-10-02T12:00:00+00:00https://godotengine.org/article/release-candidate-godot-4-5-1-rc-1/Regression fixes coming in hot!<p>It’s been just over two weeks since the release of <a href="/releases/4.5/">Godot 4.5</a>, and the overwhelmingly positive community response has been an absolute treat to behold! Our hard-working contributors have taken this energy to kick-start the development phase of Godot 4.6, resulting in our <a href="/article/dev-snapshot-godot-4-6-dev-1/">first snapshot</a> coming out earlier this week.</p> <p>In saying that, the main focus was always going to be hammering out newly reported regressions encountered in the 4.5 release, and integrating any fixes deemed too risky to merge at the time. As such, we’ve already prepared a healthy number of regression fixes for a 4.5.1 maintenance release. This release candidate is intended to validate the fixes in an environment isolated from the new enhancements and features that 4.6 is already boasting. Your testing is crucial to detect and squash any new issues that weren’t present in 4.5-stable, in order to ensure that this hotfix is as clean of an upgrade as possible.</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/4.5.1.rc1/"><strong>Web editor</strong></a>, the <a href="https://www.meta.com/s/6Ls6Bfa34"><strong>XR editor</strong></a>, or the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4"><strong>Android editor</strong></a> for this release. If you are interested in the latter, please request to join <a href="https://groups.google.com/g/godot-testers">our testing group</a> to get access to pre-release builds.</p> <hr /> <p><em>The illustration picture for this article comes from</em> <a href="https://store.steampowered.com/app/3361510/Coal_LLC/?curator_clanid=41324400"><strong>Coal LLC</strong></a>, <em>a capitalism simulator where you fulfill increasingly absurd quotas through increasingly dubious methods. You can buy the game or try out the demo on <a href="https://store.steampowered.com/app/3361510/Coal_LLC/?curator_clanid=41324400">Steam</a>, and follow the developers on their <a href="https://www.byebyeocean.net/">website</a>.</em></p> <h2 id="whats-new">What’s new</h2> <p><strong>31 contributors</strong> submitted <strong>33 improvements</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5.1-rc1"><strong>interactive changelog</strong></a> for the complete list of changes since the 4.5-stable release.</p> <ul> <li>Audio: Add one padding frame to QOA buffer for short streams (<a href="https://github.com/godotengine/godot/pull/110515">GH-110515</a>).</li> <li>Buildsystem: Windows: Migrate <code class="language-plaintext highlighter-rouge">godot.manifest</code> to <code class="language-plaintext highlighter-rouge">platform/windows</code>, include as dependency (<a href="https://github.com/godotengine/godot/pull/110897">GH-110897</a>).</li> <li>Core: Avoid repeated <code class="language-plaintext highlighter-rouge">_copy_on_write()</code> calls in <code class="language-plaintext highlighter-rouge">Array::resize()</code> (<a href="https://github.com/godotengine/godot/pull/110535">GH-110535</a>).</li> <li>Core: Check for <code class="language-plaintext highlighter-rouge">NUL</code> characters in string parsing functions (<a href="https://github.com/godotengine/godot/pull/110556">GH-110556</a>).</li> <li>Core: X11 input: prevent non-printable keys from producing empty strings (<a href="https://github.com/godotengine/godot/pull/110635">GH-110635</a>).</li> <li>Documentation: Clarify that velocity doesn’t need delta multiplication in CharacterBody documentation (<a href="https://github.com/godotengine/godot/pull/109925">GH-109925</a>).</li> <li>Documentation: Document the interaction between Light3D cull mask and GI/volumetric fog (<a href="https://github.com/godotengine/godot/pull/110423">GH-110423</a>).</li> <li>Documentation: Document typed dictionaries and arrays in the class reference (<a href="https://github.com/godotengine/godot/pull/107071">GH-107071</a>).</li> <li>Documentation: Fix Basis.determinant() doc: uniform scale determinant is scale^3 (<a href="https://github.com/godotengine/godot/pull/110424">GH-110424</a>).</li> <li>Editor: Correct the order of Diagonal Mode in Add Property (<a href="https://github.com/godotengine/godot/pull/109214">GH-109214</a>).</li> <li>Editor: Fix typos in BlendSpace2D editor’s axis labels’ accessibility names (<a href="https://github.com/godotengine/godot/pull/109847">GH-109847</a>).</li> <li>Export: Android: Ensure proper cleanup of the fragment (<a href="https://github.com/godotengine/godot/pull/109764">GH-109764</a>).</li> <li>Export: Metal: Fix Metal compiler version inspection (<a href="https://github.com/godotengine/godot/pull/110873">GH-110873</a>).</li> <li>GDExtension: Fix <code class="language-plaintext highlighter-rouge">--dump-extension-api-with-docs</code> indentation (<a href="https://github.com/godotengine/godot/pull/110557">GH-110557</a>).</li> <li>GUI: Fix LineEdit icon positon in right-to-left layout (<a href="https://github.com/godotengine/godot/pull/109363">GH-109363</a>).</li> <li>Import: Material Conversion Error Handling (<a href="https://github.com/godotengine/godot/pull/109369">GH-109369</a>).</li> <li>Navigation: [Navigation 2D] Fix sign of cross product (<a href="https://github.com/godotengine/godot/pull/110815">GH-110815</a>).</li> <li>Navigation: Make navmesh rasterization errors more lenient (<a href="https://github.com/godotengine/godot/pull/110841">GH-110841</a>).</li> <li>Physics: Fix bug in ManifoldBetweenTwoFaces (<a href="https://github.com/godotengine/godot/pull/110507">GH-110507</a>).</li> <li>Physics: Fix CCD bodies adding multiple contact manifolds when using Jolt (<a href="https://github.com/godotengine/godot/pull/110914">GH-110914</a>).</li> <li>Porting: Workaround X11 crash issue (<a href="https://github.com/godotengine/godot/pull/106798">GH-106798</a>).</li> <li>Rendering: Compatibility: Fix backface culling gets ignored when double-sided shadows are used (<a href="https://github.com/godotengine/godot/pull/109793">GH-109793</a>).</li> <li>Rendering: DirectX DescriptorsHeap pooling on CPU (<a href="https://github.com/godotengine/godot/pull/106809">GH-106809</a>).</li> <li>Rendering: Disable unsupported SSR, SSS, DoF on transparent viewports (<a href="https://github.com/godotengine/godot/pull/108206">GH-108206</a>).</li> <li>Rendering: Fix d3d12 stencil buffer not clearing (<a href="https://github.com/godotengine/godot/pull/111032">GH-111032</a>).</li> <li>Rendering: Fix OpenXR with D3D12 using the wrong clip space projection matrix (<a href="https://github.com/godotengine/godot/pull/110865">GH-110865</a>).</li> <li>Rendering: Increase precision of SpotLight attenuation calculation to avoid driver bug on Intel devices (<a href="https://github.com/godotengine/godot/pull/110363">GH-110363</a>).</li> <li>Rendering: Move check for sky cubemap array back into the SkyRD initializer (<a href="https://github.com/godotengine/godot/pull/110627">GH-110627</a>).</li> <li>Rendering: OpenXR: Fix ViewportTextures not displaying correct texture (OpenGL) (<a href="https://github.com/godotengine/godot/pull/110002">GH-110002</a>).</li> <li>Rendering: Sort render list correctly in RD renderers (<a href="https://github.com/godotengine/godot/pull/111054">GH-111054</a>).</li> <li>Rendering: Windows: Try reading GPU driver information directly from registry (<a href="https://github.com/godotengine/godot/pull/109346">GH-109346</a>).</li> <li>XR: Fix late destruction access violation with OpenXRAPIExtension object (<a href="https://github.com/godotengine/godot/pull/110868">GH-110868</a>).</li> </ul> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/c834443ef1fa3516e30124d8afaf448353d31010"><code class="language-plaintext highlighter-rouge">c834443ef</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.5.1-rc1"> Download Godot 4.5.1 rc1 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/release-candidate-godot-4-5-1-rc-1.webp" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=rc1&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=rc1&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=rc1&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=rc1&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=rc1&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5.1&amp;flavor=rc1&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.5.1-rc1"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript and GDExtension.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript and GDExtension.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <p>During the Release Candidate stage, we focus exclusively on solving showstopping regressions (i.e. something that worked in a previous release is now broken, without workaround). You can have a look at our current <a href="https://github.com/orgs/godotengine/projects/61">list of regressions and significant issues</a> which we aim to address before releasing 4.5.1. This list is dynamic and will be updated if we discover new showstopping issues after more users start testing the RC snapshots.</p> <p>With every release we accept that there are going to be various issues, which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug+">known bugs</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part and full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a>.</p> <p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p>Thaddeus CrewsLooking back at GodotCon US 20252025-10-01T14:00:00+00:00https://godotengine.org/article/godotcon-us-2025-wrapup/It's time for a summary of GodotCon Boston now that all talks are available on Youtube.<p>As you might know, this year we hosted our first US-based GodotCon in Boston. Taking place at the tail end of spring, this was three solid days focused solely on making games with the Godot Engine. Our first day had hands-on workshops followed by two days of talks. For our inaugural event we had:</p> <ul> <li>Over 300 attendees.</li> <li>Over 100 proposals.</li> <li>38 talks.</li> <li>14 showcases.</li> <li>3 great days.</li> </ul> <p>GodotCon was run by members of the Boston Godot User Group and Boston Game Dev in co-ordination with the Godot Foundation during <a href="https://gamedev.boston/">Boston Gamedev Week</a>. From May 5th to May 7th we had three days of Godot-focused content at the Microsoft New England Research and Development Center (NERD Center!). A huge thanks to Microsoft for generously donating the space. This would not have been possible without them and their commitment to supporting non-profits and open-source software.</p> <p><img src="/storage/blog/godotcon-us-2025/56bdd110020250506091817.webp" alt="Emi giving the opening keynote at the Microsoft NERD Center." /></p> <p>And while we’re at it, a huge thanks to all of our sponsors: <a href="https://www.arm.com/">Arm Technology</a>, <a href="https://www.endlessglobal.com/the-endless-foundation">Endless Foundation</a>, <a href="https://www.w4games.com/">W4 Games</a>, <a href="https://mikeklubnika.com/">Mike Klubnika</a>, <a href="https://xogot.com/">Xogot</a>, <a href="https://www.binarysolo.com/">Binary Solo</a>, and <a href="https://dislamedia.com/">Disla Media</a>. Without them a conference like this would not be possible.</p> <h2 id="the-format">The format</h2> <p>For our first US-based GodotCon, we committed to three days of programming. The first day we had five different workshops that covered a host of interesting topics. <a href="https://www.youtube.com/watch?v=tK2ACXUGcrY">Travis Hunter</a> walked folks through their first multiplayer experience with an incredibly fun grand finale where everyone got to play their game together. <a href="https://www.youtube.com/watch?v=JqL_oZ9SG7Q">Scott Doxey</a> showed us how to make a gdextension, end-to-end. <a href="https://www.youtube.com/watch?v=wWD7OCx7tNs">Simon</a> taught us way more than we ever needed to know about how Markov Chains work and how we can apply that to our projects. <a href="https://www.youtube.com/watch?v=k1GvvrkIq-8">Jesse (CoderNunk)</a> gave us a method for doing anime-style 3D characters using Blender. <a href="https://www.youtube.com/watch?v=f0CsbuHDr44">Nicholas O’Brien</a> went into incredible depth on narrative design.</p> <p>On days 2 and 3, we got an amazing batch of talks and updates. You may have heard <a href="https://www.youtube.com/watch?v=u_WMJG0menc">Adam</a> talk about how the team got C# web exports working. <a href="https://www.youtube.com/watch?v=fiyf4XPanf4">Acerola</a> took us super in-depth with Compositor Effects. We got a inside look at converting <a href="https://www.youtube.com/watch?v=MEZoKKAoUAU">Domekeeper to multiplayer</a>. And some dufus even talked about <a href="https://www.youtube.com/watch?v=qoCWp_oP9Ng">making games on your phone</a>. All in all, there was a wide berth of topics from folks from the entire Godot community.</p> <p><img src="/storage/blog/godotcon-us-2025/56bdd11001234567891233.webp" alt="Julian, AKA StayAtHomeDev, talking about growing a YouTube audience." /></p> <p>We’re happy to say that we have finally released all of the videos from GodotCon for free on YouTube; everything from lightning talks to workshops!</p> <p><a href="https://www.youtube.com/watch?v=fiyf4XPanf4&amp;list=PLeG_dAglpVo5oOrjQqDTMQadVDqe1Zsom">🔗 Watch them all here</a></p> <h2 id="the-showcase">The showcase</h2> <p>In addition to the talks and workshops, we were able to put on a small games showcase.</p> <p><img src="/storage/blog/godotcon-us-2025/56bdd1100171748217.jpg" alt="Shot of the Garage, our showcase venue, filled with people playing games." /></p> <p>In no particular order:</p> <ul> <li><a href="https://store.steampowered.com/app/1941420/Burrito_Bear/">Burrito Bear by SpaceOrca</a>: Eat burritos, avoid garbage in three bold, beautiful, shiny dimensions.</li> <li><a href="https://store.steampowered.com/app/3660860/Turnip_Boy_Steals_the_Mail/">Turnip Boy Steals the Mail by Snoozy Kanoo</a>: A free new Turnip Boy adventure.</li> <li><a href="https://store.steampowered.com/app/1712700/Memori/">Memori by PracticalNPC</a>: A precision pixel platformer with challenging puzzles.</li> <li><a href="https://store.steampowered.com/app/2477750/Dunderbeck/">Dunderbeck by RUST LTD</a>: Fight, build, and eat your way across the mythical land of Cincinatti.</li> <li><a href="https://store.steampowered.com/app/2840590/no_signal/">no signal by exodrifter</a>: An emotional point-and-click hard sci-fi adventure.</li> <li><a href="https://store.steampowered.com/app/3293350/Dantes_9/">Dante’s 9 by John D</a>: A roguelite action-platformer fused with a deckbuilder.</li> <li><a href="https://store.steampowered.com/app/3186280/Dukkido/">Dukkido by MariSuCho</a>: A physics-based action-RTS, featuring large handcrafted levels and dungeons.</li> <li><a href="https://store.steampowered.com/app/3211750/Neongarten/">Neongarten by Moonroof Studios</a>: A minimalist cyberpunk city builder.</li> <li><a href="https://www.comfymitten.games/devlog/turntide-tales">TurnTide Tales by Comfy Mitten</a>: An epic swashbuckling adventure across the high seas with a daring crew.</li> </ul> <p><img src="/storage/blog/godotcon-us-2025/56bdd11005214.webp" alt="Someone playing on a controller at the Turnip Boy Steals the Mail table." /></p> <p>We also had some other cool stuff on display!</p> <ul> <li><a href="https://xogot.com/">Xogot</a>: The Godot editor on an iPad native interface.</li> <li><a href="https://www.youtube.com/watch?v=b-NQg4g9o0Q">Sweet Spot</a>: An interactive art exhibit by Michael Berthaud.</li> <li><a href="https://migeran.com/">Godot Beyond Games</a>: Migeran showed their AR / VR / XR / Mobile / Web / Robotics uses of Godot Engine for non-game work.</li> <li><a href="https://www.endlessglobal.com/foundation/access">Endless Access</a>: An education platform with lots of neat Godot integrations.</li> </ul> <p>Many thanks go to our small group of volunteers who helped everything run smoothly. Volunteers who did tons of design work. Volunteers who helped talks run smoothly. Volunteers who basically lived at the badge and merch tables and helped us pack our awesome swag bags.</p> <p><img src="/storage/blog/godotcon-us-2025/56bdd110020250508221757.webp" alt="A table of goods collected at GodotCon. Godot branded tote, Buckshot Roulette sticker packs, cards and stickers from the showcase games, badge, pins, and the GodotCon Anthology Mixtape" /><img src="/storage/blog/godotcon-us-2025/56bdd11005193.webp" alt="A close-up shot of the GodotCon T-shirt that was for sale." /></p> <p>(Speaking of swag bags, how cool was our awesome Anthology “cassette” that included games, demos, and experiments by our speakers and showcasers!?)</p> <p><img src="/storage/blog/godotcon-us-2025/56bdd110020250506231922551.webp" alt="A glamour shot of the GodotCon Anthology Mixtape." /></p> <h1 id="the-future">The future</h1> <p>When we first mentioned GodotCon Boston, folks were disappointed at the thought of missing a Godot event in Europe. Well, let that thought drift away. Although the name might be different, we’ve got Europe’s Godot Engine event, <a href="https://godotfest.com/">GodotFest happening in November</a>, and the Godot Foundation has already started organizing the GodotCon EU 2026. Get your tickets for GodotFest now! The prices were just lowered, but they go up starting in October.</p> <p><em>But what about GodotCon in the US!?</em></p> <p>You’re hearing it here first. GodotCon US will take place in <strong>Boston</strong> again next year. Putting on GodotCon to this level takes a large effort. The Boston Godot User Group put on a well-organized event. This time they have an entire year to prepare for something even bigger and better.</p> <p><em>Do you want to put on the next GodotCon in your city?</em> Let’s make it happen! Reach out and get a conversation started. GodotCon loves to travel, but there are a few things we’d prefer to see from a potential GodotCon site:</p> <ul> <li>An experienced, dedicated game development group. It’s hard to trust a group that hasn’t been around for a year to stick together for another. (Besides, you need a large pool of volunteers!)</li> <li>Some organizing experience.</li> <li>Somewhere easy to travel to.</li> </ul> <p>Our GodotCon organizers would love to work with you and get you to successfully host an event.</p> <h1 id="the-support">The support</h1> <p>If you’d like to help keep GodotCon running, please consider <a href="https://fund.godotengine.org/">supporting the Godot Foundation</a>. Our goal for these events is always to try and keep the cost low so that more of the community can participate. Financial support from the Godot Foundation and sponsorships helps us to do so.</p>Chad StewartDev snapshot: Godot 4.6 dev 12025-09-30T12:00:00+00:00https://godotengine.org/article/dev-snapshot-godot-4-6-dev-1/The calm before the storm…<p>The first development snapshot for 4.6 has arrived! As is often the case for our first development snapshot, a significant portion of quality PRs from our backlog are finally able to see the light of day, as they were either locked out from the 4.5 feature freeze or deemed too risky to merge for the stable release. In saying that though, this is <em>by far</em> the biggest our backlog has ever been, so getting it all in for an initial snapshot was unrealistic. As such, while this may mean a slower trickle of PRs initially, you can expect future development snapshots to further expand on the foundation that this release sets.</p> <p>The overwhelming majority of changes this time around are bugfixes, with most already slated to be backported to 4.5.1-stable in the very near future! In a sense, this release is serving not only as a foundation for 4.6, but for 4.5.1 as well; meaning, testing this build is crucial to ensure a smooth release for both. However, we’ve already got quite a few enhancements and features integrated that will remain exclusive to 4.6, so those wishing to stick with 4.5 may want to hold out for 4.5.1-rc1 coming later this week.</p> <p>As usual, safety precautions should be taken with any pre-release environment. While we prepare these snapshots with the intent to be suitable for general testing, there will always be a non-zero risk of data loss/corruption. Creating backups before hand and/or utilizing version control are strongly recommended!</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/4.6.dev1/"><strong>Web editor</strong></a>, the <a href="https://www.meta.com/s/3yJ7i8kop"><strong>XR editor</strong></a>, or the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4"><strong>Android editor</strong></a> for this release. If you are interested in the latter, please request to join <a href="https://groups.google.com/g/godot-testers">our testing group</a> to get access to pre-release builds.</p> <hr /> <p><em>The cover illustration is from</em> <a href="https://store.steampowered.com/app/2256450/RAM_Random_Access_Mayhem/?curator_clanid=41324400"><strong>RAM: Random Access Mayhem</strong></a>, <em>a rougelike where you play as the enemies. You can buy the game or try out the demo on <a href="https://store.steampowered.com/app/2256450/RAM_Random_Access_Mayhem/?curator_clanid=41324400">Steam</a>, and follow the developers on <a href="https://twitter.com/Xylem_Studios">Twitter</a> or <a href="https://www.youtube.com/@xylemstudios">YouTube</a>.</em></p> <h2 id="highlights">Highlights</h2> <h3 id="drag-and-drop-export-variables">Drag-and-drop <code class="language-plaintext highlighter-rouge">@export</code> variables</h3> <p>Part of starting out slow with enhancements in the development cycle means that you can expect quite a lot of QOL additions in the near future. One such addition that we’re excited to showcase comes from <a href="https://github.com/fkeyzuwu">fkeyz</a>: the ability to drag-and-drop objects to the script editor to automatically create an exported variable! (<a href="https://github.com/godotengine/godot/pull/106341">GH-106341</a>)</p> <video autoplay="" loop="" muted="" playsinline="" title="Drag-and-drop demonstration"> <source src="/storage/blog/dev-snapshot-godot-4-6-dev-1/drag-and-drop-export.mp4?1" type="video/mp4" /> </video> <h3 id="openxr-add-support-for-spatial-entities-extensions">OpenXR: Add support for Spatial Entities Extensions</h3> <p>As <a href="https://github.com/BastiaanOlij">Bastiaan Olij</a> notes in his PR <a href="https://github.com/godotengine/godot/pull/107391">GH-107391</a>, the <a href="https://www.khronos.org/blog/openxr-spatial-entities-extensions-released-for-developer-feedback">OpenXR Spatial Entities Extensions</a> was introduced to standardize obtaining and interacting with information about the user’s real world environment. This is an absolute goliath of a specification, and is reflected in the implementation seeing over <strong>75 hundred lines of code</strong> changed. If you’re interested in seeing the changes firsthand (and have the necessary equipment for it), be sure to check out Bastiaan’s accompanying <a href="https://github.com/BastiaanOlij/spatial-entities-demo">demo project</a>.</p> <h3 id="hide-control-focus-when-given-via-mouse-input">Hide <code class="language-plaintext highlighter-rouge">Control</code> focus when given via mouse input</h3> <p>Courtesy of <a href="https://github.com/YeldhamDev">Michael Alexsander</a>, the focus state logic for mouse and touch is now decoupled from keyboard and joypad (<a href="https://github.com/godotengine/godot/pull/110250">GH-110250</a>). While it’s common for programs to have significant overlap between registering inputs of these types, it’s not uncommon for systems to deliberately stylize the two types separately, often handling their inputs in entirely separate ways. This change enables that granular control for toolmakers and UI designers. Included in the PR is a comprehensive ruleset for when focus is shown, which we’ve included below:</p> <table> <thead> <tr> <th>Situation</th> <th> </th> </tr> </thead> <tbody> <tr> <td>Clicking a <code class="language-plaintext highlighter-rouge">Control</code> with the mouse, giving it focus.</td> <td>❌</td> </tr> <tr> <td>Successfully switching focus via keyboard/joypad actions.</td> <td>✔️</td> </tr> <tr> <td>Attempting to switch focus via keyboard/joypad actions but still remaining on the same <code class="language-plaintext highlighter-rouge">Control</code>.</td> <td>✔️</td> </tr> <tr> <td>Clicking somewhere with the mouse while having a <code class="language-plaintext highlighter-rouge">Control</code> with visible focus.</td> <td>❌</td> </tr> <tr> <td>Clicking with the mouse a visibly focused <code class="language-plaintext highlighter-rouge">Control</code> (deviates from how it works in browsers).</td> <td>❌</td> </tr> <tr> <td>Using <code class="language-plaintext highlighter-rouge">Control.grab_focus(true)</code>.</td> <td>❌</td> </tr> </tbody> </table> <div class="card card-info" style="margin-top: 1em;"> <p>The previous behavior can be achieved by enabling <code class="language-plaintext highlighter-rouge">gui/common/always_show_focus_state</code>.</p> </div> <h3 id="remove-prompt-to-restart-editor-after-changing-custom-theme">Remove prompt to restart editor after changing custom theme</h3> <p>A common pain-point we’ve heard from creators attempting to integrate custom themes for the Godot editor itself is how pace-breaking the process can feel. This was a direct result of swapping between themes requiring a hard reset of the entire editor instance, making incremental tests tedious and realtime comparison virtually impossible. This makes sense, of course, as an editor’s theme is surely baked into the editor itself such that any change of the sort would need to jump through countless hurdles to make this feature possible. After all, you can’t just flip a switch and have everything “just work”.</p> <p>Anyway, <a href="https://github.com/ryevdokimov">Robert Yevdokimov</a> flipped a switch and everything “just worked”. (<a href="https://github.com/godotengine/godot/pull/100876">GH-100876</a>)</p> <video autoplay="" loop="" muted="" playsinline="" title="Swapping themes without a reset"> <source src="/storage/blog/dev-snapshot-godot-4-6-dev-1/theme-swap-no-reset.mp4?1" type="video/mp4" /> </video> <p>Oops.</p> <p>To clarify: once-upon-a-time this reset was almost certainly necessary. Our internal logic for theming and customization is unrecognizable compared to their humble beginnings, and this is far from the first setting that was elevated to real-time support. It’s common for settings that become real-time to have a PR that explicitly targets the feature in question, but it’s rare for such features to have their changes exist in a vacuum. Perhaps there are other features out there, just like this, that have pre-conceived restrictions long-addressed without anyone realizing it. Until someone shows up to challenge those restrictions, we may never know.</p> <div class="card card-info" style="margin-top: 1em;"> <p>The theme showcased for comparison is the <a href="https://github.com/passivestar/godot-minimal-theme">Godot Minimal Theme</a> by <a href="https://github.com/passivestar">passivestar</a>.</p> </div> <h3 id="and-more">And more!</h3> <p>There are too many exciting changes to list them all here, but here’s a curated selection:</p> <ul> <li>2D: Avoid unnecessary updates in <code class="language-plaintext highlighter-rouge">TileMapLayer</code> (<a href="https://github.com/godotengine/godot/pull/109243">GH-109243</a>).</li> <li>3D: Do not require editor restart when changing manipulator gizmo opacity setting (<a href="https://github.com/godotengine/godot/pull/108549">GH-108549</a>).</li> <li>C#: Add C# translation parser support (<a href="https://github.com/godotengine/godot/pull/99195">GH-99195</a>).</li> <li>Core: Add ‘Find Sequence’ to <code class="language-plaintext highlighter-rouge">Span</code>s, and consolidate negative indexing behavior (<a href="https://github.com/godotengine/godot/pull/104332">GH-104332</a>).</li> <li>Editor: Allow to use sliders for integers in <code class="language-plaintext highlighter-rouge">EditorSpinSlider</code> (<a href="https://github.com/godotengine/godot/pull/110459">GH-110459</a>).</li> <li>Editor: FindInFiles: Show the number of matches for each file (<a href="https://github.com/godotengine/godot/pull/110770">GH-110770</a>).</li> <li>Editor: Fix vertical alignment of Inspector category titles (<a href="https://github.com/godotengine/godot/pull/110303">GH-110303</a>).</li> <li>Editor: Show “No Translations Configured” message for empty translation preview menu (<a href="https://github.com/godotengine/godot/pull/107649">GH-107649</a>).</li> <li>Editor: Speed up large selections in the editor (<a href="https://github.com/godotengine/godot/pull/109515">GH-109515</a>).</li> <li>Editor: Use a fixed-width font for the expression evaluator (<a href="https://github.com/godotengine/godot/pull/109166">GH-109166</a>).</li> <li>Export: Add “Show Encryption Key” toggle (<a href="https://github.com/godotengine/godot/pull/106146">GH-106146</a>).</li> <li>GDScript: Elide unnecessary copies in <code class="language-plaintext highlighter-rouge">CONSTRUCT_TYPED_*</code> opcodes (<a href="https://github.com/godotengine/godot/pull/110717">GH-110717</a>).</li> <li>Import: Switch LOD generation to use iterative simplification (<a href="https://github.com/godotengine/godot/pull/110027">GH-110027</a>).</li> <li>Porting: Wayland: Implement the xdg-toplevel-icon-v1 protocol (<a href="https://github.com/godotengine/godot/pull/107096">GH-107096</a>).</li> <li>Rendering: Add methods to draw ellipses (<a href="https://github.com/godotengine/godot/pull/85080">GH-85080</a>).</li> <li>Rendering: Add ubershader support to material and SDF variants in Forward+ (<a href="https://github.com/godotengine/godot/pull/109401">GH-109401</a>).</li> </ul> <h2 id="changelog">Changelog</h2> <p><strong>98 contributors</strong> submitted <strong>220 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.6-dev1"><strong>interactive changelog</strong></a> for the complete list of changes since the 4.5-stable.</p> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/8d8041bd4dab30e51ecf5be21dc7bf1f6a26c039"><code class="language-plaintext highlighter-rouge">8d8041bd4</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.6-dev1"> Download Godot 4.6 dev1 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-6-dev-1.webp" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev1&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev1&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev1&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev1&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev1&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.6&amp;flavor=dev1&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.6-dev1"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript and GDExtension.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript and GDExtension.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <p>There are currently no known issues introduced by this release.</p> <p>With every release we accept that there are going to be various issues, which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug">known bugs</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part and full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by <a href="https://godot.foundation/">Godot Foundation</a>. There are also several <a href="/donate">alternative ways to donate</a> which you may find more suitable.</p> <p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p>Thaddeus CrewsEnsuring quality in the Godot documentation, a continuous process2025-09-18T14:00:00+00:00https://godotengine.org/article/ensuring-quality-godot-documentation/The Godot documentation is the fruits of the labor of hundreds of people working together. How do we ensure the highest possible level of quality, while making it easy for anyone to contribute? Find out in this article.<p>What makes up the quality and usability of an open-source project is not just about its code. A big part of what makes a project useful to the community is its documentation.</p> <p>Over the years, Godot contributors have developed many tools and processes to ensure the highest possible level of quality for the <a href="https://docs.godotengine.org/">documentation</a>. Read on if you’re curious about how the documentation is made.</p> <h2 id="documentation-repository-organization">Documentation repository organization</h2> <p>Godot’s documentation is hosted on <a href="https://about.readthedocs.com/">Read the Docs</a>. This service provides hosting for projects using <a href="https://www.sphinx-doc.org/">Sphinx</a>, which is a static site generator targeted at building documentation.</p> <p>The documentation’s source files are hosted <a href="https://github.com/godotengine/godot-docs">on GitHub</a>. Several customizations have been made to improve readability, such as <a href="https://github.com/godotengine/godot-docs/blob/master/_static/css/custom.css">adding a dark theme</a> (used according to browser/OS preferences) and <a href="https://github.com/godotengine/godot-docs/blob/master/_extensions/gdscript.py">GDScript syntax highlighting</a>.</p> <p>There is a continuous integration system in place, which performs several automated tasks:</p> <ul> <li><a href="https://github.com/godotengine/godot-docs/blob/master/.github/workflows/ci.yml">General continuous integration</a> <ul> <li>Runs pre-commit hooks and builds the website to ensure no errors occur. The pre-commit hooks are configured to check for typos using <a href="https://github.com/codespell-project/codespell">codespell</a>.</li> </ul> </li> <li><a href="https://github.com/godotengine/godot-docs/blob/master/.github/workflows/sync_class_ref.yml">Synchronize the class reference</a> <ul> <li>Automatically synchronizes the generated class reference with the <a href="https://github.com/godotengine/godot/tree/master/doc/classes">class reference XML</a> from the main Godot repository.</li> </ul> </li> <li><a href="https://github.com/godotengine/godot-docs/blob/master/.github/workflows/build_offline_docs.yml">Build offline documentation in HTML and ePub formats</a> <ul> <li>Creates downloads of the documentation in offline-friendly formats.</li> </ul> </li> <li><a href="https://github.com/godotengine/godot-docs/blob/master/.github/workflows/check_urls.yml">Check URLs for dead links</a> <ul> <li>URLs can stop working over time for several reasons. This check makes it possible to be informed of link rot and replace links with archived versions when needed.</li> </ul> </li> <li><a href="https://github.com/godotengine/godot-docs/blob/master/.github/workflows/cherrypick.yml">Automatically cherry-pick relevant pull requests to stable branches</a> <ul> <li>The documentation is split into several branches (one for <code class="language-plaintext highlighter-rouge">master</code>, one for the latest <code class="language-plaintext highlighter-rouge">stable</code> version, one for <code class="language-plaintext highlighter-rouge">4.3</code> and so on). Pull requests that make changes relevant for stable versions are assigned a label such as <code class="language-plaintext highlighter-rouge">cherrypick:4.3</code>. When the pull request is merged, the commit is automatically cherry-picked to the corresponding stable branch.</li> </ul> </li> </ul> <h2 id="internationalizing-the-documentation">Internationalizing the documentation</h2> <p>As the Godot community is worldwide, we want the ability to provide not only the Godot editor in users’ native languages, but also the documentation.</p> <p>To internationalize content that gets continuously updated, we use dedicated tooling to keep the translations in sync with the source material. Sphinx can extract content from each page to put in translation catalogs in the <a href="https://en.wikipedia.org/wiki/Gettext">Gettext</a> format (POT/PO files, <a href="https://docs.godotengine.org/en/stable/tutorials/i18n/localization_using_gettext.html">also supported by Godot!</a>). We merge these 500 POT files into a monolithic “Godot Documentation” component (500,000 words).</p> <p>The class reference is handled separately as its source material is not Sphinx’s reStructuredText files, but XML files in the engine repository. For this, we use <a href="https://github.com/godotengine/godot-editor-l10n/blob/main/scripts/extract_classes.py">a script</a> to extract the descriptions from the XML files and generate a Gettext POT file (600,000 words).</p> <p>So we’re currently at 1,100,000 words of documentation to translate! To put this into perspective, the Godot editor’s translation has a bit more than 40,000 words.</p> <p>Godot uses <a href="https://hosted.weblate.org">Hosted Weblate</a> as a collaborative translation platform. This greatly simplifies the barrier to entry for editing Gettext files without merge conflicts, and provides a number of additional features such as suggestions, translation memory, or the ability to cross-compare translations.</p> <ul> <li><a href="https://hosted.weblate.org/projects/godot-engine/godot-docs/"><strong>Godot Documentation</strong></a> and <a href="https://hosted.weblate.org/projects/godot-engine/godot-class-reference/"><strong>Class Reference</strong></a> components on Hosted Weblate</li> <li>Localized documentation websites: <a href="https://docs.godotengine.org/cs/4.x/">cs</a>, <a href="https://docs.godotengine.org/de/4.x/">de</a>, <a href="https://docs.godotengine.org/es/4.x/">es</a>, <a href="https://docs.godotengine.org/fr/4.x/">fr</a>, <a href="https://docs.godotengine.org/it/4.x/">it</a>, <a href="https://docs.godotengine.org/ja/4.x/">ja</a>, <a href="https://docs.godotengine.org/ko/4.x/">ko</a>, <a href="https://docs.godotengine.org/pl/4.x/">pl</a>, <a href="https://docs.godotengine.org/pt-br/4.x/">pt-br</a>, <a href="https://docs.godotengine.org/ru/4.x/">ru</a>, <a href="https://docs.godotengine.org/uk/4.x/">uk</a>, <a href="https://docs.godotengine.org/zh-cn/4.x/">zh-cn</a>, <a href="https://docs.godotengine.org/zh-tw/4.x/">zh-tw</a></li> <li><a href="https://contributing.godotengine.org/en/latest/documentation/translation/index.html">Documentation on contributing translations</a></li> <li><a href="https://chat.godotengine.org/channel/translation"><code class="language-plaintext highlighter-rouge">#translation</code> channel on the Godot Contributors Chat</a></li> </ul> <p><img alt="Hosted Weblate Godot documentation website screenshot" src="/storage/blog/ensuring-quality-godot-documentation/hosted-weblate.webp" /></p> <h2 id="splitting-the-contributor-documentation-to-its-own-website">Splitting the contributor documentation to its own website</h2> <p>Since September 2025, documentation for new and returning engine contributors has been split to its own website, <a href="https://contributing.godotengine.org">contributing.godotengine.org</a>. This website is powered by Sphinx, just like the main documentation. This split was motivated by several factors:</p> <ul> <li>The documentation is split by minor version, but the contributing documentation generally does not need a version split. Feature development always happens on the <code class="language-plaintext highlighter-rouge">master</code> branch, with cherry-picking towards the previous stable branch. In practice, it’s easier to maintain only one version of the documentation.</li> <li>Contributing to the engine requires English reading comprehension. The existing documentation had some translations available, but they were not always complete or up-to-date. Focusing on English for contribution guides reduces the burden on translators, which can then better focus on other sections of the manual.</li> </ul> <p>Note that some of the pages that were previously in the Contributing section of the documentation were moved to a new section called <a href="https://docs.godotengine.org/en/latest/engine_details/architecture/index.html">Engine details</a>. These pages are not just useful for engine contributors, but also for people looking to compile their own builds and write custom modules in C++.</p> <p>As an aside, splitting this website allows it to build much faster, which is useful when testing changes locally. The main documentation website now also builds slightly faster, but is still slow due to containing the class reference. The GitHub repository for the new website can be found at <a href="https://github.com/godotengine/godot-contributing-docs">godotengine/godot-contributing-docs</a>.</p> <h2 id="class-reference-progress-tracker">Class reference progress tracker</h2> <p>The Godot documentation is more than just a manual. It also contains an hosted mirror of the <em>class reference</em>, which documents every class that’s exposed to the scripting API in the engine. This class reference can be read directly offline in the editor, but the hosted version can be linked to on a website.</p> <p>Since the class reference represents a massive amount of items to document, we built a website to track the documentation progress for each class:</p> <ul> <li><a href="https://godotengine.github.io/doc-status/"><strong>Godot class reference status</strong></a></li> </ul> <p>This website relies on the <a href="https://github.com/godotengine/godot/blob/master/doc/tools/doc_status.py"><code class="language-plaintext highlighter-rouge">doc_status.py</code></a> script from the main Godot repository, which detects the completion percentage and outputs a Markdown table with the results.</p> <p>Being aware of the overall and per-class completion percentages at all times made it a lot easier to improve the documentation coverage. As of writing, the overall completion percentage is <strong>97%</strong>. With additional efforts from <a href="https://contributing.godotengine.org/en/latest/documentation/class_reference.html">contributors like you</a>, we can perhaps reach 100% completion in the future.</p> <p><img alt="Godot class reference status website screenshot" src="/storage/blog/ensuring-quality-godot-documentation/doc-status.webp" /></p> <h2 id="team-reports-for-class-reference-pull-requests">Team reports for class reference pull requests</h2> <p>Another way for contributors to organize pull requests and work through the backlog is to use the <em>team reports</em> website. This website was built for contributors to check all open pull requests in a more convenient fashion than using GitHub’s web interface. Using this website, it’s easier to see when pull requets were last active and whether they are in a mergeable state (which may not be the case due to merge conflicts).</p> <p>This website only tracks the main Godot repository on GitHub, not the documentation repository. With that said, in the context of the documentation, this is still relevant since all contributions to the class reference are sent to the main Godot repository. (The documentation repository only hosts a generated copy of the class reference from the XML source files.)</p> <ul> <li><a href="https://godotengine.github.io/godot-team-reports/#documentation"><strong>Godot Team Reports</strong></a></li> </ul> <p><img alt="Godot team reports website screenshot" src="/storage/blog/ensuring-quality-godot-documentation/team-reports.webp" /></p> <h2 id="user-notes-system">User notes system</h2> <p>In 2024, the Godot documentation got an integration for user notes using <a href="https://giscus.app/">Giscus</a>. This allows users to share additional information relevant for documentation readers. This integration is currently present on the <code class="language-plaintext highlighter-rouge">4.4</code>, <code class="language-plaintext highlighter-rouge">4.5</code>, <code class="language-plaintext highlighter-rouge">stable</code>, and <code class="language-plaintext highlighter-rouge">latest</code> branches of the documentation.</p> <p>As an example, you can see it in action at the bottom of the <a href="https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html#godot-giscus">GDScript reference</a> manual page.</p> <p><img alt="Godot documentation user notes screenshot" src="/storage/blog/ensuring-quality-godot-documentation/user-notes.webp" /></p> <h3 id="why-have-user-notes-on-the-documentation">Why have user notes on the documentation?</h3> <p>The Godot documentation is an essential learning resource for new and returning users alike. However, the content can sometimes benefit from additional clarification not found on the page itself. Since it’s an officially-maintained resource, it also tries to limit the number of third-party resources it links to.</p> <p>To resolve this problem, we’ve decided to introduce a <em>user note system</em> in the Godot documentation. Inspired by user-provided comment systems such as <a href="https://www.php.net/docs.php">PHP’s</a>, this allows the community to make the documentation more useful for everyone: not just for users, but also for engine developers.</p> <p><strong>It should be noted that <em>user notes</em> are different from the usual comments you’d find on a blog post.</strong> As described by the <a href="https://github.com/godotengine/godot-docs-user-notes/discussions/1">user-contributed notes policy</a>, they are intended to be used to provide additional context for the documentation or link to community resources. They are not designed to report bugs or suggest features. When the documentation is incorrect or outdated, please open an issue on the <a href="https://github.com/godotengine/godot-docs">godot-docs</a> repository instead of leaving a user note.</p> <h3 id="how-user-notes-are-implemented">How user notes are implemented</h3> <p>The user notes integration is powered by <a href="https://giscus.app/">Giscus</a>, an open-source script that allows integrating a GitHub Discussions thread on a web page. To do so, it automatically creates a discussion in a <a href="https://github.com/godotengine/godot-docs-user-notes">repository</a> when the first comment on a page is posted. On the Godot documentation, pages are matched based on their file name, but several page matching modes are provided by Giscus depending on the website’s needs.</p> <p>Being hosted on GitHub Discussions allows anyone with a GitHub account to comment. On the organizational side, this also reduces system administration overhead as no separate backend or database for hosting comments is required. Spam protection (a traditionally difficult topic with comment platforms) is handled on GitHub’s end, which has historically been quite effective at avoiding spam.</p> <p>As a bonus, you can also watch the <a href="https://github.com/godotengine/godot-docs-user-notes">godot-docs-user-notes</a> repository on GitHub to be informed of new user notes being added to documentation pages. Replying to user notes left by others is a good way to get started with documentation improvements, as many user notes bring new information that can be incorporated into the main page.</p> <h2 id="conclusion">Conclusion</h2> <p>This organization allows more people to contribute in various ways, even with limited technical know-how. Not only does the documentation benefit from those opening <a href="https://github.com/godotengine/godot-docs/pulls">pull requests</a>, it’s also continuously improved every day by those posting user notes at the bottom of documentation pages. These user notes bring further clarifications and context to the manual pages, as well as linking to useful resources.</p> <p>A massive <strong>thank you</strong> to <a href="https://github.com/godotengine/godot-docs/graphs/contributors">all contributors to the documentation</a>! As always, we welcome contributions to the documentation. <a href="https://contributing.godotengine.org/en/latest/documentation/overview.html">The contribution process is well-documented</a>, but you’re welcome to hop on the <a href="https://chat.godotengine.org/channel/documentation"><code class="language-plaintext highlighter-rouge">#documentation</code> channel on the Godot Contributors Chat</a> if you have any questions.</p> <h2 id="support">Support</h2> <p>If you would like to help with the development of these features, please consider <a href="https://fund.godotengine.org/">supporting the project financially</a>! More funding allows us to sponsor volunteer contributors and better respond to technical demands of project users.</p>Hugo LocurcioGodot 4.5, making dreams accessible2025-09-15T20:00:00+00:00https://godotengine.org/article/godot-4-5-making-dreams-accessible/From mind-blowing effects now made possible by the stencil buffer to accessibilty descriptions of your GUI elements that opens up the possibility for some with disabilities to play your game — we are proud to present to you Godot 4.5.Godot contributorsRelease candidate: Godot 4.5 RC 22025-09-10T12:00:00+00:00https://godotengine.org/article/release-candidate-godot-4-5-rc-2/One more for the road, again!<p>On Friday of last week, we dropped our first <a href="https://en.wikipedia.org/wiki/Software_release_life_cycle#Release_candidate">Release Candidate</a> build. As a reminder, we release RC builds once we <em>think</em> the engine has stabilized and is ready for release. It is your last chance to report critical regressions before we release the stable version. Now, not even a full week later, we’re ready with our second snapshot. This RC2 fixes the last of the critical regressions that we are aware of. Unless someone reports a new regression coming from the changes made in RC1 or RC2, we should be on track to release 4.5 stable soon.</p> <p>At this point in the process you will see the activity on GitHub slow down as we avoid merging work for 4.5. Our focus in the coming days will be on preparing the release, and queuing up all the changes we would like to merge early in the 4.6 release cycle.</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/4.5.rc2/"><strong>Web editor</strong></a>, the <a href="https://www.meta.com/s/h9JcJGHfg"><strong>XR editor</strong></a>, or the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4"><strong>Android editor</strong></a> for this release. If you are interested in the latter, please request to join <a href="https://groups.google.com/g/godot-testers">our testing group</a> to get access to pre-release builds.</p> <hr /> <p><em>The cover illustration is from</em> <a href="https://store.steampowered.com/app/3410180/Overlooting/?curator_clanid=41324400"><strong>Overlooting</strong></a>, <em>a dungeon crawler where inventory management is crucial, as you must adapt your strategy to a skill tree that changes every run! You can buy the game on <a href="https://store.steampowered.com/app/3410180/Overlooting/?curator_clanid=41324400">Steam</a>, and follow the developers on <a href="https://bsky.app/profile/posingpossums.bsky.social">Bluesky</a>.</em></p> <h2 id="highlights">Highlights</h2> <p>For an overview of what’s new overall in Godot 4.5, have a look at the highlights for <a href="/article/dev-snapshot-godot-4-5-beta-1/">4.5 beta 1</a>, which cover a lot of the changes. This blog post only covers the changes between RC 1 and RC 2. This section covers all changes made since the <a href="/article/release-candidate-godot-4-5-rc-1/">RC 1 snapshot</a>, which are largely regression fixes:</p> <ul> <li>Animation: Move Skeleton3D init process (for dirty flags) into <code class="language-plaintext highlighter-rouge">POST_ENTER_TREE</code> from <code class="language-plaintext highlighter-rouge">ENTER_TREE</code> (<a href="https://github.com/godotengine/godot/pull/110145">GH-110145</a>).</li> <li>Buildsystem: Bump version to 4.5-rc (<a href="https://github.com/godotengine/godot/pull/110285">GH-110285</a>).</li> <li>Buildsystem: Fix Wayland build with OpenGL disabled (<a href="https://github.com/godotengine/godot/pull/110294">GH-110294</a>).</li> <li>C#: Fix the issue preventing installing C# binaries on Android devices with api &lt;= 29 (<a href="https://github.com/godotengine/godot/pull/110260">GH-110260</a>).</li> <li>C#: Require <code class="language-plaintext highlighter-rouge">net9.0</code> for Android exports (<a href="https://github.com/godotengine/godot/pull/110263">GH-110263</a>).</li> <li>Core: Fix Resource duplicate calls <code class="language-plaintext highlighter-rouge">ImageTexture::set_image</code> with an invalid image (<a href="https://github.com/godotengine/godot/pull/110215">GH-110215</a>).</li> <li>Editor: Fix “SpriteFrames” editor not fully hidding the bottom panel (<a href="https://github.com/godotengine/godot/pull/110280">GH-110280</a>).</li> <li>GDExtension: Fix <code class="language-plaintext highlighter-rouge">WindowUtils::copy_and_rename_pdb</code> regression (<a href="https://github.com/godotengine/godot/pull/110033">GH-110033</a>).</li> <li>Rendering: Metal: Ensure baked Metal binaries can be loaded on the minimum target OS (<a href="https://github.com/godotengine/godot/pull/110264">GH-110264</a>).</li> </ul> <h2 id="changelog">Changelog</h2> <p><strong>10 contributors</strong> submitted <strong>9 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5-rc2"><strong>interactive changelog</strong></a> for the complete list of changes since the previous 4.5-rc1 snapshot. You can also review <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5">all changes included in 4.5</a> compared to the previous 4.4 feature release.</p> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/2dd26a027a99633231184616d4dd287bbdd1c0a3"><code class="language-plaintext highlighter-rouge">2dd26a027</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.5-rc2"> Download Godot 4.5 rc2 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/release-candidate-godot-4-5-rc-2.webp" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=rc2&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=rc2&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=rc2&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=rc2&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=rc2&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=rc2&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.5-rc2"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript and GDExtension.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript and GDExtension.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <p>During the Release Candidate stage, we focus exclusively on solving showstopping regressions (i.e. something that worked in a previous release is now broken, without workaround). You can have a look at our current <a href="https://github.com/orgs/godotengine/projects/61">list of regressions and significant issues</a> which we aim to address before releasing 4.5. This list is dynamic and will be updated if we discover new showstopping issues after more users start testing the RC snapshots.</p> <p>With every release, we accept that there are going to be various issues which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug">known bugs</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part or full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by <a href="https://godot.foundation/">Godot Foundation</a>. There are also several <a href="/donate">alternative ways to donate</a> which you may find more suitable.</p>Thaddeus CrewsRelease candidate: Godot 4.5 RC 12025-09-05T12:00:00+00:00https://godotengine.org/article/release-candidate-godot-4-5-rc-1/Godot 4.5 stable release is imminent; let the last round(s) of testing begin!<p>The final stage of development for Godot 4.5 has arrived: the <a href="https://en.wikipedia.org/wiki/Software_release_life_cycle#Release_candidate">Release Candidate</a>. This means that all of our planned features are in place and the most critical regressions have been tackled, so we’re confident that it’s now ready for production use.</p> <p>However, we can never be 100% sure that the release is ready to be published without very extensive testing from the community. So while Godot 4.5 is now ready for testing on existing projects (always make a copy/backup before upgrading, preferably with version control), we’re eager to hear how it fares and whether any new major issues have gone unnoticed until now.</p> <p>While we are confident that we are <em>nearly</em> ready to release. There will be at least one more RC release after this one containing bug fixes for exporting C# projects to certain, older, Android devices and for shipping baked shaders on iOS devices. We have fixes in the queue already and anticipate merging them promptly and releasing an RC2 early next week. If no major regressions are reported with RC1/RC2, we anticipate releasing 4.5 stable shortly after.</p> <p>Please consider <a href="#support">supporting the project financially</a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/4.5.rc1/"><strong>Web editor</strong></a>, the <a href="https://www.meta.com/s/h9JcJGHfg"><strong>XR editor</strong></a>, or the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4"><strong>Android editor</strong></a> for this release. If you are interested in the latter, please request to join <a href="https://groups.google.com/g/godot-testers">our testing group</a> to get access to pre-release builds.</p> <hr /> <p><em>The cover illustration is from</em> <a href="https://store.steampowered.com/app/3064030/Whimside/?curator_clanid=41324400"><strong>Whimside</strong></a>, <em>a creature collector where your pixel art companions keep you company at the bottom of your screen. You can buy the game on <a href="https://store.steampowered.com/app/3064030/Whimside/?curator_clanid=41324400">Steam</a>, and follow the developer on <a href="https://bsky.app/profile/toadzillart.itch.io">Bluesky</a> or <a href="https://www.youtube.com/@Toadzillart">YouTube</a>.</em></p> <h2 id="highlights">Highlights</h2> <p>We covered the most important highlights from Godot 4.5 in the previous <a href="/article/dev-snapshot-godot-4-5-beta-1/"><strong>4.5 beta 1 blog post</strong></a>, so if you haven’t read that one, have a look to be introduced to the main new features added in the 4.5 release.</p> <p>Especially if you’re testing 4.5 for the first time, you’ll want to get a condensed overview of what new features you might want to make use of.</p> <p>This section covers the most relevant changes made since the <a href="/article/dev-snapshot-godot-4-5-beta-7/">beta 7 snapshot</a>, which are largely regression fixes:</p> <ul> <li>Core: Fix regression in mechanism to hold objects while emitting (<a href="https://github.com/godotengine/godot/pull/109770">GH-109770</a>).</li> <li>Core: Make <code class="language-plaintext highlighter-rouge">SceneTree</code> not crash when receiving a notification without a root being set (<a href="https://github.com/godotengine/godot/pull/110041">GH-110041</a>).</li> <li>Editor: Add single-object inspect command backwards compatible API for potential regression (<a href="https://github.com/godotengine/godot/pull/110043">GH-110043</a>).</li> <li>Editor: Fix Range scale overflow (<a href="https://github.com/godotengine/godot/pull/110107">GH-110107</a>).</li> <li>Export: Fix editor export plugins always causing resources to be edited (<a href="https://github.com/godotengine/godot/pull/110057">GH-110057</a>).</li> <li>GUI: Do not set flags when <code class="language-plaintext highlighter-rouge">PopupMenu::set_visible</code> is called to hide popup (<a href="https://github.com/godotengine/godot/pull/110049">GH-110049</a>).</li> <li>Input: Fix <code class="language-plaintext highlighter-rouge">Input.get_joy_info()</code> regression after the SDL input driver PR (<a href="https://github.com/godotengine/godot/pull/108214">GH-108214</a>).</li> <li>Porting: macOS: Process joypad input directly in the embedded process (<a href="https://github.com/godotengine/godot/pull/109603">GH-109603</a>).</li> <li>Rendering: Add GENERAL resource usage to the render graph and fix mutable texture initialization in D3D12 (<a href="https://github.com/godotengine/godot/pull/110204">GH-110204</a>).</li> <li>Rendering: MSDF: Fix outline bleed out at small sizes (<a href="https://github.com/godotengine/godot/pull/110148">GH-110148</a>).</li> </ul> <h2 id="changelog">Changelog</h2> <p>As we’ve tightened our policy on what kind of changes can be merged leading to the release candidate stage, there aren’t a lot of changes in this snapshot. <strong>18 contributors</strong> submitted <strong>24 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5-rc1"><strong>interactive changelog</strong></a> for the complete list of changes since the previous 4.5-beta7 snapshot.</p> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/6c9aa4c7d3b9b91cd50714c40eeb234874df7075"><code class="language-plaintext highlighter-rouge">6c9aa4c7d</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.5-rc1"> Download Godot 4.5 rc1 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/release-candidate-godot-4-5-rc-1.webp" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=rc1&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=rc1&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=rc1&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=rc1&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=rc1&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=rc1&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.5-rc1"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript and GDExtension.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript and GDExtension.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <p>During the Release Candidate stage, we focus exclusively on solving showstopping regressions (i.e. something that worked in a previous release is now broken, without workaround). You can have a look at our current <a href="https://github.com/orgs/godotengine/projects/61">list of regressions and significant issues</a> which we aim to address before releasing 4.5. This list is dynamic and will be updated if we discover new showstopping issues after more users start testing the RC snapshots.</p> <p>With every release, we accept that there are going to be various issues which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug">known bugs</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part or full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by <a href="https://godot.foundation/">Godot Foundation</a>. There are also several <a href="/donate">alternative ways to donate</a> which you may find more suitable.</p>Thaddeus CrewsGodot XR update - August 20252025-09-02T12:00:00+00:00https://godotengine.org/article/godot-xr-update-aug-2025/Upcoming XR game jam, using the XR editor, new release channels and the new Render Models API<h2 id="godot-xr-community-game-jam">Godot XR Community Game Jam</h2> <p>Starting on 8 September 2025 the Godot XR Community is hosting its <a href="https://itch.io/jam/godot-xr-game-jam-sep-2025">fourth Godot XR game jam</a>.</p> <p>Participants have a week to put together a small XR game using the Godot Game Engine. In addition, special consideration will be given to participants using the <a href="https://www.meta.com/experiences/godot-game-engine/7713660705416473/">Godot XR editor</a> to create their entry!</p> <p>This is a great way to try out some XR development and hone your game design skills, as well as provide feedback to help improve the XR editor.</p> <p>We invite you to take this opportunity to try out Godot as an XR platform! The XR channel on the <a href="https://discord.gg/godotengine">official Godot Discord</a> is a great place to get help.</p> <h2 id="creating-a-game-entirely-in-the-xr-editor">Creating a game entirely in the XR editor</h2> <p>And on the topic of using the XR editor to create an XR game, during the Godot Wild Jam in May, David and Logan challenged themselves to create their entry entirely in VR - without using their PCs at all!</p> <p>In this devlog video by Logan, they explain how it went:</p> <iframe width="560" height="315" style="width: 100%; height: 100%; aspect-ratio: 16/9;" src="https://www.youtube.com/embed/6RE8KuCspqw" title="Can we make a Godot VR Game... in VR?" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe> <p>Were they successful? Watch to find out!</p> <h2 id="pre-release-channels-on-horizonos">Pre-release channels on HorizonOS</h2> <p>To improve development and testing of the XR editor, we have set up <strong>DEV</strong>, <strong>BETA</strong>, and <strong>RC</strong> (release candidate) pre-release channels in the Horizon store to provide the community with pre-release builds of the XR editor.</p> <p>Interested users can self-subscribe to the pre-release channels using the following links:</p> <ul> <li><a href="https://www.meta.com/s/3yJ7i8kop">DEV channel</a></li> <li><a href="https://www.meta.com/s/h9JcJGHfg">BETA channel</a></li> <li><a href="https://www.meta.com/s/6Ls6Bfa34">RC channel</a></li> </ul> <p>After joining the pre-release channels, users can change the XR editor active channel by visiting the app’s “Settings” page in-headset, or via the “Version” dropdown in the <a href="https://www.meta.com/experiences/godot-game-engine/7713660705416473/">app’s store page</a>.</p> <h2 id="render-models-support-coming-in-godot-45">Render models support coming in Godot 4.5</h2> <p>Render models is a new API added to OpenXR 1.1.49 that provides access to various 3D assets accessible in the runtime.</p> <p>Its main focus is to provide accurate render models for the physical controllers the player is using and accurately placing those in the virtual world. These models come with metadata and tracking data that result in full animation of these assets. Thus they react properly to button presses and other interactions the player is performing.</p> <p>The <a href="https://github.com/godotengine/godot/pull/107388">implementation in Godot</a> was made possible thanks to the Godot Integration Project that Khronos is currently funding and allowed Godot to implement this logic early. In doing so, runtime implementations could be tested and this provided feedback that allowed this API to be published.</p> <ul> <li>SteamVR added support for this API in their 2.12 release.</li> <li>PICO has added support for this API in their 5.14.0 release, currently supporting PICO 4 Ultra devices.</li> <li>Other vendors are expected to provide support in the near future.</li> </ul> <iframe width="560" height="995" style="width: 100%; height: 100%; aspect-ratio: 9/16;" src="https://www.youtube.com/embed/DfOW6tj0Pk4" title="Godot OpenXR Render Models demo" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>Bastiaan OlijDev snapshot: Godot 4.5 beta 72025-08-29T12:00:00+00:00https://godotengine.org/article/dev-snapshot-godot-4-5-beta-7/Two more for the road!<p>While we initially anticipated our next snapshot to begin release candidate phase, we left open the possibility of another beta pass if any significant blockers persisted. And while the overwhelming majority have since been handled, this extra pass is to ensure debug symbols are supported for Android platforms. While this was always something that could be done when building from source, a long-term goal is official access to debug symbols, making this something we want to get right out of the gate.</p> <p><a href="#downloads">Jump to the <strong>Downloads</strong> section</a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the <a href="https://editor.godotengine.org/releases/4.5.beta7/"><strong>Web editor</strong></a>, the <a href="https://www.meta.com/s/h9JcJGHfg"><strong>XR editor</strong></a>, or the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4"><strong>Android editor</strong></a> for this release. If you are interested in the latter, please request to join <a href="https://groups.google.com/g/godot-testers">our testing group</a> to get access to pre-release builds.</p> <hr /> <p><em>The cover illustration is from</em> <a href="https://store.steampowered.com/app/2702170/Strange_Jigsaws/?curator_clanid=41324400"><strong>Strange Jigsaws</strong></a>, a game of strange jigsaws! You can buy the game on <a href="https://store.steampowered.com/app/2702170/Strange_Jigsaws/?curator_clanid=41324400">Steam</a>, and follow the developer on <a href="https://www.youtube.com/@FLEBpuzzles">YouTube</a> or <a href="https://bsky.app/profile/flebpuzzles.bsky.social">Bluesky</a>.</p> <h2 id="highlights">Highlights</h2> <p>For an overview of what’s new overall in Godot 4.5, have a look at the highlights for <a href="/article/dev-snapshot-godot-4-5-beta-1/">4.5 beta 1</a>, which cover a lot of the changes. This blog post only covers the changes between beta 6 and beta 7. This section covers the most relevant changes made since the beta 6 snapshot, which are largely regression fixes:</p> <ul> <li>3D: Create an undo/redo action when pinning a SoftBody3D point in the editor (<a href="https://github.com/godotengine/godot/pull/109828">GH-109828</a>).</li> <li>Audio: Web: Fix <code class="language-plaintext highlighter-rouge">AudioStreamPlayer.get_playback_position()</code> returning incorrect values for samples (<a href="https://github.com/godotengine/godot/pull/109790">GH-109790</a>).</li> <li>Core: Revert “Prevent crashing if <code class="language-plaintext highlighter-rouge">max_threads</code> is zero.” (<a href="https://github.com/godotengine/godot/pull/110003">GH-110003</a>).</li> <li>Documentation: Document ClassDB not storing information on user-defined classes (<a href="https://github.com/godotengine/godot/pull/109747">GH-109747</a>).</li> <li>Editor: Allow extending previously-non-abstract scripts that became abstract (<a href="https://github.com/godotengine/godot/pull/109903">GH-109903</a>).</li> <li>Editor: Don’t start editor as unsaved (<a href="https://github.com/godotengine/godot/pull/109825">GH-109825</a>).</li> <li>Input: Revert “[Web] Disregard touch events in pointer callbacks” (<a href="https://github.com/godotengine/godot/pull/109936">GH-109936</a>).</li> <li>Porting: Android: Fix safe area regression on older Android versions (<a href="https://github.com/godotengine/godot/pull/109818">GH-109818</a>).</li> <li>Rendering: Treat missing variants as normal cache misses during shader cache lookup (<a href="https://github.com/godotengine/godot/pull/109882">GH-109882</a>).</li> </ul> <h2 id="changelog">Changelog</h2> <p><strong>29 contributors</strong> submitted <strong>47 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5-beta7"><strong>interactive changelog</strong></a> for the complete list of changes since the previous 4.5-beta6 snapshot.</p> <p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/4ebf67c12dcdffcb69242569c118a371a654b6ae"><code class="language-plaintext highlighter-rouge">4ebf67c12</code></a>.</p> <h2 id="downloads">Downloads</h2> <div class="card card-download"> <a class="card-download-link" href="/download/archive/4.5-beta7"> Download Godot 4.5 beta7 </a> <div class="card-download-details"> <img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-5-beta-7.webp" /> <div class="card-download-platforms"> <div class="download-platform platform-linux"> <img width="24" height="24" src="/assets/images/platforms/linux.svg" title="Linux" alt="Linux" class="lightbox-ignore" /> Linux </div> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=beta7&amp;slug=linux.x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary platform-linux"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=beta7&amp;slug=mono_linux_x86_64.zip&amp;platform=linux.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-linux"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-macos"> <img width="24" height="24" src="/assets/images/platforms/macos.svg" title="macOS" alt="macOS" class="lightbox-ignore" /> macOS </div> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=beta7&amp;slug=macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary platform-macos"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=beta7&amp;slug=mono_macos.universal.zip&amp;platform=macos.universal" class="btn btn-download btn-download-primary btn-download-primary--mono platform-macos"> <div class="download-title"> .NET </div> </a> <div class="download-platform platform-windows"> <img width="24" height="24" src="/assets/images/platforms/windows.svg" title="Windows" alt="Windows" class="lightbox-ignore" /> Windows </div> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=beta7&amp;slug=win64.exe.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary platform-windows"> <div class="download-title"> Standard </div> </a> <a href="https://downloads.godotengine.org/?version=4.5&amp;flavor=beta7&amp;slug=mono_win64.zip&amp;platform=windows.64" class="btn btn-download btn-download-primary btn-download-primary--mono platform-windows"> <div class="download-title"> .NET </div> </a> </div> </div> <div class="card-download-sublinks"> <a class="card-download-other" href="/download/archive/4.5-beta7"> Export templates and other downloads </a> <a class="card-download-donate" href="https://fund.godotengine.org/"> Make a Donation </a> </div> </div> <style> .thankyou-wrapper { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10; } .thankyou { background: var(--base-color); box-shadow: var(--more-shadow); padding: 30px; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; border-radius: 13px; } .thankyou-reading { font-size: 16px; } .thankyou-reading-list { font-size: 16px; margin: 0; margin-left: 48px; padding-left: 0; } .thankyou-donate { margin-bottom: 24px; text-align: center; } .btn.btn-donate { background-color: var(--primary-color); color: hsla(0, 0%, 100%, 0.9); font-size: 22px; font-weight: 600; margin-bottom: 26px; } .thankyou h2 { text-shadow: var(--base-shadow); font-size: 36px; font-weight: 800; margin-bottom: 12px; } .thankyou h2 .anchored-link { /* Hiding the anchored text automatically added on blogposts */ display: none !important; } .thankyou p { max-width: 620px; font-size: 25px; } @media (max-width: 768px) { .thankyou-wrapper { display: block; } .thankyou { position: absolute; top: 0; left: 0; right: 0; bottom: 0; overflow: scroll; padding: 30px 40px 18px 40px; } .thankyou-reading-list { margin-left: 24px; } .btn-close-thankyou-popup { width: 48px; height: 48px; display: flex; justify-content: center; align-items: center; } } .btn-close-thankyou-popup { cursor: pointer; position: absolute; top: 12px; right: 12px; } .btn-close-thankyou-popup img { background: transparent !important; /* for overwriting the style in the blogposts img */ } @media (prefers-color-scheme: light) { .btn-close-thankyou-popup img { filter: invert(1); opacity: 0.75; } } </style> <script> document.addEventListener('DOMContentLoaded', () => { const thankYouWrapper = document.getElementById('thank-you'); // Close itself, when clicked outside of the popup area. thankYouWrapper.addEventListener('click', (e) => { if (e.target === thankYouWrapper) { thankYouWrapper.style.display = 'none'; } }); // Close with a close button. const thankYouBackButton = document.querySelector('.btn-close-thankyou-popup'); thankYouBackButton.addEventListener('click', () => { thankYouWrapper.style.display = 'none'; }); // Open from the main download buttons. const downloadButtons = document.querySelectorAll('.btn-download, .download-button'); downloadButtons.forEach((it) => { if (it.dataset?.external === "yes") { return; } it.addEventListener('click', () => { thankYouWrapper.style.display = ''; document.querySelector('.btn.btn-donate').focus(); }); }); // Open from the all downloads list. const downloadLinks = document.querySelectorAll('.download-link'); downloadLinks.forEach((it) => { it.addEventListener('click', () => { thankYouWrapper.style.display = ''; }); }); // Close the dialog when the user presses the escape key. document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { thankYouWrapper.style.display = 'none'; } }); }); </script> <div class="thankyou-wrapper" id="thank-you" style="display: none;"> <div class="thankyou"> <h2>Godot is downloading...</h2> <p class="thankyou-donate"> Godot exists thanks to donations from people like you. Help us continue our work: </p> <a href="https://fund.godotengine.org" class="btn btn-donate"> Make a Donation </a> <div class="btn-close-thankyou-popup"> <img src="/assets/icons/cross.svg" width="24" height="24" alt="Close this popup" class="lightbox-ignore" /> </div> </div> </div> <p><strong>Standard build</strong> includes support for GDScript and GDExtension.</p> <p><strong>.NET build</strong> (marked as <code class="language-plaintext highlighter-rouge">mono</code>) includes support for C#, as well as GDScript and GDExtension.</p> <div class="card card-warning"> <p> While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition <strong>a pre-release piece of software</strong>. Be sure to make frequent backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss. </p> </div> <h2 id="known-issues">Known issues</h2> <p>During the beta stage, we focus on solving both regressions (i.e. something that worked in a previous release is now broken) and significant new bugs introduced by new features. You can have a look at our current <a href="https://github.com/orgs/godotengine/projects/61">list of regressions and significant issues</a> which we aim to address before releasing 4.5. This list is dynamic and will be updated if we discover new showstopping issues after more users start testing the beta snapshots.</p> <p>With every release, we accept that there are going to be various issues which have already been reported but haven’t been fixed yet. See the GitHub issue tracker for a complete list of <a href="https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aopen+label%3Abug">known bugs</a>.</p> <h2 id="bug-reports">Bug reports</h2> <p>As a tester, we encourage you to <a href="https://github.com/godotengine/godot/issues">open bug reports</a> if you experience issues with this release. Please check the <a href="https://github.com/godotengine/godot/issues">existing issues on GitHub</a> first, using the search function with relevant keywords, to ensure that the bug you experience is not already known.</p> <p>In particular, any change that would cause a regression in your projects is very important to report (e.g. if something that worked fine in previous 4.x releases, but no longer works in this snapshot).</p> <h2 id="support">Support</h2> <p>Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part or full-time developers hired thanks to <a href="https://fund.godotengine.org/">generous donations from the Godot community</a>. A big thank you to everyone who has contributed <a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time</a> or <a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support</a> to the project!</p> <p>If you’d like to support the project financially and help us secure our future hires, you can do so using the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by <a href="https://godot.foundation/">Godot Foundation</a>. There are also several <a href="/donate">alternative ways to donate</a> which you may find more suitable.</p>Thaddeus Crews