mirror of
https://github.com/godotengine/godot-website.git
synced 2026-01-06 14:09:58 +03:00
4188 lines
361 KiB
XML
4188 lines
361 KiB
XML
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>Godot Engine Official</title><link href="https://godotengine.org/atom.xml" rel="self"/><link href="https://godotengine.org/"/><updated>2025-09-16T09:44:54+00:00</updated><id>https://godotengine.org/</id><entry><title>Godot 4.5, making dreams accessible</title><link href="https://godotengine.org/article/godot-4-5-making-dreams-accessible/"/><updated>2025-09-15T20:00:00+00:00</updated><id>https://godotengine.org/article/godot-4-5-making-dreams-accessible/</id><summary>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.</summary><content type="html"/><author><name>Godot contributors</name></author><category term="Release"/></entry><entry><title>Release candidate: Godot 4.5 RC 2</title><link href="https://godotengine.org/article/release-candidate-godot-4-5-rc-2/"/><updated>2025-09-10T12:00:00+00:00</updated><id>https://godotengine.org/article/release-candidate-godot-4-5-rc-2/</id><summary>One more for the road, again!</summary><content type="html"><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://github.com/godotengine/godot-builds/releases/download/4.5-rc2/Godot_v4.5-rc2_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-rc2/Godot_v4.5-rc2_mono_linux_x86_64.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-rc2/Godot_v4.5-rc2_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-rc2/Godot_v4.5-rc2_mono_macos.universal.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-rc2/Godot_v4.5-rc2_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-rc2/Godot_v4.5-rc2_mono_win64.zip" 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></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>Release candidate: Godot 4.5 RC 1</title><link href="https://godotengine.org/article/release-candidate-godot-4-5-rc-1/"/><updated>2025-09-05T12:00:00+00:00</updated><id>https://godotengine.org/article/release-candidate-godot-4-5-rc-1/</id><summary>Godot 4.5 stable release is imminent; let the last round(s) of testing begin!</summary><content type="html"><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://github.com/godotengine/godot-builds/releases/download/4.5-rc1/Godot_v4.5-rc1_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-rc1/Godot_v4.5-rc1_mono_linux_x86_64.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-rc1/Godot_v4.5-rc1_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-rc1/Godot_v4.5-rc1_mono_macos.universal.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-rc1/Godot_v4.5-rc1_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-rc1/Godot_v4.5-rc1_mono_win64.zip" 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></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>Godot XR update - August 2025</title><link href="https://godotengine.org/article/godot-xr-update-aug-2025/"/><updated>2025-09-02T12:00:00+00:00</updated><id>https://godotengine.org/article/godot-xr-update-aug-2025/</id><summary>Upcoming XR game jam, using the XR editor, new release channels and the new Render Models API</summary><content type="html"><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></content><author><name>Bastiaan Olij</name></author><category term="Progress Report"/></entry><entry><title>Dev snapshot: Godot 4.5 beta 7</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-5-beta-7/"/><updated>2025-08-29T12:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-5-beta-7/</id><summary>Two more for the road!</summary><content type="html"><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://github.com/godotengine/godot-builds/releases/download/4.5-beta7/Godot_v4.5-beta7_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta7/Godot_v4.5-beta7_mono_linux_x86_64.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta7/Godot_v4.5-beta7_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta7/Godot_v4.5-beta7_mono_macos.universal.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta7/Godot_v4.5-beta7_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta7/Godot_v4.5-beta7_mono_win64.zip" 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></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>Dev snapshot: Godot 4.5 beta 6</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-5-beta-6/"/><updated>2025-08-21T12:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-5-beta-6/</id><summary>One more for the road!</summary><content type="html"><p>It’s been a long journey, but we’re at the tail-end of 4.5’s beta cycle at last; thank you to everyone who contributed during this stage! As such, you can expect this to be our final beta release for 4.5 (probably), with release candidates just around the corner. Should this indeed be our final beta snapshot, all further changes will be <em>strictly</em> regression fixes; the content available here will be largely reflective of the 4.5 release. As always, users are strongly encouraged to test this snapshot to catch the remaining few release blockers.</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.beta6/"><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/2471970/Planetary_Life/?curator_clanid=41324400"><strong>Planetary Life</strong></a>, an evolution simulator where you guide custom creations from single-celled organisms to a modern civilization! You can buy the early-access title on <a href="https://store.steampowered.com/app/2471970/Planetary_Life/?curator_clanid=41324400">Steam</a>, and follow the developer on <a href="https://www.youtube.com/@sotenbox">YouTube</a> or <a href="https://twitter.com/sotenbox">Twitter</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 5 and beta 6. This section covers the most relevant changes made since the beta 5 snapshot, which are largely regression fixes:</p>
|
||
<h3 id="rename-svgtexture-to-dpitexture-mark-as-experimental">Rename <code class="language-plaintext highlighter-rouge">SVGTexture</code> to <code class="language-plaintext highlighter-rouge">DPITexture</code>, mark as “experimental”</h3>
|
||
<p>We generally don’t highlight reversions/renames in these blogposts, but this is a major exception that warrants added context. The original intent of <code class="language-plaintext highlighter-rouge">SVGTexture</code> was to handle icons that respect the font oversampling in the editor. That’s literally it.</p>
|
||
<p><img src="/storage/blog/dev-snapshot-godot-4-5-beta-6/dpi-compare.webp" alt="DPI Compare" /></p>
|
||
<p>This is part of the reason we never gave the feature its own dedicated section, beyond a bullet-point in its introductory blog. However, the reception to what should’ve been a fringe feature was far larger than we intended. Many users, understandably, took the feature to mean full-blown support for <a href="https://en.wikipedia.org/wiki/Adobe_Flash">Flash-like</a> graphics and realtime rasterization. The name and description ended up overselling our niche utility as a general-purpose solution; one which it was woefully underequipped to handle. Despite the original author, <a href="https://github.com/bruvzg">bruvzg</a>, making excellent strides towards refining and expanding functionality, it was ultimately akin to applying a bandage on a broken leg. Turning this implementation into something general purpose would be beyond the scope of <strong>4.6</strong>, let alone 4.5! The rebranding and experimental designation are our ninth-inning resolution.</p>
|
||
<p>This feature has a limited use-case, and will not be extended beyond that.</p>
|
||
<p><em>Having said that</em>: this is <strong>not</strong> us saying “no” to the prospect of realtime support for SVG/rasterized visuals. On the contrary: that’s exactly why we’re making this designation in the first place! The support for this functionality is very obvious, but it needs to be done right. So while that might be out-of-scope for 4.5, it’s not out-of-scope for Godot.</p>
|
||
<p>(<a href="https://github.com/godotengine/godot/pull/109811">GH-109811</a>, <a href="https://github.com/godotengine/godot/pull/109805">GH-109805</a>)</p>
|
||
<h3 id="and-more">And more!</h3>
|
||
<ul>
|
||
<li>Export: Android: Revert the removal of the <code class="language-plaintext highlighter-rouge">gradle_build/compress_native_libraries</code> export option (<a href="https://github.com/godotengine/godot/pull/107681">GH-107681</a>).</li>
|
||
<li>GDScript: Autocompletion: Don’t call const functions (<a href="https://github.com/godotengine/godot/pull/109297">GH-109297</a>).</li>
|
||
<li>XR: Add <code class="language-plaintext highlighter-rouge">CameraServer</code> <code class="language-plaintext highlighter-rouge">feeds_updated</code> signal, and document async behavior (<a href="https://github.com/godotengine/godot/pull/108165">GH-108165</a>).</li>
|
||
<li>GUI: Use MSDF instead of MTSDF for font rendering (<a href="https://github.com/godotengine/godot/pull/109437">GH-109437</a>).</li>
|
||
<li>Input: Add methods to check which event first triggered “just pressed/released” state (<a href="https://github.com/godotengine/godot/pull/109540">GH-109540</a>).</li>
|
||
<li>Shaders: Improve shader overloaded function error reporting (<a href="https://github.com/godotengine/godot/pull/109548">GH-109548</a>).</li>
|
||
<li>Documentation: Update <code class="language-plaintext highlighter-rouge">_physics_process</code> and <code class="language-plaintext highlighter-rouge">_process</code> docs to reflect implementation (<a href="https://github.com/godotengine/godot/pull/109320">GH-109320</a>).</li>
|
||
<li>Editor: Fix snapping logic in Range (<a href="https://github.com/godotengine/godot/pull/109100">GH-109100</a>).</li>
|
||
<li>Documentation: Document <code class="language-plaintext highlighter-rouge">Tree.item_collapsed</code> also being emitted when the item is expanded (<a href="https://github.com/godotengine/godot/pull/109242">GH-109242</a>).</li>
|
||
<li>Rendering: Fix material removal clearing all instances of shared texture arrays (<a href="https://github.com/godotengine/godot/pull/109644">GH-109644</a>).</li>
|
||
</ul>
|
||
<h2 id="changelog">Changelog</h2>
|
||
<p><strong>55 contributors</strong> submitted <strong>111 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5-beta6"><strong>interactive changelog</strong></a> for the complete list of changes since the previous 4.5-beta5 snapshot.</p>
|
||
<p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/d5ad0556a2c04c50694b5c04dc1b3bf03ecd7113"><code class="language-plaintext highlighter-rouge">d5ad0556a</code></a>.</p>
|
||
<h2 id="downloads">Downloads</h2>
|
||
<div class="card card-download">
|
||
<a class="card-download-link" href="/download/archive/4.5-beta6">
|
||
Download Godot 4.5 beta6
|
||
</a>
|
||
<div class="card-download-details">
|
||
<img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-5-beta-6.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://github.com/godotengine/godot-builds/releases/download/4.5-beta6/Godot_v4.5-beta6_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta6/Godot_v4.5-beta6_mono_linux_x86_64.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta6/Godot_v4.5-beta6_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta6/Godot_v4.5-beta6_mono_macos.universal.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta6/Godot_v4.5-beta6_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta6/Godot_v4.5-beta6_mono_win64.zip" 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-beta6">
|
||
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></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>Submissions open for Godot 2025 showreel</title><link href="https://godotengine.org/article/submissions-open-godot-2025-showreel/"/><updated>2025-08-15T13:00:00+00:00</updated><id>https://godotengine.org/article/submissions-open-godot-2025-showreel/</id><summary>Showcase your Godot creations in 2025! We're inviting submissions of short videos featuring your published or in-progress Godot games or tools. Don't miss this chance to be a part of it!</summary><content type="html"><p>Showcase your Godot Engine 2025 creations! We invite you to submit videos featuring your published or in-progress games or tools so we can make the Godot 2025 Showreel.</p>
|
||
<p>Our annual showreels are informative and celebratory showcases, to highlight the wide array of projects developed using the Godot Engine. If you want to participate this year and share your Godot-made game, app, or tool, submit your entry starting today.</p>
|
||
<h2 id="whats-new-this-year">What’s new this year?</h2>
|
||
<p>This year, we want to invite more people to participate in the voting phase. So, if you are a member of the <a href="https://fund.godotengine.org/">Development Fund</a>, you will be able to cast your votes alongside the Godot maintainers! To be eligible to vote, you need to have a recurrent donation active.</p>
|
||
<h2 id="how-to-submit">How to submit</h2>
|
||
<p>You can submit your entry in our <a href="https://showreel.godotengine.org/">Godot Showreel website</a>. Before submitting, please read the <a href="https://showreel.godotengine.org/about">submission guidelines</a>.</p>
|
||
<ul>
|
||
<li>📅 <strong>Submissions close on October 1st 2025</strong></li>
|
||
<li>📅 <strong>Voting starts on October 6th 2025</strong></li>
|
||
</ul>
|
||
<h2 id="need-inspiration">Need inspiration?</h2>
|
||
<p>Check out our <a href="https://www.youtube.com/watch?v=n1Lon_Q2T18&amp;list=PLeG_dAglpVo6EpaO9A1nkwJZOwrfiLdQ8&amp;index=1">showreel playlist</a> for some creative sparks and see what makes a great submission! Here is last year’s showreel:</p>
|
||
<iframe width="560" height="315" src="https://www.youtube.com/embed/n1Lon_Q2T18" frameborder="0" allowfullscreen="" style="width: 100%; aspect-ratio: 16 / 9; height: auto;"></iframe>
|
||
<p>Good luck! We can’t wait to see your creations!</p></content><author><name>Emi</name></author><category term="News"/></entry><entry><title>Dev snapshot: Godot 4.5 beta 5</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-5-beta-5/"/><updated>2025-08-06T12:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-5-beta-5/</id><summary>Back to our regularly scheduled schedule!</summary><content type="html"><p>The weekly pace of beta snapshots returns with a bang! While the overall number of changes might be smaller, that’s simply a logical consequence of a much tighter scope on what can be integrated at this stage, with even generic bugfixes given a higher scrutiny. Regression fixes are our number one priority as we grow closer to the end of the beta period, and our contributors have been putting in the work to make that happen; shoutouts to everyone who’s lent a hand!</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.beta5/"><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/3385370/Maze_Mice/?curator_clanid=41324400"><strong>Maze Mice</strong></a>, a bullet heaven roguelite where time only moves when you move! You can buy the game on <a href="https://store.steampowered.com/app/3385370/Maze_Mice/?curator_clanid=41324400">Steam</a> or <a href="https://trampolinetales.itch.io/maze-mice">itch.io</a>, and follow the developers on <a href="https://bsky.app/profile/TrampolineTales.com">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 4 and beta 5. This section covers the most relevant changes made since the beta 4 snapshot, which are largely regression fixes:</p>
|
||
<ul>
|
||
<li>2D: Rename Camera2D <code class="language-plaintext highlighter-rouge">set_position_smoothing_enabled</code> parameter (<a href="https://github.com/godotengine/godot/pull/109147">GH-109147</a>).</li>
|
||
<li>3D: Fix missing 3D gizmos (<a href="https://github.com/godotengine/godot/pull/109029">GH-109029</a>).</li>
|
||
<li>Audio: Fix <code class="language-plaintext highlighter-rouge">AudioListener3D</code> not tracking velocity for doppler (<a href="https://github.com/godotengine/godot/pull/108051">GH-108051</a>).</li>
|
||
<li>C#: Fix <code class="language-plaintext highlighter-rouge">Quaternion(Vector3, Vector3)</code> constructor when vectors are the same (<a href="https://github.com/godotengine/godot/pull/109281">GH-109281</a>).</li>
|
||
<li>Core: Ensure that threads only process one pump task (<a href="https://github.com/godotengine/godot/pull/108697">GH-108697</a>).</li>
|
||
<li>Core: Fix translation remaps incorrectly falling back (<a href="https://github.com/godotengine/godot/pull/103838">GH-103838</a>).</li>
|
||
<li>Documentation: Add search keywords for CheckButton and ButtonGroup (<a href="https://github.com/godotengine/godot/pull/109089">GH-109089</a>).</li>
|
||
<li>Editor: Fix inconsistent thumbnail width (<a href="https://github.com/godotengine/godot/pull/109199">GH-109199</a>).</li>
|
||
<li>GUI: Deactivate orientation gizmo on window exit (<a href="https://github.com/godotengine/godot/pull/108374">GH-108374</a>).</li>
|
||
<li>GUI: Fix ColorPicker linear mode sliders color (<a href="https://github.com/godotengine/godot/pull/108328">GH-108328</a>).</li>
|
||
<li>I18n: Disable auto translation of flag names in the inspector (<a href="https://github.com/godotengine/godot/pull/109294">GH-109294</a>).</li>
|
||
<li>Import: Prevent generating Editor 3D scene preview in headless mode (<a href="https://github.com/godotengine/godot/pull/109116">GH-109116</a>).</li>
|
||
<li>Input: Fix the usage of udev and dbus with SDL joystick input driver (<a href="https://github.com/godotengine/godot/pull/108373">GH-108373</a>).</li>
|
||
<li>Navigation: Fix path post-processing edgecentered (<a href="https://github.com/godotengine/godot/pull/109196">GH-109196</a>).</li>
|
||
<li>Physics: Revert “SoftBody3D: Support physics Interpolation” (<a href="https://github.com/godotengine/godot/pull/109265">GH-109265</a>).</li>
|
||
<li>Rendering: D3D12: Fix shader model check, initialization error handling (<a href="https://github.com/godotengine/godot/pull/108919">GH-108919</a>).</li>
|
||
<li>Rendering: OpenGL: Fix crash at startup with “Thread Model” set to “Separate” (<a href="https://github.com/godotengine/godot/pull/109057">GH-109057</a>).</li>
|
||
<li>Thirdparty: Update access-kit to 0.17.0 (<a href="https://github.com/godotengine/godot/pull/108924">GH-108924</a>).</li>
|
||
</ul>
|
||
<h2 id="changelog">Changelog</h2>
|
||
<p><strong>43 contributors</strong> submitted <strong>66 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5-beta5"><strong>interactive changelog</strong></a> for the complete list of changes since the previous 4.5-beta4 snapshot.</p>
|
||
<p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/c81fd6c51233a727da528cf7f74137d56b5d6efe"><code class="language-plaintext highlighter-rouge">c81fd6c51</code></a>.</p>
|
||
<h2 id="downloads">Downloads</h2>
|
||
<div class="card card-download">
|
||
<a class="card-download-link" href="/download/archive/4.5-beta5">
|
||
Download Godot 4.5 beta5
|
||
</a>
|
||
<div class="card-download-details">
|
||
<img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-5-beta-5.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://github.com/godotengine/godot-builds/releases/download/4.5-beta5/Godot_v4.5-beta5_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta5/Godot_v4.5-beta5_mono_linux_x86_64.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta5/Godot_v4.5-beta5_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta5/Godot_v4.5-beta5_mono_macos.universal.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta5/Godot_v4.5-beta5_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta5/Godot_v4.5-beta5_mono_win64.zip" 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-beta5">
|
||
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></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>Godot Foundation welcomes JetBrains as Platinum Sponsor</title><link href="https://godotengine.org/article/jetbrains-joins-dev-fund-supports-godot/"/><updated>2025-08-05T12:00:00+00:00</updated><id>https://godotengine.org/article/jetbrains-joins-dev-fund-supports-godot/</id><summary>The Godot Foundation is thrilled to welcome JetBrains as a Platinum Sponsor! We’re very grateful for the support, and hope you’ll give them a warm welcome too.</summary><content type="html"><p>We would like to welcome JetBrains as a Platinum Sponsor of the Godot Foundation. The support from JetBrains means a lot to us, so we would love to thank them for enabling us to keep improving the engine for everyone.</p>
|
||
<p>If you’re not already familiar with JetBrains, they build great developer tools, with some very helpful game development-facing features. JetBrains Rider is a must-have IDE and code editor for GDScript, C#, and C++, with specific support for various different game engines, including Godot. As well as rich editing and <kbd>Ctrl + Click</kbd> navigation, there are smart features like Find Usages, Rename (no more find/replace!) and specific inspections and quick fixes to help with best practices while writing, debugging or testing code for your game. Check out <a href="https://www.jetbrains.com/lp/rider-godot/?utm_source=google&amp;utm_medium=referral&amp;utm_campaign=rider&amp;utm_content=godot-page-blog">their page for more details</a>.</p>
|
||
<h3 id="free-for-non-commercial-use">Free for non-commercial use</h3>
|
||
<p>While JetBrains Rider is known as a professional tool, it recently became available for free for non-commercial use. That means if you’re just getting started with Godot, then it’s free for learning. It’s also free for open source, so you can use it to contribute to the engine, and it’s free for content creation, so you can make cool videos of your learning journey too. Other options for <a href="https://www.jetbrains.com/rider/buy/?utm_source=google&amp;utm_medium=referral&amp;utm_campaign=rider&amp;utm_content=godot-licensing&amp;section=commercial&amp;billing=yearly">licensing</a> and <a href="https://www.jetbrains.com/store/?utm_source=google&amp;utm_medium=referral&amp;utm_campaign=rider&amp;utm_content=godot-post-discounts&amp;section=discounts&amp;billing=yearly">discounts</a> are also available.</p>
|
||
<h3 id="a-message-from-jetbrains">A message from JetBrains:</h3>
|
||
<p>At JetBrains, we value the diversity of thought and experience in the software industry, such as the many different programming languages and related ecosystems. We can see that there is ample scope for multiple game engines, especially so for a not-for-profit, open-source game engine. Development happens thanks to the dedication of contributors and paid volunteers, and we welcome the chance to support passionate people making a difference with a successful community project.</p>
|
||
<p>We’d like to encourage you to visit the <a href="https://fund.godotengine.org/">Godot Development Fund</a> platform managed by the <a href="https://godot.foundation/">Godot Foundation</a>, or to check <a href="https://godotengine.org/donate">out the alternative ways to donate</a>, and join us in supporting such a fantastic project.</p></content><author><name>Godot Foundation</name></author><category term="News"/></entry><entry><title>Dev snapshot: Godot 4.5 beta 4</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-5-beta-4/"/><updated>2025-07-29T12:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-5-beta-4/</id><summary>More critical fixes coming your way!</summary><content type="html"><p>It’s been a while since our last snapshot, as our team has been quite busy knocking out some critical release-blocker and immediate-blocker issues. Thankfully, we’re back at the point where we can comfortably deliver our latest 4.5 pre-release candidate. As a refresher: the beta period means that the project has entered feature freeze, so the only changes you’ll be seeing are bugfixes and addressing regressions.</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.beta4/"><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/3775050/DOGWALK/?curator_clanid=41324400"><strong>DOGWALK</strong></a>, a title we had the pleasure of showcasing in a <a href="https://godotengine.org/article/godot-showcase-dogwalk/">dedicated article</a>. You can download the game for free on <a href="https://store.steampowered.com/app/3775050/DOGWALK/?curator_clanid=41324400">Steam</a>, <a href="https://blenderstudio.itch.io/dogwalk">itch.io</a>, and the <a href="https://studio.blender.org/projects/dogwalk/">Blender Studio website</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 3 and beta 4. This section covers the most relevant changes made since the beta 3 snapshot, which are largely regression fixes:</p>
|
||
<ul>
|
||
<li>Animation: Remove PropertyTweener start warning (<a href="https://github.com/godotengine/godot/pull/108410">GH-108410</a>).</li>
|
||
<li>Buildsystem: Android: Update the maven publishing configuration following the deprecation of the OSSHR service (<a href="https://github.com/godotengine/godot/pull/108393">GH-108393</a>).</li>
|
||
<li>Buildsystem: Web: Fix Emscripten for WebXR and update minimum version (<a href="https://github.com/godotengine/godot/pull/107460">GH-107460</a>).</li>
|
||
<li>C#: Fix thread deadlock when using a worker thread to load a script with a generic base class (<a href="https://github.com/godotengine/godot/pull/99798">GH-99798</a>).</li>
|
||
<li>Editor: Fix main editor title after changing language (<a href="https://github.com/godotengine/godot/pull/108396">GH-108396</a>).</li>
|
||
<li>Editor: Fix ScriptEditor inline colors float handling (<a href="https://github.com/godotengine/godot/pull/107904">GH-107904</a>).</li>
|
||
<li>GDScript: Fix autocompletion issues with nested types (<a href="https://github.com/godotengine/godot/pull/94996">GH-94996</a>).</li>
|
||
<li>GDScript: Fix lookup symbol for <code class="language-plaintext highlighter-rouge">super()</code> (<a href="https://github.com/godotengine/godot/pull/108306">GH-108306</a>).</li>
|
||
<li>GUI: Code Editor: Fix “Pick Color” menu option replacing multiple color items (<a href="https://github.com/godotengine/godot/pull/108431">GH-108431</a>).</li>
|
||
<li>GUI: RTL: Add method to get visible content bounding box (<a href="https://github.com/godotengine/godot/pull/108466">GH-108466</a>).</li>
|
||
<li>GUI: RTL: Add option to scroll follow visible characters (<a href="https://github.com/godotengine/godot/pull/108399">GH-108399</a>).</li>
|
||
<li>GUI: TextEdit: Draw guidelines under the text and caret (<a href="https://github.com/godotengine/godot/pull/108599">GH-108599</a>).</li>
|
||
<li>Multiplayer: Fix node cache errors on nested MultiplayerSpawners (<a href="https://github.com/godotengine/godot/pull/101416">GH-101416</a>).</li>
|
||
<li>Porting: Windows: Add SSE4.2 support runtime check (<a href="https://github.com/godotengine/godot/pull/108561">GH-108561</a>).</li>
|
||
<li>Rendering: Always perform color correction and debanding on nonlinear sRGB values (<a href="https://github.com/godotengine/godot/pull/107782">GH-107782</a>).</li>
|
||
<li>Rendering: Fix crash when creating voxel GI data (<a href="https://github.com/godotengine/godot/pull/108397">GH-108397</a>).</li>
|
||
<li>Rendering: Fix underculling of occulusion culling (<a href="https://github.com/godotengine/godot/pull/108347">GH-108347</a>).</li>
|
||
</ul>
|
||
<h2 id="changelog">Changelog</h2>
|
||
<p><strong>79 contributors</strong> submitted <strong>168 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5-beta4"><strong>interactive changelog</strong></a> for the complete list of changes since the previous 4.5-beta3 snapshot.</p>
|
||
<p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/2d113cc224cb9be07866d003819fcef2226a52ea"><code class="language-plaintext highlighter-rouge">2d113cc22</code></a>.</p>
|
||
<h2 id="downloads">Downloads</h2>
|
||
<div class="card card-download">
|
||
<a class="card-download-link" href="/download/archive/4.5-beta4">
|
||
Download Godot 4.5 beta4
|
||
</a>
|
||
<div class="card-download-details">
|
||
<img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-5-beta-4.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://github.com/godotengine/godot-builds/releases/download/4.5-beta4/Godot_v4.5-beta4_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta4/Godot_v4.5-beta4_mono_linux_x86_64.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta4/Godot_v4.5-beta4_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta4/Godot_v4.5-beta4_mono_macos.universal.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta4/Godot_v4.5-beta4_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta4/Godot_v4.5-beta4_mono_win64.zip" 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-beta4">
|
||
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></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>Godot OpenXR Vendors Plugin v4</title><link href="https://godotengine.org/article/godot-openxr-vendors-plugin-400/"/><updated>2025-07-22T12:00:00+00:00</updated><id>https://godotengine.org/article/godot-openxr-vendors-plugin-400/</id><summary>What's new in the latest release of the Godot OpenXR Vendors plugin?</summary><content type="html"><p>OpenXR support has been built into Godot since the release of Godot 4.0. However, the <a href="https://github.com/GodotVR/godot_openxr_vendors">OpenXR Vendors plugin</a> (maintained by Godot’s XR team) includes extensions to OpenXR created by hardware vendors (e.g. Meta, Pico, HTC, etc.), which we’ve chosen to keep outside of Godot itself.</p>
|
||
<p>We are happy to announce a new major release of the OpenXR Vendors plugin, which includes some exciting new features!</p>
|
||
<h2 id="version-400">Version 4.0.0</h2>
|
||
<p>The <a href="https://github.com/GodotVR/godot_openxr_vendors/releases/tag/4.0.0-stable">4.0.0 version</a> was actually released right before GodotCon Boston, but with all the excitement around the event (including our <a href="https://godotengine.org/article/godotcon-2025-xr-android-recap/">GodotCon presentation</a>), we never managed to find a time to properly announce it.</p>
|
||
<p>Here’s some of the key features in the transition from v3 to v4!</p>
|
||
<h3 id="switch-to-khronos-loader">Switch to Khronos loader</h3>
|
||
<p>Aside from OpenXR vendor extensions, the plugin has historically also included vendor-specific OpenXR loaders for Android. While OpenXR now has a standard loader for Android (which we call “the Khronos loader”), this wasn’t the case when standalone Android headsets first hit the market, and so a number of vendors created their own proprietary loaders.</p>
|
||
<p>However, starting with version 4.0.0, we are only including the Khronos loader, which is supported on all the Android headsets supported by the plugin.</p>
|
||
<p>This is a step towards eventually including support for the Khronos loader in Godot itself, which will make it possible to export to Android without requiring the plugin at all! That is something that Bastiaan Olij has <a href="https://github.com/godotengine/godot/pull/106891">started working on</a>, and we hope to merge for Godot 4.6.</p>
|
||
<h3 id="dynamic-resolution">Dynamic Resolution</h3>
|
||
<p>While hitting your FPS target is important for flat screen games, it’s <em>critically</em> important in VR and AR, where drops in frame rate can cause discomfort or nausea.</p>
|
||
<p>Version 4.0.0 adds support for Meta’s Dynamic Resolution feature, which will dynamically scale down the render resolution in response to system load. So, rather than getting lower FPS, the graphics will look somewhat pixelated until system load improves.</p>
|
||
<p><img alt="Side-by-side screenshot of normal resolution and dynamic resolution when load is high" src="/storage/blog/godot-openxr-vendors-400/meta-xr-dynamic-resolution.webp" /></p>
|
||
<p>This feature is enabled by default, and so requires no setup to use — just download the new version of the plugin!</p>
|
||
<p>See <a href="https://godotvr.github.io/godot_openxr_vendors/manual/meta/dynamic_resolution.html">the documentation</a> for more information.</p>
|
||
<h3 id="hybrid-apps">Hybrid Apps</h3>
|
||
<p>Hybrid Apps are applications that can dynamically switch between fully immersive and floating 2D panels. The Godot <a href="https://godotengine.org/article/godot-editor-horizon-store-early-access-release/">XR editor</a> is itself a Hybrid App.</p>
|
||
<p>Starting with version 4.0.0, developers can make their own Hybrid Apps for Meta headsets! Support for other vendors is in the works.</p>
|
||
<p>See this <a href="https://godotengine.org/article/godotcon-2025-xr-android-recap/">earlier blog</a> post where we discussed this feature in more detail, and <a href="https://godotvr.github.io/godot_openxr_vendors/manual/hybrid_apps.html">the documentation</a> on creating your own Hybrid App.</p>
|
||
<h3 id="only-enable-requested-extensions">Only enable requested extensions</h3>
|
||
<p>In previous versions of the plugin, we’d enable any OpenXR extensions that the plugin supported, if they were available on the headset. This may have been OK when we only supported a handful of extensions, but that number has really started to balloon, and some extensions may have unwanted side effects, including a potential impact on performance.</p>
|
||
<p>That’s why in version 4.0.0 and beyond, there are now project settings to enable or disable any of the OpenXR extensions supported by this plugin, so you can enable only the features that your application needs.</p>
|
||
<p><img alt="Project settings dialog with the OpenXR extensions added by this plugin" src="/storage/blog/godot-openxr-vendors-400/godot-openxr-vendors-extension-settings.webp" /></p>
|
||
<h2 id="version-410">Version 4.1.0</h2>
|
||
<p>Nothing ever stands still in the world of Godot!</p>
|
||
<p>We just released <a href="https://github.com/GodotVR/godot_openxr_vendors/releases/tag/4.1.1-stable">version 4.1.1</a> which includes even more exciting features.</p>
|
||
<h3 id="full-body-tracking">Full Body Tracking</h3>
|
||
<p>We’ve supported Meta’s original OpenXR body tracking extension since version 3.0.0, but it only addresses the player’s upper body.</p>
|
||
<p>In this release, we’ve added support for Meta’s full body tracking extension, which includes tracking data for the player’s legs, as well as support for the height calibration extension, and fidelity extension, which allows controlling the tracking data’s level of detail.</p>
|
||
<video autoplay="" loop="" muted="" playsinline="">
|
||
<source src="/storage/releases/4.3/video/body-face-tracking.webm" type="video/webm" />
|
||
</video>
|
||
<h3 id="application-spacewarp">Application SpaceWarp</h3>
|
||
<p>Meta’s Application SpaceWarp is a technology that allows your game to render at half framerate (for example, 36 FPS) and the OpenXR runtime will generate an in-between frames, so that the user will experience full framerate (72 FPS, in this example). This has been shown to increase an application’s frame budget by about ~70%, which can allow rendering higher fidelity graphics than would otherwise be possible on standalone VR hardware.</p>
|
||
<p>This technology helped deliver AAA graphics in <strong>Assassin’s Creed Nexus VR</strong>, and now VR games built with Godot can use it too!</p>
|
||
<p>The SpaceWarp extension is supported on headsets from Meta and Pico, and with the recent release of the multi-vendor <a href="https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XR_EXT_frame_synthesis">Frame Synthesis extension</a>, it’s expected to be supported on headsets from more vendors in the future.</p>
|
||
<p>See <a href="https://godotvr.github.io/godot_openxr_vendors/manual/meta/application_space_warp.html">the documentation</a> for more information.</p>
|
||
<h4 id="only-godot-45-and-the-vulkan-mobile-renderer">Only Godot 4.5+ and the Vulkan Mobile renderer</h4>
|
||
<p>While version 4.1.0 of the OpenXR Vendors Plugin is compatible with both Godot 4.4 and the forthcoming 4.5, Application SpaceWarp will only work when used with Godot 4.5 or later.</p>
|
||
<p>Also, this currently only works with the Vulkan Mobile renderer, but there is an <a href="https://github.com/godotengine/godot/pull/97151">open PR</a> to add support for Godot’s Compatibility renderer (OpenGL) as well.</p>
|
||
<h3 id="environment-depth">Environment Depth</h3>
|
||
<p>In an Augmented Reality (AR) or Mixed Reality (MR) application, by default, all virtual objects rendered by Godot will appear on top of any real world objects.</p>
|
||
<p>Meta’s Environment Depth extension provides a realtime depth map of the world in front of the player, which can be used to allow real world objects to occlude — that is, to appear on top of — virtual objects.</p>
|
||
<video autoplay="" loop="" muted="" playsinline="">
|
||
<source src="/storage/blog/godot-openxr-vendors-400/meta-xr-environment-depth.webm" type="video/webm" />
|
||
</video>
|
||
<p>Similar to Application SpaceWarp, this feature will only work when used with Godot 4.5 or later.</p>
|
||
<h2 id="and-more">And more!</h2>
|
||
<p>There are numerous other smaller changes, including:</p>
|
||
<ul>
|
||
<li><strong>Smaller build size!</strong> The overall package (which includes all platforms) is now 23.3 MB, whereas the last v3 release was 194 MB. That’s almost a 10x improvement!</li>
|
||
<li><strong>Support for the <code class="language-plaintext highlighter-rouge">XR_FB_composition_layer_image_layout</code> extension,</strong> which is useful with OpenXRCompositionLayers using Android surfaces.</li>
|
||
<li><strong>Support for the <code class="language-plaintext highlighter-rouge">XR_FB_composition_layer_depth_test</code> extension</strong>.</li>
|
||
<li><strong>Support for the <code class="language-plaintext highlighter-rouge">XR_FB_android_surface_swapchain_create</code> extension</strong>.</li>
|
||
<li><strong>Support for the <code class="language-plaintext highlighter-rouge">XR_META_boundary_visibility</code> extension</strong>.</li>
|
||
<li><strong>Support for the <code class="language-plaintext highlighter-rouge">XR_FB_color_space</code> extension</strong>.</li>
|
||
<li><strong>Add HorizonOS camera permissions when Android CAMERA permission is enabled</strong>.</li>
|
||
<li><strong>Instant splash screen configuration for Meta headsets</strong>.</li>
|
||
<li><strong>Several bug fixes</strong>.</li>
|
||
</ul>
|
||
<p>And there will be more exciting features to come in the future 🙂</p></content><author><name>David Snopek</name></author><category term="Progress Report"/></entry><entry><title>Godot Showcase - Dogwalk</title><link href="https://godotengine.org/article/godot-showcase-dogwalk/"/><updated>2025-07-15T02:00:00+00:00</updated><id>https://godotengine.org/article/godot-showcase-dogwalk/</id><summary>Julien and Simon from Blender Studio tell us about their experience working on Dogwalk.</summary><content type="html"><style>
|
||
.julien {
|
||
color: #aa77e2;
|
||
}
|
||
.simon {
|
||
color: #40b99f;
|
||
}
|
||
</style>
|
||
<p>Today we want to showcase a very special project. Most of you already know about it since it is really hard to go around any Godot space without finding people excited about Dogwalk. So if somehow you didn’t know about the project or you still haven’t been captivated by their <a href="https://www.youtube.com/watch?v=c4zP1sUgt6I&amp;list=PLav47HAVZMjkxzzLDqYpTCosbsWjosUN0">video blogs</a> over at YouTube, you are in for a treat! <strong class="julien">Julien Kaspar</strong> and <strong class="simon">Simon Thommes</strong> from the <a href="https://studio.blender.org">Blender Studio</a> team tell us about their experience developing their first Godot game: Dogwalk.</p>
|
||
<p>The game is already out on <a href="https://store.steampowered.com/app/3775050/DOGWALK/">Steam</a>, <a href="https://blenderstudio.itch.io/dogwalk">Itch.io</a>, and you can also get the project files with tons of extras from <a href="https://studio.blender.org/projects/dogwalk/">their website</a>.</p>
|
||
<iframe width="560" height="315" src="https://www.youtube.com/embed/gPENs56vfYk" frameborder="0" allowfullscreen="" style="width: 100%; aspect-ratio: 16 / 9; height: auto;"></iframe>
|
||
<h2 id="can-you-tell-us-a-little-bit-about-your-project">Can you tell us a little bit about your project?</h2>
|
||
<p><strong class="julien">Julien:</strong>
|
||
For this year the Blender Studio, which is the in-house art department of the Blender project, decided to focus on smaller short-term projects. We aimed for four months for each of them so I saw the unique chance to pitch a tiny game project. And the scope really had to be tiny to be able to pull off a game for the first time.</p>
|
||
<p>Dogwalk is a short, wholesome interactive story about a dog and a kid decorating a snowman together. One big focus was on wordless storytelling through reactive gameplay.
|
||
It’s not strictly about fun or overcoming challenges. It’s about allowing the player to shape and experience the relationship between the two characters, simply by constraining the player to a small set of mechanics and have the game react to what they do with that.</p>
|
||
<p><img src="/assets/showcase/dogwalk/dogwalk-1.jpg" alt="" /></p>
|
||
<h2 id="why-did-you-pick-godot-to-develop-this-project">Why did you pick Godot to develop this project?</h2>
|
||
<p><strong class="julien">Julien:</strong>
|
||
One of our primary missions (and constraints) is that we demonstrate how people can make entire movies by only using free open-source software. We call these “Open Projects” since we also licence them as open source and make the sources available.
|
||
So for a game project it seemed natural to use Godot for it. Personally I’m a fan of the engine and project, and was quite excited to be able to use it for a professional project in a team.</p>
|
||
<p>Every one of our projects also comes with some Blender-specific development targets. In this case we took a closer look at the export and import of glTF animations and assets. We created a pipeline for ourselves to stress-test the interoperability between Blender and Godot as much as our production scope allowed us.</p>
|
||
<p><img src="/assets/showcase/dogwalk/dogwalk-7.jpg" alt="" /></p>
|
||
<h2 id="how-did-the-project-compare-with-your-past-experiences-as-a-studio-who-usually-does-animation-movies-rather-than-games">How did the project compare with your past experiences as a studio who usually does animation movies rather than games?</h2>
|
||
<p><strong class="julien">Julien:</strong>
|
||
Pretty different. One big change is the shift from storyboarding/editorial to game prototyping/playtesting. In our film productions the story artists and animators would typically helm the project, but in this case I was doing it with an emphasis on development and design. It put us in very different shoes.</p>
|
||
<p>The animation and rigging workflow is also very different. Animators don’t have the usual fine level of control and instead need to playtest the game to see the animations applied in action. We were also not used to rigging for export and game engines in mind, so we made some mistakes on that side that needed creative problem solving later on.</p>
|
||
<p>But the biggest hurdle was to have the entire art team use Git LFS for version control. That was … quite a journey.</p>
|
||
<h2 id="how-did-you-find-the-current-export-pipeline-from-blender-to-godot">How did you find the current export pipeline from Blender to Godot?</h2>
|
||
<p><strong class="simon">Simon:</strong>
|
||
We were quite impressed immediately with how seamless the base level compatibility was. As an initial test we had built a demo environment in Blender and exported it as one big glTF to throw it in Godot. Everything just worked. That’s definitely nothing to scoff at.
|
||
Of course, we had a more refined pipeline setup in mind that would allow us to collaborate and iterate on assets and sets from within Blender.
|
||
But the extensible ecosystem of Godot and using glTF made it possible for us to hook up anywhere in the process and inject our own functionality. Coming in from outside, I was really quite surprised how powerful our available options are without a core understanding of how the engine works.</p>
|
||
<h2 id="were-there-any-quirks-with-the-way-the-material-rendering-and-animations-were-converted-from-blender-to-godot">Were there any quirks with the way the material rendering and animations were converted from Blender to Godot?</h2>
|
||
<p><strong class="simon">Simon:</strong>
|
||
We actually ran into a couple of issues with our stop motion animation style, which apparently seems to not be very common for game animation. So both on the export and the import level there were some parts that made assumptions over keyframe interpolation causing some obscure issues that took quite some investigation. But now those are all resolved.
|
||
Since Godot was always our target for rendering, there were some shader features that we didn’t replicate for the preview that we had in Blender. That’s mainly the fake paper thickness, for which we had two separate effects. But since the effects are so subtle, it wasn’t really required for the asset creation process.
|
||
We’re also not used to having to make drastic cuts due to performance, coming from usually doing offline rendering. So there were some rendering features that we had to disable and replace with some clever lighting cheats to save the frames.</p>
|
||
<p><img src="/assets/showcase/dogwalk/dogwalk-8.jpg" alt="" /></p>
|
||
<h2 id="are-there-suggestions-for-improvement-in-this-context">Are there suggestions for improvement in this context?</h2>
|
||
<p><strong class="simon">Simon:</strong>
|
||
Most of the things we ran into, we reported right away and they have already been fixed. It’s been great to see how actively the Godot community has been responding to the issues we found.
|
||
There have been some other more big-picture issues that we ran into when collaborating as a team and using versioning. This mainly relates to UIDs and caching going out of sync.
|
||
Since these issues are usually complex and relate to our pipeline and people’s individual systems, these were a bit more tricky to identify and report. Especially with the additional burden of our art team using git for the first time, it wasn’t always clear what were issues that were actually caused by Godot.
|
||
I really hope that we can find the time to sit together with some Blender and Godot developers to see what we can collectively take away from these issues and potentially change to make sure collaborating as a team using Blender and Godot is a smooth process.</p>
|
||
<h2 id="while-making-your-game-were-there-any-features-that-were-sorely-missing-in-blender-or-in-godot">While making your game, were there any features that were sorely missing in Blender or in Godot?</h2>
|
||
<p><strong class="julien">Julien:</strong>
|
||
Nothing that couldn’t be added manually or fixed with workarounds.
|
||
With one of the main gameplay and visual elements being the leash, sadly there was no Line3D node. But luckily the community had a <a href="https://github.com/CozyCubeGames/godot-lines-and-trails-3d">handy plugin</a> to immediately fill in that gap.
|
||
We also ran into some limitations with our animation system, but that <a href="https://github.com/godotengine/godot/pull/102398#issuecomment-2949711987">will be fixed in the upcoming 4.5 release</a>.</p>
|
||
<p><img src="/assets/showcase/dogwalk/dogwalk-4.jpg" alt="" /></p>
|
||
<hr />
|
||
<p>Thank you very much Julien and Simon for taking the time to answer our questions, and we look forward to see what you do next with Godot!</p>
|
||
<p>If you want to play Dogwalk, it is free and already out on <a href="https://store.steampowered.com/app/3775050/DOGWALK/">Steam</a>, and <a href="https://blenderstudio.itch.io/dogwalk">Itch.io</a>. Make sure to get the supporter DLC on Steam, donate via Itch, or subscribe to Blender Studio if you are interested in seeing more projects like this in the future.</p></content><author><name>Emi</name></author><category term="Showcase"/></entry><entry><title>Dev snapshot: Godot 4.5 beta 3</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-5-beta-3/"/><updated>2025-07-08T12:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-5-beta-3/</id><summary>Gotta go fast!</summary><content type="html"><p>The previous <a href="/article/dev-snapshot-godot-4-5-beta-2/">beta snapshot</a> was one week ago, and you mean to tell me another one is here already? Indeed, the community has done a terrific job of reporting regressions and getting fixes integrated in record time! That release was also responsible for the last of the merge exceptions being integrated, so everything from this point forward will be strictly addressing regressions and bugfixes.</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 <a href="https://editor.godotengine.org/releases/4.5.beta3/">try the <strong>Web editor</strong></a> or the <strong>Android editor</strong> 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/2945950/Dice_n_Goblins/?curator_clanid=41324400"><strong>Dice ‘n Goblins</strong></a>, <em>a dungeon-crawling, turn-based RPG where the fate of your goblin in a seemingly endless labyrinth is guided by the roll of the die! You can buy the game <a href="https://store.steampowered.com/app/2945950/Dice_n_Goblins/?curator_clanid=41324400">on Steam</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 beta 2 and beta 3. This section covers the most relevant changes made since the beta 2 snapshot, which are largely regression fixes:</p>
|
||
<ul>
|
||
<li>2D: Fix smoothed camera position with limits (<a href="https://github.com/godotengine/godot/pull/108200">GH-108200</a>).</li>
|
||
<li>Animation: Fix animation keying not working with toggleable inspector sections (<a href="https://github.com/godotengine/godot/pull/107919">GH-107919</a>).</li>
|
||
<li>Audio: Fix audio name doesn’t appear in exports of child classes of <code class="language-plaintext highlighter-rouge">AudioStream</code> (<a href="https://github.com/godotengine/godot/pull/107598">GH-107598</a>).</li>
|
||
<li>C#: Fix crash in C# bindings generator with bad enum documentation XML (<a href="https://github.com/godotengine/godot/pull/108262">GH-108262</a>).</li>
|
||
<li>Core: Fix typed collections using same reference across scene instances (<a href="https://github.com/godotengine/godot/pull/108216">GH-108216</a>).</li>
|
||
<li>Export: Update DotNet iOS export process (<a href="https://github.com/godotengine/godot/pull/100187">GH-100187</a>).</li>
|
||
<li>GDScript: Autocompletion: Fix type resolution when assigning <code class="language-plaintext highlighter-rouge">Variant</code> (<a href="https://github.com/godotengine/godot/pull/92584">GH-92584</a>).</li>
|
||
<li>GDScript: Fix crash when using a modulo operator between a float and an integer (<a href="https://github.com/godotengine/godot/pull/101536">GH-101536</a>).</li>
|
||
<li>GDScript: Improve GDScript editor support for global enums (<a href="https://github.com/godotengine/godot/pull/102186">GH-102186</a>).</li>
|
||
<li>GDScript: LSP: Don’t poll during editor setup (<a href="https://github.com/godotengine/godot/pull/108140">GH-108140</a>).</li>
|
||
<li>Particles: Fix floating point precision errors when setting particle trail length (<a href="https://github.com/godotengine/godot/pull/107568">GH-107568</a>).</li>
|
||
<li>Particles: Fix particles resetting properties when emitting is toggled (<a href="https://github.com/godotengine/godot/pull/107915">GH-107915</a>).</li>
|
||
<li>Physics: Jolt: wake up a soft body when its transform changes (<a href="https://github.com/godotengine/godot/pull/108094">GH-108094</a>).</li>
|
||
<li>Rendering: FTI: Add reset on setting <code class="language-plaintext highlighter-rouge">top_level</code> (<a href="https://github.com/godotengine/godot/pull/108112">GH-108112</a>).</li>
|
||
<li>Rendering: Metal: Use image atomic operations on supported Apple hardware (<a href="https://github.com/godotengine/godot/pull/108028">GH-108028</a>).</li>
|
||
</ul>
|
||
<h2 id="changelog">Changelog</h2>
|
||
<p><strong>37 contributors</strong> submitted <strong>56 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5-beta3"><strong>interactive changelog</strong></a> for the complete list of changes since the previous 4.5-beta2 snapshot.</p>
|
||
<p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/4d1f26e1fd1fa46f2223fe0b6ac300744bf79b88"><code class="language-plaintext highlighter-rouge">4d1f26e1f</code></a>.</p>
|
||
<h2 id="downloads">Downloads</h2>
|
||
<div class="card card-download">
|
||
<a class="card-download-link" href="/download/archive/4.5-beta3">
|
||
Download Godot 4.5 beta3
|
||
</a>
|
||
<div class="card-download-details">
|
||
<img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-5-beta-3.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://github.com/godotengine/godot-builds/releases/download/4.5-beta3/Godot_v4.5-beta3_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta3/Godot_v4.5-beta3_mono_linux_x86_64.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta3/Godot_v4.5-beta3_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta3/Godot_v4.5-beta3_mono_macos.universal.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta3/Godot_v4.5-beta3_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta3/Godot_v4.5-beta3_mono_win64.zip" 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-beta3">
|
||
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>
|
||
<ul>
|
||
<li>The Android Library infrastructure we’ve been using <a href="https://central.sonatype.org/news/20250326_ossrh_sunset/">has been sunset</a>, so those components are currently unavailable.</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 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></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>Dev snapshot: Godot 4.5 beta 2</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-5-beta-2/"/><updated>2025-07-01T12:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-5-beta-2/</id><summary>The cow goes "moo"! The duck goes "quack"! The bug goes *squash*!</summary><content type="html"><p>It’s been two weeks since the release of <a href="/article/dev-snapshot-godot-4-5-beta-1/">4.5 beta 1</a>, and already a plethora of various bugs and regressions have been dealt with, so it’s time for 4.5 beta 2. This is an ongoing process of course, so there’s going to be a couple more beta snapshots following this, but progress has been smooth and we’re quite satisfied with our current timeframe; great work, everyone!</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 <a href="https://editor.godotengine.org/releases/4.5.beta2/">try the <strong>Web editor</strong></a> or the <strong>Android editor</strong> 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/1948490/Xion_Leak/?curator_clanid=41324400"><strong>Xion Leak</strong></a>, <em>a fast-paced, co-op platformer where you win trophies by evading the dangers of the mysterious Foreman! You can buy the game <a href="https://store.steampowered.com/app/1948490/Xion_Leak/?curator_clanid=41324400">on Steam</a>, and follow the developers <a href="https://bsky.app/profile/gentlebeastsstudio.bsky.social">on 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 beta 1 and beta 2. This section covers the most relevant changes made since the beta 1 snapshot, which are largely regression fixes:</p>
|
||
<h3 id="input-sdl3-joystick-input-driver">Input: SDL3 joystick input driver</h3>
|
||
<p>Even though we’re now in feature freeze, you might recall us mentioning a handful of pre-approved exceptions. This was by far the biggest one of note: <strong>SDL3 input</strong>! For those unaware: <abbr title="Simple DirectMedia Layer">SDL</abbr> is a collection of common APIs shared across an ever-growing portion of software, allowing for convenient and easy integration of common tasks and actions for developers. They’ve recently came out with their 3.0 release <a href="https://www.patreon.com/posts/120491416">this January</a>, bringing with it a multitude of features and enhancements alike.</p>
|
||
<p>First-time contributor <a href="https://github.com/Nintorch">Nintorch</a> took to the integration of one such feature: their input handler (<a href="https://github.com/godotengine/godot/pull/106218">GH-106218</a>). This implementation was so thorough, that it entirely <em>replaced</em> our old input method! The more technical nuances of this change are better delved into on the PR itself, but the biggest takeaway is that this opens the door for easy and native integration of additional input features; while we won’t be seeing any of these in 4.5, Nintorch already has a <a href="https://github.com/godotengine/godot/pull/107967">work-in-progress PR</a> that’s set to add these features.</p>
|
||
<h3 id="changes-from-beta-1">Changes from Beta 1</h3>
|
||
<p>While it’s not uncommon for features we’ve previously highlighted to get new changes/adjustments, it’s rare for follow-up posts to actually highlight them. This is due to the majority of cases being a “finalization” of the feature in question, or otherwise making everything work as expected once the community unearths new bugs. However, there were a couple of features that warrant a special mention here, as a follow-up to them was explicitly highlighted in beta 1.</p>
|
||
<p>The first is regarding the <a href="https://godotengine.org/article/dev-snapshot-godot-4-5-beta-1/#gdscript">new <code class="language-plaintext highlighter-rouge">abstract</code> keyword in GDScript</a>. Prior to the publication of that blogpost, it was decided by the GDScript team that the keyword shall be converted to an annotation instead. In practice, this is a simple adjustment to existing implementations: just prepend an <code class="language-plaintext highlighter-rouge">@</code>!</p>
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># Before:
|
||
abstract class_name MyBaseClass
|
||
# After:
|
||
@abstract class_name MyBaseClass
|
||
</code></pre></div></div>
|
||
<p>Next, we’ve made the tough decision to revert the <a href="/article/dev-snapshot-godot-4-5-beta-1/#editor">scene preview thumbnails</a>. We are very aware of how much people want this feature; trust us, we want them just as badly! But the ramifications of this change proved to be far greater than anticipated, and ultimately doesn’t suit the beta stage of production. We shall revisit this PR early in the 4.6 development cycle, where such a change has the chance to breathe.</p>
|
||
<h3 id="and-more">And more!</h3>
|
||
<ul>
|
||
<li>3D: Fix freelook in 3D when multiple viewports are open (<a href="https://github.com/godotengine/godot/pull/107530">GH-107530</a>).</li>
|
||
<li>Audio: iOS: Add permission request for Apple embedded platforms, fix microphone input (<a href="https://github.com/godotengine/godot/pull/107973">GH-107973</a>).</li>
|
||
<li>Audio: Web: Fix Webkit leak caused by the position reporting audio worklets (<a href="https://github.com/godotengine/godot/pull/107948">GH-107948</a>).</li>
|
||
<li>Buildsystem: Enable <code class="language-plaintext highlighter-rouge">lightmapper</code> and <code class="language-plaintext highlighter-rouge">xatlas_unwrap</code> modules on Android and iOS editors (<a href="https://github.com/godotengine/godot/pull/107635">GH-107635</a>).</li>
|
||
<li>Editor: Allow toggling UID display in path properties (<a href="https://github.com/godotengine/godot/pull/106716">GH-106716</a>).</li>
|
||
<li>Export: Android: Implement sparse bundle PCK support (<a href="https://github.com/godotengine/godot/pull/105984">GH-105984</a>).</li>
|
||
<li>GDScript: Fix errors not being emitted when debugger breaks on script errors (<a href="https://github.com/godotengine/godot/pull/107663">GH-107663</a>).</li>
|
||
<li>GDScript: LSP: Fix file URI handling + warn about workspace project mismatch (<a href="https://github.com/godotengine/godot/pull/104401">GH-104401</a>).</li>
|
||
<li>GUI: Android: Address API 35 UI behavior changes (<a href="https://github.com/godotengine/godot/pull/107742">GH-107742</a>).</li>
|
||
<li>GUI: Fix and improve editor state persistence for the VisualShader editor (<a href="https://github.com/godotengine/godot/pull/98566">GH-98566</a>).</li>
|
||
<li>Rendering: Allow double precision modelview (<a href="https://github.com/godotengine/godot/pull/106951">GH-106951</a>).</li>
|
||
<li>Rendering: Fix baked VoxelGI using the wrong color space (<a href="https://github.com/godotengine/godot/pull/107776">GH-107776</a>).</li>
|
||
<li>Rendering: Fix GLES3 stereo output (sRGB + lens distortion) (<a href="https://github.com/godotengine/godot/pull/107698">GH-107698</a>).</li>
|
||
<li>XR: Add support for running hybrid apps from the XR editor (<a href="https://github.com/godotengine/godot/pull/103972">GH-103972</a>).</li>
|
||
<li>XR: OpenXR: Add support for render models extension (<a href="https://github.com/godotengine/godot/pull/107388">GH-107388</a>).</li>
|
||
</ul>
|
||
<h2 id="changelog">Changelog</h2>
|
||
<p><strong>82 contributors</strong> submitted <strong>152 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5-beta2"><strong>interactive changelog</strong></a> for the complete list of changes since the previous 4.5-beta2 snapshot.</p>
|
||
<p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/e1b4101e3460dd9c6ba0b7f8d88e9751b8383f5b"><code class="language-plaintext highlighter-rouge">e1b4101e3</code></a>.</p>
|
||
<h2 id="downloads">Downloads</h2>
|
||
<div class="card card-download">
|
||
<a class="card-download-link" href="/download/archive/4.5-beta2">
|
||
Download Godot 4.5 beta2
|
||
</a>
|
||
<div class="card-download-details">
|
||
<img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-5-beta-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://github.com/godotengine/godot-builds/releases/download/4.5-beta2/Godot_v4.5-beta2_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta2/Godot_v4.5-beta2_mono_linux_x86_64.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta2/Godot_v4.5-beta2_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta2/Godot_v4.5-beta2_mono_macos.universal.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta2/Godot_v4.5-beta2_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta2/Godot_v4.5-beta2_mono_win64.zip" 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-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.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>
|
||
<p>There are currently no known issues introduced by this release.</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></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>Godot Community Poll 2025</title><link href="https://godotengine.org/article/godot-community-poll-2025/"/><updated>2025-06-30T14:00:00+00:00</updated><id>https://godotengine.org/article/godot-community-poll-2025/</id><summary>We want to learn more about the Godot community, understand who the users of the engine are, and find out how we can better support you.</summary><content type="html"><p><strong>Update:</strong> This poll is now over. <a href="https://docs.google.com/forms/d/e/1FAIpQLScKWGJoLEeNW1qrsDfZRfk7gHultapacH5ZhQmo9XRZADW1IQ/viewanalytics">You can view the results here.</a></p>
|
||
<hr />
|
||
<p>We want to learn more about the Godot community, understand who the users of the engine are, and find out how we can better support you. To achieve that, we have a short set of questions and hope you will take a few minutes to fill them out. The results will also help us guide our current and future items in the <a href="https://godotengine.org/priorities/">priority list</a>.</p>
|
||
<p>The poll is anonymous, and we will share the results publicly once submissions are closed. It will remain open for a week and should take only 5-10 minutes to complete.</p>
|
||
<p>👉 <a href="https://forms.gle/FmCSVdQBDiuVLeJ99">Click here to complete the 2025 community poll!</a></p>
|
||
<p>If you are interested in results from previous years, you can find them at the following links:
|
||
<a href="https://docs.google.com/forms/d/1eicOppRQG2RFZ8CjIGFf5Kha5yklO854fV8-YFtlWxk/viewanalytics">2024</a>, <a href="https://docs.google.com/forms/d/e/1FAIpQLSeXRE1nF64PUilO6fA7Pevh2lWukJtpdBvc2_A3fGfuciy-gQ/viewanalytics">2023</a>, <a href="https://docs.google.com/forms/d/e/1FAIpQLSe-OIpxXqou9cDnPXEAjxzpICbf8_YZB3jUizdECXRydtB8cA/viewanalytics">2022</a>, <a href="https://docs.google.com/forms/d/e/1FAIpQLSfOj9m71X98_z7-UC4iiM6Uxd2HhITRzmF-M2Yx-d7Yq5KNUg/viewanalytics">2021</a>, and <a href="https://docs.google.com/forms/d/e/1FAIpQLSePCblF1p-Sv3AJYWQ8reRhx8c-1WOX9ZI0P-NJ-5TGw79bqA/viewanalytics">2020</a>.</p></content><author><name>Emi</name></author><category term="News"/></entry><entry><title>Maintenance release: Godot 3.6.1</title><link href="https://godotengine.org/article/maintenance-release-godot-3-6-1/"/><updated>2025-06-25T12:00:00+00:00</updated><id>https://godotengine.org/article/maintenance-release-godot-3-6-1/</id><summary>Godot 3.6 was released in September last year, and it has been mostly stable, although there have been a few more important bugs which warrant a maintenance "patch" release (3.6.x).</summary><content type="html"><p><a href="/article/godot-3-6-finally-released">Godot 3.6</a> was released in September last year, and it has been mostly stable, although there have been a few more important bugs which warrant a maintenance “patch” release (3.6.x).</p>
|
||
<p>As well as bug fixes, this release also contains some cherry-picks from 4.x to update libraries. Let us know if you spot any regressions.</p>
|
||
<p><a href="#downloads">Jump to the <strong>Downloads</strong> section.</a></p>
|
||
<p>As usual, you can try it live with the <a href="https://editor.godotengine.org/releases/3.6.1/"><strong>online version of the Godot editor</strong></a> updated for this release.</p>
|
||
<hr />
|
||
<p><em>The illustration picture for this article comes from</em> <a href="https://store.steampowered.com/app/2226430/CraftCraft_Fantasy_Merchant_Simulator/?curator_clanid=41324400"><strong>CraftCraft</strong></a>, <em>a fantasy merchant simulator, where you work in a quaint port town as a humble jeweler/smith alongside your loyal owlcat. It is developed by <a href="https://placeholder.games/">Placeholder Gameworks</a>. You can get the game on <a href="https://store.steampowered.com/app/2226430/CraftCraft_Fantasy_Merchant_Simulator/?curator_clanid=41324400">Steam</a>, and follow the developers on <a href="https://bsky.app/profile/placeholder.games">Bluesky</a> and <a href="https://www.youtube.com/@placeholdergameworks">YouTube</a>.</em></p>
|
||
<h2 id="major-bugs-fixed">Major bugs fixed</h2>
|
||
<h3 id="grid-snapping--ruler-in-editor">Grid snapping + ruler in editor</h3>
|
||
<p>A small change to <code class="language-plaintext highlighter-rouge">Range::set_value</code> unfortunately led to a major regression in grid and ruler behaviour when zoomed in (<a href="https://github.com/godotengine/godot/issues/98466">GH-98466</a>).</p>
|
||
<p>We decided on balance the safest course of action in 3.x was to revert the change.</p>
|
||
<ul>
|
||
<li>GUI: Revert changes to <code class="language-plaintext highlighter-rouge">Range::set_value</code> (<a href="https://github.com/godotengine/godot/pull/100459">GH-100459</a>).</li>
|
||
</ul>
|
||
<h3 id="performance-regression-due-to-directional-shadow-fade_start">Performance regression due to directional shadow fade_start</h3>
|
||
<p>Users noticed a drop in performance in 3D scenes with DirectionalLight in Godot 3.6 compared to 3.5. We tracked this down to the introduction of the <code class="language-plaintext highlighter-rouge">fade_start</code> property, which made some changes to the shader.</p>
|
||
<p>We were able to fix this up with some modifications.</p>
|
||
<ul>
|
||
<li>Rendering: Ameliorate performance regression due to directional shadow <code class="language-plaintext highlighter-rouge">fade_start</code> (<a href="https://github.com/godotengine/godot/pull/99536">GH-99536</a>).</li>
|
||
</ul>
|
||
<h2 id="changes">Changes</h2>
|
||
<p>Here are the main changes since 3.6-stable:</p>
|
||
<h4 id="2d">2D</h4>
|
||
<ul>
|
||
<li>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>
|
||
</ul>
|
||
<h4 id="3d">3D</h4>
|
||
<ul>
|
||
<li>Physics Interpolation - fix client interpolation pump (<a href="https://github.com/godotengine/godot/pull/102184">GH-102184</a>).</li>
|
||
</ul>
|
||
<h4 id="audio">Audio</h4>
|
||
<ul>
|
||
<li>Initialize pa_buffer_attr.maxlength to -1 (<a href="https://github.com/godotengine/godot/pull/102069">GH-102069</a>).</li>
|
||
<li>ResourceImporterWAV: Detect if data chunk size is larger than the actual size (<a href="https://github.com/godotengine/godot/pull/107694">GH-107694</a>).</li>
|
||
</ul>
|
||
<h4 id="buildsystem">Buildsystem</h4>
|
||
<ul>
|
||
<li>Fix VS project generation with SCons 4.8.0+ (<a href="https://github.com/godotengine/godot/pull/94117">GH-94117</a>).</li>
|
||
<li>CI: Update Linux runners to Ubuntu 24.04, but keep 22.04 for Linux builds (<a href="https://github.com/godotengine/godot/pull/98896">GH-98896</a>).</li>
|
||
<li>Improve cache handling (<a href="https://github.com/godotengine/godot/pull/98992">GH-98992</a>).</li>
|
||
<li>Windows: Rename <code class="language-plaintext highlighter-rouge">PKEY_Device_FriendlyName</code> to avoid duplicate symbols with newer MinGW SDKs (<a href="https://github.com/godotengine/godot/pull/99036">GH-99036</a>).</li>
|
||
<li>embree: Fix invalid output operators raising errors with GCC 15 (<a href="https://github.com/godotengine/godot/pull/102023">GH-102023</a>).</li>
|
||
</ul>
|
||
<h4 id="c">C#</h4>
|
||
<ul>
|
||
<li>Mono: Move MonoGCHandle into gdmono namespace (<a href="https://github.com/godotengine/godot/pull/106578">GH-106578</a>).</li>
|
||
</ul>
|
||
<h4 id="core">Core</h4>
|
||
<ul>
|
||
<li><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>Fix parsing of <code class="language-plaintext highlighter-rouge">4.</code> in Expression (<a href="https://github.com/godotengine/godot/pull/96891">GH-96891</a>).</li>
|
||
<li>Cache results for <code class="language-plaintext highlighter-rouge">TranslationServer.compare_locales()</code> (<a href="https://github.com/godotengine/godot/pull/98234">GH-98234</a>).</li>
|
||
<li>Fix error when non-ASCII characters in resource pack path (<a href="https://github.com/godotengine/godot/pull/98843">GH-98843</a>).</li>
|
||
<li>JavaScript: Don’t cache emsdk (<a href="https://github.com/godotengine/godot/pull/99037">GH-99037</a>).</li>
|
||
<li>Prevent inlining error printing functions (<a href="https://github.com/godotengine/godot/pull/103621">GH-103621</a>).</li>
|
||
</ul>
|
||
<h4 id="documentation">Documentation</h4>
|
||
<ul>
|
||
<li>Document Timer autostart in tool scripts (<a href="https://github.com/godotengine/godot/pull/99048">GH-99048</a>).</li>
|
||
<li>Document <code class="language-plaintext highlighter-rouge">radial_center_offset</code> bounds for <code class="language-plaintext highlighter-rouge">TextureProgress</code> (<a href="https://github.com/godotengine/godot/pull/99869">GH-99869</a>).</li>
|
||
<li>Docs: Add description for <code class="language-plaintext highlighter-rouge">BitMap.opaque_to_polygons</code> method (<a href="https://github.com/godotengine/godot/pull/102684">GH-102684</a>).</li>
|
||
</ul>
|
||
<h4 id="editor">Editor</h4>
|
||
<ul>
|
||
<li>Cancel tooltips when the mouse leaves the window (<a href="https://github.com/godotengine/godot/pull/95978">GH-95978</a>).</li>
|
||
</ul>
|
||
<h4 id="gdscript">GDScript</h4>
|
||
<ul>
|
||
<li>Backport “Cleanup function state connections when destroying instance” for Godot 3 (<a href="https://github.com/godotengine/godot/pull/97464">GH-97464</a>).</li>
|
||
</ul>
|
||
<h4 id="gui">GUI</h4>
|
||
<ul>
|
||
<li>Fix button click detection when <code class="language-plaintext highlighter-rouge">Tree</code> is rotated (<a href="https://github.com/godotengine/godot/pull/98300">GH-98300</a>).</li>
|
||
<li>Fix <code class="language-plaintext highlighter-rouge">PopupMenu</code> margin and separation calculations (<a href="https://github.com/godotengine/godot/pull/98452">GH-98452</a>).</li>
|
||
<li>Fix <code class="language-plaintext highlighter-rouge">Button</code> not listing <code class="language-plaintext highlighter-rouge">hover_pressed</code> stylebox (<a href="https://github.com/godotengine/godot/pull/98511">GH-98511</a>).</li>
|
||
<li>Improve <code class="language-plaintext highlighter-rouge">TextureProgress.set_radial_initial_angle()</code> by removing loops (<a href="https://github.com/godotengine/godot/pull/99434">GH-99434</a>).</li>
|
||
<li>Show <code class="language-plaintext highlighter-rouge">TextureProgress</code> radial center cross only when editing the scene (<a href="https://github.com/godotengine/godot/pull/99870">GH-99870</a>).</li>
|
||
<li>Revert changes to <code class="language-plaintext highlighter-rouge">Range::set_value</code> #65101 (<a href="https://github.com/godotengine/godot/pull/100459">GH-100459</a>).</li>
|
||
<li>[3.x, RTL] Track external changes in the custom fonts set by BBCode / <code class="language-plaintext highlighter-rouge">push_font</code> (<a href="https://github.com/godotengine/godot/pull/105266">GH-105266</a>).</li>
|
||
<li>Revert “Fix Button not listing <code class="language-plaintext highlighter-rouge">hover_pressed</code> stylebox” (<a href="https://github.com/godotengine/godot/pull/107696">GH-107696</a>).</li>
|
||
</ul>
|
||
<h4 id="input">Input</h4>
|
||
<ul>
|
||
<li>Fix Xbox Controller on Android (<a href="https://github.com/godotengine/godot/pull/106021">GH-106021</a>).</li>
|
||
</ul>
|
||
<h4 id="physics">Physics</h4>
|
||
<ul>
|
||
<li>Fix physics platform behaviour regression (<a href="https://github.com/godotengine/godot/pull/97316">GH-97316</a>).</li>
|
||
</ul>
|
||
<h4 id="porting">Porting</h4>
|
||
<ul>
|
||
<li>Disable Nahimic code injection (<a href="https://github.com/godotengine/godot/pull/99388">GH-99388</a>).</li>
|
||
</ul>
|
||
<h4 id="rendering">Rendering</h4>
|
||
<ul>
|
||
<li>Ameliorate performance regression due to directional shadow <code class="language-plaintext highlighter-rouge">fade_start</code> (<a href="https://github.com/godotengine/godot/pull/99536">GH-99536</a>).</li>
|
||
<li>Hide last DirectionalLight shadow split distance property when using PSSM 3 Splits (<a href="https://github.com/godotengine/godot/pull/99554">GH-99554</a>).</li>
|
||
<li>Physics Interpolation - Add editor warning for non-interpolated <code class="language-plaintext highlighter-rouge">PhysicsBody</code> (<a href="https://github.com/godotengine/godot/pull/103355">GH-103355</a>).</li>
|
||
</ul>
|
||
<h4 id="thirdparty">Thirdparty</h4>
|
||
<ul>
|
||
<li>certs: Sync with Mozilla bundle as of Oct 19, 2024 (<a href="https://github.com/godotengine/godot/pull/98855">GH-98855</a>).</li>
|
||
<li>Update the <code class="language-plaintext highlighter-rouge">Thirdparty</code> section of <code class="language-plaintext highlighter-rouge">CHANGELOG.md</code> (<a href="https://github.com/godotengine/godot/pull/99692">GH-99692</a>).</li>
|
||
<li>mbedtls: Update to upstream version 2.28.9 (<a href="https://github.com/godotengine/godot/pull/100013">GH-100013</a>).</li>
|
||
<li>mbedTLS: Update to version 2.28.10 (<a href="https://github.com/godotengine/godot/pull/104580">GH-104580</a>).</li>
|
||
<li>certs: Sync with upstream as of Apr 8 2025 (<a href="https://github.com/godotengine/godot/pull/106615">GH-106615</a>).</li>
|
||
<li>Fix unzSeekCurrentFile not resetting total_out_64 (<a href="https://github.com/godotengine/godot/pull/106872">GH-106872</a>).</li>
|
||
<li>libwebm: Fix double free in mkvparser ContentEncoding (<a href="https://github.com/godotengine/godot/pull/107781">GH-107781</a>).</li>
|
||
</ul>
|
||
<h2 id="changelog">Changelog</h2>
|
||
<p><strong>21 contributors</strong> submitted around <strong>45 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#3.6.1"><strong>interactive changelog</strong></a> for the complete list of changes since the 3.6 release.</p>
|
||
<p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/b1ba98fced19ac05b7a39b64a97dd7b1005cb7bb"><code class="language-plaintext highlighter-rouge">b1ba98fce</code></a>.</p>
|
||
<p><a id="downloads"></a></p>
|
||
<h2 id="downloads">Downloads</h2>
|
||
<div class="card card-download">
|
||
<a class="card-download-link" href="/download/archive/3.6.1-stable">
|
||
Download Godot 3.6.1 stable
|
||
</a>
|
||
<div class="card-download-details">
|
||
<img class="lightbox-ignore" src="/storage/blog/covers/maintenance-release-godot-3-6-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://github.com/godotengine/godot-builds/releases/download/3.6.1-stable/Godot_v3.6.1-stable_x11.64.zip" class="btn btn-download btn-download-primary platform-linux">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/3.6.1-stable/Godot_v3.6.1-stable_mono_x11_64.zip" 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://github.com/godotengine/godot-builds/releases/download/3.6.1-stable/Godot_v3.6.1-stable_osx.universal.zip" class="btn btn-download btn-download-primary platform-macos">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/3.6.1-stable/Godot_v3.6.1-stable_mono_osx.universal.zip" 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://github.com/godotengine/godot-builds/releases/download/3.6.1-stable/Godot_v3.6.1-stable_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/3.6.1-stable/Godot_v3.6.1-stable_mono_win64.zip" 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.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>
|
||
<p><strong>Standard build</strong> includes support for GDScript, GDNative, and VisualScript.
|
||
<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>
|
||
<h3 id="uwp-universal-windows-platform">UWP (Universal Windows Platform)</h3>
|
||
<p>Unfortunately after hitting some build snags with UWP, we’ve taken the difficult decision to drop it from the pre-built release templates. Current demand seems very low (one of the last remaining use cases was UWP builds with Xbox One) and UWP has already been dropped for Godot 4.x. Note that it is still supported via compiling from source with MSVC.</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.1. 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 or earlier 3.5.x releases no longer works in 3.6.1).</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></content><author><name>lawnjelly</name></author><category term="Release"/></entry><entry><title>What's New in Android & XR</title><link href="https://godotengine.org/article/godotcon-2025-xr-android-recap/"/><updated>2025-06-23T18:00:00+00:00</updated><id>https://godotengine.org/article/godotcon-2025-xr-android-recap/</id><summary>Recap of the Android & XR updates during GodotCon 2025</summary><content type="html"><h1 id="whats-new-in-xr--android">What’s New in XR &amp; Android</h1>
|
||
<h2 id="godotcon-2025-recap">GodotCon 2025 recap</h2>
|
||
<p>A few weeks ago during <a href="https://conference.godotengine.org/2025/">GodotCon Boston 2025</a>, <a href="https://github.com/dsnopek">David Snopek</a>, <a href="https://github.com/devloglogan">Logan Lang</a> and <a href="https://github.com/m4gr3d">I</a> gave the latest updates on the state of Android and XR for the Godot engine:</p>
|
||
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/EQPQ2FGOUKg?si=Q_kZZJnnnWPIqf1B" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
|
||
<p><em>You can access <a href="https://docs.google.com/presentation/d/1iIcmggtFyx0FMO-WLP9U2j3Mf_i5miw3Cn0pq-KJXx4/edit?slide=id.g34aac9b6122_2_45#slide=id.g34aac9b6122_2_45">the slides of the presentation</a>.</em></p>
|
||
<h1 id="android--xr-editor">Android &amp; XR editor</h1>
|
||
<h2 id="android-editor">Android editor</h2>
|
||
<p><img alt="Android editor on phone" src="/storage/blog/godotcon-2025-android-xr/android-editor.webp" /></p>
|
||
<p>An update on the Android editor is long overdue. Since <a href="https://godotengine.org/article/android_godot_editor_play_store_beta_release/">its release in 2023</a>, the Android editor has been available on the <a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4">Google Play store</a> and on <a href="https://godotengine.org/download/android/">Godot’s download page</a> with support for all Android devices (e.g.: phones, foldables, tablets, Chromebooks, and others).</p>
|
||
<p>Last fall, during GodotCon 2024, we announced that the Android editor had <strong>~850K device installs</strong> from the Google Play store. Over the last 6 months, installs grew by another <strong>~365K</strong> for a total of <strong>1.2M device installs</strong> by GodotCon (Boston) 2025. This corresponds to over <strong>~2000+ daily installs</strong> with over <strong>~90K monthly active users</strong>.</p>
|
||
<p><img alt="Android editor device installs 2025" src="/storage/blog/godotcon-2025-android-xr/godot-android-editor-device-install-2025.webp" /></p>
|
||
<p>From the Google Play store data, we made a few interesting observations worth diving into.</p>
|
||
<h3 id="most-installs-are-from-brazil--india">Most installs are from Brazil + India</h3>
|
||
<p>Brazil and India make up <strong>26%</strong> of installs with <strong>17%</strong> coming from Brazil and <strong>9%</strong> coming from India.</p>
|
||
<p><img alt="Android editor device installs percentage by country" src="/storage/blog/godotcon-2025-android-xr/godot-android-editor-countries-installs-2025.webp" /></p>
|
||
<p>From this data point, we can observe how the Android editor is helping to lower the barrier of entry to game dev by allowing users in Brazil, India, and other countries to make use of cheaper and more accessible Android devices for game development.</p>
|
||
<h3 id="most-installs-are-on-phones">Most installs are on phones!</h3>
|
||
<p>According to the data, ~87% of installs are on phones.</p>
|
||
<p><img alt="Android editor device installs by form-factor percentage" src="/storage/blog/godotcon-2025-android-xr/godot-android-editor-device-type-percentage-2025.webp" /></p>
|
||
<p>In the <a href="https://godotengine.org/article/android_godot_editor_play_store_beta_release/">Android editor release blog post</a>, we mention it being optimized for large form-factor devices (e.g.: foldables, tablets, Chromebooks), so we expected those types of devices to be driving the installs. However, from the data it can be seen that tablets and Chromebooks only make up <strong>~10.6%</strong> of installs. So while the experience is still unoptimized for phones, for a vast number of users, the Android editor has a valuable use and addresses a valid need on regular Android phones.</p>
|
||
<p>These data points are driving some of our upcoming work, as in future releases we’ll strive to close the feature parity gap between the Android and desktop versions of the editor, as well as work to improve the Android editor development experience on small form-factor devices like phones.</p>
|
||
<h2 id="xr-editor">XR editor</h2>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Using Meta Quest seamless multitasking to modify XR game in real-time">
|
||
<source src="/storage/blog/godot-editor-horizon-store-early-access-release/xr_game_live_modifications.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p><a href="https://godotengine.org/article/godot-editor-horizon-store-early-access-release/">Released in 2024</a> to <a href="https://www.uploadvr.com/godot-engine-standalone-on-quest-horizon-os/">great reception</a>, the XR editor is available on the <a href="https://www.meta.com/experiences/godot-game-engine/7713660705416473/">Meta Horizon store</a> and on <a href="https://godotengine.org/download/android/">Godot’s download page</a> with support for Quest 3, Quest 3S, and Quest Pro devices.</p>
|
||
<p>To date, the Godot XR editor is the <strong>only</strong> full game engine <strong>running entirely on standalone XR devices</strong> and providing users with the ability to <strong>develop apps and games with nothing but a standalone XR device</strong>. To highlight that fact, David &amp; Logan recently completed <a href="https://dsnopek.itch.io/expedition-to-blobotopia">a game jam</a> <a href="https://dsnopek.itch.io/expedition-to-blobotopia/devlog/949090/making-a-godot-game-entirely-in-vr-gwj-81-devlog-nr-1">using nothing but the XR editor</a>!</p>
|
||
<p>Last fall during GodotCon 2024, the XR editor had ~<strong>4K device installs</strong> shortly after release. By GodotCon (Boston) 2025, device installs have grown to <strong>~18.5K</strong> with <strong>~2000 monthly active users</strong>.</p>
|
||
<p><img alt="Godot XR editor average monthly users" src="/storage/blog/godotcon-2025-android-xr/godot-xr-editor-avg-monthly-users-2025.webp" /></p>
|
||
<p>We have a lot planned to improve the user experience in order to make the XR editor a powerful, flexible tool for XR and game development, but first we need to improve the reach of the XR editor and make it cross-platform.<br />
|
||
To that end, we are working to bring the Godot XR editor to <strong>Pico devices.</strong></p>
|
||
<p><img alt="Pico device" src="/storage/blog/godotcon-2025-android-xr/pico_device_image.webp" /></p>
|
||
<p>Early alpha builds can be found on our <a href="https://github.com/godotengine/godot-builds/releases">GitHub release page</a> with support for both <strong>Pico 4 and Pico 4 Ultra</strong> devices.</p>
|
||
<p>We’ve heard loud and clear the feedback and requests for Quest 2 support, and thanks to recent performance improvements courtesy of W4 Games, we’re adding <strong>official support for Quest 2</strong> devices as well. You can now download the XR editor to your Quest 2 devices straight from the Meta Horizon store!</p>
|
||
<h1 id="hybrid-apps">Hybrid Apps</h1>
|
||
<p>Introduced in late 2023, Hybrid Apps are apps that can run both in <strong>Panel</strong> mode or in <strong>Immersive</strong> mode, and are able to <strong>transition between both modes at runtime</strong>. In Panel mode, the app can run side-by-side with other apps, allowing users to multitask. While in Immersive mode, the app’s experience is the sole focus and the user is fully immersed in it.</p>
|
||
<p>The feature provides developers with several benefits:</p>
|
||
<ul>
|
||
<li>Developers can easily add immersive support to existing apps and games</li>
|
||
<li>Developers can leverage existing codebase and logic</li>
|
||
<li>Users can select the interaction mode they’re most comfortable with</li>
|
||
</ul>
|
||
<p>The Godot XR editor is itself a Hybrid App and has been able to leverage this feature to provide a unique development experience, allowing developers to transition back and forth between the editor window and their immersive projects. With the release of <a href="https://github.com/GodotVR/godot_openxr_vendors/releases/tag/4.0.0-stable">version 4 of the Godot OpenXR Vendors plugin</a>, we’re bringing the same capabilities to all developers in Godot 4.4.</p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Kenney 3D platformer Hybrid App sample">
|
||
<source src="/storage/blog/godotcon-2025-android-xr/godot-hybrid-app-kenney-3d-platformer.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p>By leveraging <strong>v4</strong> of the Godot OpenXR Vendors plugin, developers can build Hybrid Apps straight from the Godot editor. The feature supports all HorizonOS (Quest) devices, with support for Pico devices coming soon!</p>
|
||
<p>The feature dynamically enables or disables itself based on the target platform. For example, <strong>the same Godot project can run as a regular (panel) app when exported to regular Android devices. And it can run as a full Hybrid App when exported to standalone XR devices</strong>.<br />
|
||
This allows developers to target multiple audiences, multiple platforms (Android, HorizonOS, PicoOS), and multiple stores (Google Play store, Meta Horizon store, Pico store) with the same project.</p>
|
||
<p>To learn more about the feature, please check out <a href="https://godotvr.github.io/godot_openxr_vendors/manual/hybrid_apps.html">the documentation</a>.</p>
|
||
<h1 id="integrating-with-android-apis">Integrating with Android APIs</h1>
|
||
<p>The Android platform has numerous APIs as well as a rich ecosystem of third-party libraries with wide and diverse functionality. Godot has long provided an <a href="https://docs.godotengine.org/en/stable/tutorials/platform/android/android_plugin.html">Android plugin system</a> which enables developers to create a Godot interface in order to access and use Android APIs or third-party libraries in their projects.</p>
|
||
<p>Writing an Android plugin however requires knowledge of Java or Kotlin code, which most Godot developers do not have. As such there are many Android APIs and third-party libraries that don’t have a Godot plugin that Godot developers can interface with. In fact, this is one of the main reasons that developers cite for not being able to switch to Godot from other game engines.</p>
|
||
<p>To address this, we’ve introduced a couple of tools in Godot 4.4 to simplify the process for developers to <strong>access Android APIs and third-party libraries</strong>.</p>
|
||
<h2 id="javaclasswrapper-and-androidruntime-plugin">JavaClassWrapper and AndroidRuntime plugin</h2>
|
||
<p><strong>JavaClassWrapper</strong> is a Godot singleton which allows for creating instances of Java and Kotlin classes and calling methods on them using only GDScript, C#, or GDExtension.</p>
|
||
<p><strong>AndroidRuntime plugin</strong> is a built-in Godot Android plugin that provides access to various Android lifecycle and runtime objects.</p>
|
||
<p>Coupling the two together allows developers to access and use Android APIs without switching away from GDScript, or using any tools aside from Godot itself.<br />
|
||
This is <strong>huge</strong> for the adoption of Godot for Android development, as it allows developers to quickly integrate Android functionality without having to make a Java or Kotlin plugin!</p>
|
||
<p>For example, this code snippet is all that developers need to access and use the <a href="https://developer.android.com/reference/android/os/Vibrator">Android Vibrator system service</a>:</p>
|
||
<div class="language-gdscript highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="c1"># Retrieve the AndroidRuntime singleton</span>
|
||
<span class="k">var</span> <span class="n">android_runtime</span> <span class="o">=</span> <span class="n">Engine</span><span class="o">.</span><span class="n">get_singleton</span><span class="p">(</span><span class="s2">"AndroidRuntime"</span><span class="p">)</span>
|
||
<span class="k">if</span> <span class="n">android_runtime</span><span class="p">:</span>
|
||
<span class="c1"># Retrieve the Android Vibrator system service and check if the device supports it</span>
|
||
<span class="k">var</span> <span class="n">vibrator_service</span> <span class="o">=</span> <span class="n">android_runtime</span><span class="o">.</span><span class="n">getApplicationContext</span><span class="p">()</span><span class="o">.</span><span class="n">getSystemService</span><span class="p">(</span><span class="s2">"vibrator"</span><span class="p">)</span>
|
||
<span class="k">if</span> <span class="n">vibrator_service</span> <span class="ow">and</span> <span class="n">vibrator_service</span><span class="o">.</span><span class="n">hasVibrator</span><span class="p">():</span>
|
||
<span class="c1"># Configure and run a VibrationEffect </span>
|
||
<span class="k">var</span> <span class="n">VibrationEffect</span> <span class="o">=</span> <span class="n">JavaClassWrapper</span><span class="o">.</span><span class="n">wrap</span><span class="p">(</span><span class="s2">"android.os.VibrationEffect"</span><span class="p">)</span>
|
||
<span class="k">var</span> <span class="n">effect</span> <span class="o">=</span> <span class="n">VibrationEffect</span><span class="o">.</span><span class="n">createOneShot</span><span class="p">(</span><span class="mi">500</span><span class="p">,</span> <span class="n">VibrationEffect</span><span class="o">.</span><span class="n">DEFAULT_AMPLITUDE</span><span class="p">)</span>
|
||
<span class="n">vibrator_service</span><span class="o">.</span><span class="n">vibrate</span><span class="p">(</span><span class="n">effect</span><span class="p">)</span>
|
||
</code></pre></div></div>
|
||
<p>To learn more about these new capabilities, please check out the <a href="https://docs.godotengine.org/en/latest/tutorials/platform/android/javaclasswrapper_and_androidruntimeplugin.html">documentation</a>.</p>
|
||
<h1 id="and-more">And more!</h1>
|
||
<p>There’s plenty more we covered in our GodotCon talk. For the full content, please check out <a href="https://www.youtube.com/watch?v=EQPQ2FGOUKg">the video</a> and <a href="https://docs.google.com/presentation/d/1iIcmggtFyx0FMO-WLP9U2j3Mf_i5miw3Cn0pq-KJXx4/edit?slide=id.g34aac9b6122_2_45#slide=id.g34aac9b6122_2_45">the slides</a>.</p>
|
||
<p>Many thanks to the <a href="https://www.meetup.com/bostongamedev/">Boston Game Dev</a> and the <a href="https://www.meetup.com/bostongamedev/events/298734856/">Boston Godot Users Group</a> for making this event happen.</p></content><author><name>Fredia Huya-Kouadio</name></author><category term="Events"/><category term="Progress Report"/></entry><entry><title>Dev snapshot: Godot 4.5 beta 1</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-5-beta-1/"/><updated>2025-06-18T22:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-5-beta-1/</id><summary>Godot 4.5 has entered beta and is now feature-complete!</summary><content type="html"><p>The first beta release for the 4.5 release cycle has come at last, and with it a plethora of outstanding bugs to be squashed. Contributors are encouraged to focus exclusively on fixing <a href="https://github.com/godotengine/godot/issues?q=is%3Aopen+is%3Aissue+label%3Aregression+milestone%3A4.5">regressions</a>, as we are now in feature-freeze and will not be merging new features at this stage of development (aside from a couple of pre-approved exceptions scheduled for beta 2).</p>
|
||
<p>For those interested in aiding us on our quest to squash any bugs that come up during this time, we encourage you to join our recent bug-hunting sprints. Helmed by our new head of the Bugsquad, <a href="https://github.com/AThousandShips">A Thousand Ships</a> has taken to hosting regular sprints for tackling various bugs within the Godot repo, organized such that everyone can easily gather behind a given theme to make chunks of fixes as seamlessly and speedily as possible. This will be our fourth sprint of this type, with an associated discussion <a href="https://chat.godotengine.org/channel/dNtaAGsF2ifAjZ57P">already prepared</a>. See 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 <a href="https://editor.godotengine.org/releases/4.5.beta1/">try the <strong>Web editor</strong></a> or the <strong>Android editor</strong> 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/2800900/Rift_Riff/?curator_clanid=41324400"><strong>Rift Riff</strong></a>, <em>a tower defense game whose layered combat isn’t compromised by its variety of forgiving mechanics! You can buy the game <a href="https://store.steampowered.com/app/2800900/Rift_Riff/?curator_clanid=41324400">on Steam</a>. You can follow the developers on Bluesky: <a href="https://bsky.app/profile/adriaan.games">Adriaan</a>, <a href="https://bsky.app/profile/simkaart.co">Sim</a>, <a href="https://bsky.app/profile/franzlazerte.bsky.social">Franz</a>, <a href="https://bsky.app/profile/matthijskoster.com">Matthijs</a>, <a href="https://bsky.app/profile/professionalpanda.bsky.social">Panda</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-5-dev-1">dev 1</a>, <a href="/article/dev-snapshot-godot-4-5-dev-2">dev 2</a>, <a href="/article/dev-snapshot-godot-4-5-dev-3">dev 3</a>, <a href="/article/dev-snapshot-godot-4-5-dev-4">dev 4</a>, and <a href="/article/dev-snapshot-godot-4-5-dev-5">dev 5</a>).</p>
|
||
<p>Much like <a href="/article/dev-snapshot-godot-4-4-beta-1/#new-in-beta-1">previous feature releases</a>, a lot of major features have managed to squeeze in right before the feature freeze! Those weren’t covered in previous articles, so we’ll also be showcasing the main changes added between 4.5 dev 5 and beta 1. Given the recency of those last minute merges, most of them are somewhat experimental compared to the more traditional highlights later on in the article, so please let us know if any issues are encountered.</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="#c">C#</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="#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.5 milestone with the <a href="https://github.com/godotengine/godot/issues?q=milestone%3A4.5%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>Tilemap physics are now handled in chunks. Only affects <code class="language-plaintext highlighter-rouge">get_coords_for_body_rid</code>, as now a single body can cover multiple cells. (<a href="https://github.com/godotengine/godot/pull/102662">GH-102662</a>)</li>
|
||
<li>Internal nodes are no longer duplicated. Only affects users deliberately utilizing internal nodes. (<a href="https://github.com/godotengine/godot/pull/89442">GH-89442</a>)</li>
|
||
<li><code class="language-plaintext highlighter-rouge">NodeOneShot</code> fading now uses self delta instead of input delta. Brings behavior closer to other <code class="language-plaintext highlighter-rouge">AnimationNode</code>s, as the old implementation was exclusive to <code class="language-plaintext highlighter-rouge">NodeOneShot</code>. (<a href="https://github.com/godotengine/godot/pull/101792">GH-101792</a>)</li>
|
||
<li>2D &amp; 3D Navigation region and link updates are now asynchronous. (2D: <a href="https://github.com/godotengine/godot/pull/107381">GH-107381</a>, 3D: <a href="https://github.com/godotengine/godot/pull/106670">GH-106670</a>)</li>
|
||
<li><code class="language-plaintext highlighter-rouge">NavigationServer2D</code> avoidance callbacks changed from <code class="language-plaintext highlighter-rouge">Vector3</code> to <code class="language-plaintext highlighter-rouge">Vector2</code>. (<a href="https://github.com/godotengine/godot/pull/107256">GH-107256</a>)</li>
|
||
<li>Removed the <code class="language-plaintext highlighter-rouge">gradle_build/compress_native_libraries</code> export option. With Android builds now supporting 16kb pages, the native libraries are now required to be uncompressed. (<a href="https://github.com/godotengine/godot/pull/106359">GH-106359</a>)
|
||
<ul>
|
||
<li>We are considering re-introducing this option for users who don’t target Android 16, or distribute APKs outside of Google Play. (<a href="https://github.com/godotengine/godot/pull/107681">GH-107681</a>)</li>
|
||
</ul>
|
||
</li>
|
||
<li>“Areas Detect Static Bodies” setting removed from Jolt Physics, this is now always enabled. (<a href="https://github.com/godotengine/godot/pull/105746">GH-105746</a>)</li>
|
||
<li><code class="language-plaintext highlighter-rouge">set_scope</code> removed from <code class="language-plaintext highlighter-rouge">JSONRPC</code>. Manual method registration is now required via <code class="language-plaintext highlighter-rouge">set_method</code>. (<a href="https://github.com/godotengine/godot/pull/104890">GH-104890</a>)</li>
|
||
</ul>
|
||
<h3 id="animation">Animation</h3>
|
||
<p>This might be a little more technical than usual, but the work <a href="https://github.com/TokageItLab">Tokage</a> put into implementing <code class="language-plaintext highlighter-rouge">BoneConstraint3D</code> warrants a highlight all the same (<a href="https://github.com/godotengine/godot/pull/100984">GH-100984</a>). With this new class, users will be able to bind a bone to another bone, opening the door for more natural movements and poses.</p>
|
||
<p><strong>Twist:</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th style="text-align: center">Disabled</th>
|
||
<th style="text-align: center">Enabled</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-beta-1/constraint-twist-disabled.webp" alt="Constraint twist disabled" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-beta-1/constraint-twist-enabled.webp" alt="Constraint twist enabled" width="350" /></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><strong>Bend:</strong></p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Example of bone constraints on a bent knee">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-beta-1/constraint-bend.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p>Onto something more suitable for a blog post highlight: UX improvements! <a href="https://github.com/YeldhamDev">YeldhamDev</a> implemented support for selection box movement and scaling within the bezier editor, making it a piece of cake to perform changes to points in batches (<a href="https://github.com/godotengine/godot/pull/100470">GH-100470</a>). <a href="https://github.com/Arnklit">Arnklit</a> continues the bezier improvements with <a href="https://github.com/godotengine/godot/pull/95564">GH-95564</a>, allowing users to auto tangent new points in a balanced or mirrored manner. The animation player gets some love as well, with the ability to sort animations alphabetically (<a href="https://github.com/godotengine/godot/pull/103584">GH-103584</a>). Lastly, and featured below, is a very long-awaited UX improvement: animation filtering! (<a href="https://github.com/godotengine/godot/pull/103130">GH-103130</a>)</p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Preview of animation tracks filtering">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-beta-1/animation-filtering.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p>And more:</p>
|
||
<ul>
|
||
<li>Add <code class="language-plaintext highlighter-rouge">delta</code> argument to <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code> <code class="language-plaintext highlighter-rouge">_process_modification()</code> and expose <code class="language-plaintext highlighter-rouge">advance()</code> in Skeleton3D. (<a href="https://github.com/godotengine/godot/pull/103639">GH-103639</a>)</li>
|
||
</ul>
|
||
<h3 id="audio--video">Audio / Video</h3>
|
||
<p><a href="https://github.com/berarma">Bernat Arlandis</a> brings us the ability to seek Theora video files via the new <code class="language-plaintext highlighter-rouge">set_stream_position</code> function (<a href="https://github.com/godotengine/godot/pull/102360">GH-102360</a>). In doing so, he has additionally improved our multi-channel audio resampler, meaning that videos with 6+ channels will no longer crackle. A much more technical breakdown &amp; additional features can be gleaned from the PR.</p>
|
||
<p>And more:</p>
|
||
<ul>
|
||
<li>Add metadata tags to WAV and OGG audio streams. (<a href="https://github.com/godotengine/godot/pull/99504">GH-99504</a>)</li>
|
||
</ul>
|
||
<h3 id="c">C#</h3>
|
||
<p>First-time contributor <a href="https://github.com/atlasapplications">Justin Sasso</a> kicks things off with <code class="language-plaintext highlighter-rouge">linux-bionic</code> RID export support (<a href="https://github.com/godotengine/godot/pull/97908">GH-97908</a>). For those that don’t speak buildsystem, this enables NativeAOT on Android! For those that don’t speak .NET lingo, “NativeAOT” refers to the ability for .NET applications to compile directly to a device’s native code, bypassing the need for the .NET runtime entirely. NativeAOT apps have the benefit of significantly faster startup and smaller memory footprints, which are both very welcome additions for mobile devices.</p>
|
||
<p>Finding performance improvements in an interop context is like finding a needle in a haystack. Actually tracking down where some point of slowdown or inefficency is taking place across entirely different environments is difficult to the point that most people won’t even attempt it. <a href="https://github.com/Delsin-Yu">Delsin-Yu</a> is not most people, because the improvements that came from simply removing <code class="language-plaintext highlighter-rouge">StringName</code> allocations on unimplemented getters/setters saw a staggering <strong>60× decrease</strong> in resources (<a href="https://github.com/godotengine/godot/pull/104689">GH-104689</a>).</p>
|
||
<p>Not everything related to .NET was able to make it in time for 4.5, but they’re still worth mentioning because of how much effort the team has already put into them. For instance: we’re well aware of the excitement around bringing .NET to web builds for Godot, and progress on that front has been very promising. We’ve even covered this very topic in a <a href="https://godotengine.org/article/live-from-godotcon-boston-web-dotnet-prototype/">previous blog</a>, where we discussed the rocky road of bringing this project to light even featured a prototype which you can try <a href="https://lab.godotengine.org/godot-dotnet-web/">right now</a>!</p>
|
||
<p>Our other long-term project for C# is revolving around the gradual move to GDExtension. The current module approach, while entirely functional for what it is, has historically been a fairly hacky implementation. Grafting on interop functionality between the engine itself and the dotnet runtime has proven to be error-prone, leading to a disproportionate amount of man-hours sunk into ensuring everything functions as expected. The hope is for the move to GDExtension to mean that all interop calls are handled in a manner that’s universally applicable; that is: a manner that <strong>any</strong> programming language could take advantage of.</p>
|
||
<p>And more:</p>
|
||
<ul>
|
||
<li>Android: Add a preload hook to load .NET assemblies from the APK. (<a href="https://github.com/godotengine/godot/pull/105262">GH-105262</a>)</li>
|
||
<li>Android: Load .NET assemblies directly from PCK. (<a href="https://github.com/godotengine/godot/pull/105853">GH-105853</a>)</li>
|
||
</ul>
|
||
<h3 id="core">Core</h3>
|
||
<p>Changes to the core of the engine require significantly more scrutiny than other parts of the engine; this comes down to how critical and foundational virtually every single piece of code proves to be. This makes it all the more impressive that there’s so much worth highlighting in 4.5 that’s specific to core!</p>
|
||
<p>Adding a way to properly log errors and warnings, as well as get backtraces in logs when they happen, was among the most highly-requested features from our users for years. By their powers combined, <a href="https://github.com/mihe">Mikael Hermansson</a> and <a href="https://github.com/reduz">Juan Linietsky</a> have added script backtracing support for GDScript and C# (<a href="https://github.com/godotengine/godot/pull/91006">GH-91006</a>). Finding the root problem behind warnings/errors that appear at runtime required being able to reproduce them in the editor to use the debugger. Developers will now have the possibility to see backtraces of runtime errors directly in their logs, making it possible to debug and fix issues that happen under user testing or in shipped titles. This functionality is always available in debug mode, but can be activated in release mode for GDScript if <strong>Debug &gt; Settings &gt; GDScript &gt; Always Track Call Stacks</strong> is enabled in the project settings.</p>
|
||
<div class="language-gdscript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">func</span> <span class="nf">_ready</span><span class="p">():</span>
|
||
<span class="n">my_func1</span><span class="p">()</span>
|
||
<span class="k">func</span> <span class="nf">my_func1</span><span class="p">():</span>
|
||
<span class="n">my_func2</span><span class="p">()</span>
|
||
<span class="k">func</span> <span class="nf">my_func2</span><span class="p">():</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">Engine</span><span class="o">.</span><span class="n">capture_script_backtraces</span><span class="p">()[</span><span class="mi">0</span><span class="p">])</span>
|
||
</code></pre></div></div>
|
||
<p>Outputs:</p>
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>GDScript backtrace (most recent call first):
|
||
[0] my_func2 (res://node_2d.gd:11)
|
||
[1] my_func1 (res://node_2d.gd:8)
|
||
[2] _ready (res://node_2d.gd:5)
|
||
</code></pre></div></div>
|
||
<p><a href="https://github.com/RandomShaper">Pedro J. Estébanez</a> also addressed a long-time complaint with <code class="language-plaintext highlighter-rouge">Resource.duplicate(true)</code> not performing the expected deep duplication in a reliable and predictable way (<a href="https://github.com/godotengine/godot/pull/100673">GH-100673</a>). The new behavior of the method, and the additional <code class="language-plaintext highlighter-rouge">Resource.duplicate_deep()</code> give users full control over what gets duplicated or not (arrays, dictionaries, nested resources, etc.).</p>
|
||
<p>Additionally, special thanks to <a href="https://github.com/Ivorforce">Lukas Tenbrink</a>, a new addition to the core team who has been <a href="https://github.com/godotengine/godot/pull/103708">contributing</a> <a href="https://github.com/godotengine/godot/pull/106996">nonstop</a> <a href="https://github.com/godotengine/godot/pull/104381">improvements</a> to ensure optimal performance for developers and maintainers alike.</p>
|
||
<p>And more:</p>
|
||
<ul>
|
||
<li>Add <code class="language-plaintext highlighter-rouge">Node.get_orphan_node_ids</code>, edit <code class="language-plaintext highlighter-rouge">Node.print_orphan_nodes</code>. (<a href="https://github.com/godotengine/godot/pull/83757">GH-83757</a>)</li>
|
||
<li>Don’t duplicate internal nodes. (<a href="https://github.com/godotengine/godot/pull/89442">GH-89442</a>)</li>
|
||
<li>Use Grisu2 algorithm in <code class="language-plaintext highlighter-rouge">String::num_scientific</code> to fix serializing. (<a href="https://github.com/godotengine/godot/pull/98750">GH-98750</a>)</li>
|
||
<li>Add <code class="language-plaintext highlighter-rouge">scene_changed</code> signal to SceneTree. (<a href="https://github.com/godotengine/godot/pull/102986">GH-102986</a>)</li>
|
||
<li>Complete build profile feature to properly detect options that can be disabled (reducing binary size). (<a href="https://github.com/godotengine/godot/pull/103719">GH-103719</a>)</li>
|
||
<li>Add thread safety to Object signals. (<a href="https://github.com/godotengine/godot/pull/105453">GH-105453</a>)</li>
|
||
</ul>
|
||
<h3 id="documentation">Documentation</h3>
|
||
<p>It’s not often that we have the opportunity to cover documentation changes in these highlights, as those changes are usually fairly low-key. This isn’t to say that changes aren’t happening; on the contrary, it’s one of the single most active areas of our GitHub! That’s because it often goes beyond our main repo, with changes needing to be synchronized in <a href="https://github.com/godotengine/godot-docs">godot-docs</a>. Special shoutouts to <a href="https://github.com/Mickeon">Mickeon</a> for the class reference, and <a href="https://github.com/skyace65">Matthew</a>, <a href="https://github.com/tetrapod00">tetrapod</a>, <a href="https://github.com/AThousandShips">A Thousand Ships</a>, <a href="https://github.com/mhilbrunner">Max Hilbrunner</a> and <a href="https://github.com/Calinou">Hugo Locurcio</a> for the online docs, for taking on the lion’s share of pull requests <em>and</em> reviews.</p>
|
||
<p><a href="https://github.com/timothyqiu">Haoyu Qiu</a>’s addition of <code class="language-plaintext highlighter-rouge">required</code> as a qualifier within the documentation itself warrants special mention (<a href="https://github.com/godotengine/godot/pull/107130">GH-107130</a>). When extending a class that has virtual methods, it wasn’t immediately obvious which methods <em>needed</em> an override, versus having defaulted fallbacks. …Well, it <em>was</em> obvious if you looked at the descriptions, but it wasn’t something inherent to the functions themselves like <code class="language-plaintext highlighter-rouge">const</code>. This won’t be an issue moving forward, as now <code class="language-plaintext highlighter-rouge">required</code> will come right after <code class="language-plaintext highlighter-rouge">virtual</code> where applicable.</p>
|
||
<p>Anyone who has contributed to the documentation has likely wrangled with the mixed-indentation of codeblocks. This necessitated adding spaces manually, and often meant disabling autoformatting on XML files; this was inconvenient at best &amp; outright error-prone at worst. <a href="https://github.com/KoBeWi">Tomasz Chabora</a> put this issue to rest with <a href="https://github.com/godotengine/godot/pull/89819">GH-89819</a>, unilaterally replacing all spaces with tabs across all codeblocks. This was a surprisingly involved process, as it required a simultaneous freeze &amp; subsequent update of our <a href="https://github.com/godotengine/godot-editor-l10n">localization files</a>, but where there’s a will there’s a way!</p>
|
||
<h3 id="editor">Editor</h3>
|
||
<p>First-time contributor <a href="https://github.com/daniel080400">daniel080400</a> came out of the gate swinging with PR <a href="https://github.com/godotengine/godot/pull/102313">GH-102313</a>, which entirely overhauled the way scene preview thumbnails are handled.</p>
|
||
<p>3D thumbnails are captured at a consistent angle from the world center, ensuring all contents fit into the screen. Particles are fast-forwarded slightly in order to render something, utilizing a fixed seed.
|
||
<img src="/storage/blog/dev-snapshot-godot-4-5-beta-1/thumbnail-3d.webp" alt="3D Thumbnails" /></p>
|
||
<p>2D thumbnails utilize two passes—2D and GUI—before combining the two for the final image. As prefabs generally don’t care about world coordinates, the world center is not accounted for with 2D thumbnails.
|
||
<img src="/storage/blog/dev-snapshot-godot-4-5-beta-1/thumbnail-2d.webp" alt="2D Thumbnails" /></p>
|
||
<p><strong>Edit 2025-06-21:</strong> <em>Due to some regressions and unforeseen effects of the above PR, it was decided to revert this change for 4.5 beta 2 (<a href="https://github.com/godotengine/godot/pull/107786">GH-107786</a>). So this feature can be tested in the 4.5 beta 1 snapshot, but won’t be in 4.5 stable. The improved scene preview thumbnails are still very much wanted, and we will revisit this during the 4.6 development cycle, with more time to ensure this doesn’t have any adverse effects.</em></p>
|
||
<hr />
|
||
<p>A rarely-covered topic regarding the editor is the <a href="https://docs.godotengine.org/en/stable/classes/class_editorcommandpalette.html">command palette</a>, but we’ll happily make an exception to highlight <a href="https://github.com/HolonProduction">HolonProduction</a>’s PR <a href="https://github.com/godotengine/godot/pull/99318">GH-99318</a> adding named <code class="language-plaintext highlighter-rouge">EditorScript</code>s to the command palette! This much more centralized means of execution serves to benefit the commands that are more project-specific. This is specifically for named scripts however, such that there will always be an associated display name and search handling.</p>
|
||
<p>As for topics we <em>have</em> covered, where better to start than with <code class="language-plaintext highlighter-rouge">Variant</code> exporting? This functionality is brought to life by <a href="https://github.com/KoBeWi">Tomasz Chabora</a>, bringing support for a dynamic variable in a standalone context (<a href="https://github.com/godotengine/godot/pull/89324">GH-89324</a>). With the ability to change not only the variable, but the type itself, the doors are wide open for creative integrations in the inspector.</p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Demo of exporting a Variant type in the Inspector">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-dev-4/export-variant.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p>And more:</p>
|
||
<ul>
|
||
<li>Override editor settings per-project. (<a href="https://github.com/godotengine/godot/pull/69012">GH-69012</a>)</li>
|
||
<li>Inspector section toggles. (<a href="https://github.com/godotengine/godot/pull/105272">GH-105272</a>)</li>
|
||
<li>“Mute Game” toggle in Game view. (<a href="https://github.com/godotengine/godot/pull/99555">GH-99555</a>)</li>
|
||
<li>Drop preload Resources as <code class="language-plaintext highlighter-rouge">UID</code>. (<a href="https://github.com/godotengine/godot/pull/99094">GH-99094</a>)</li>
|
||
<li>Allow selecting multiple remote nodes at runtime. (<a href="https://github.com/godotengine/godot/pull/99680">GH-99680</a>)</li>
|
||
<li>Add emission shape gizmos to <code class="language-plaintext highlighter-rouge">Particles2D</code>. (<a href="https://github.com/godotengine/godot/pull/102249">GH-102249</a>)</li>
|
||
<li>Search script docs without manual recompilation. (<a href="https://github.com/godotengine/godot/pull/95821">GH-95821</a>)</li>
|
||
<li>Array drag-and-drop improvements. (<a href="https://github.com/godotengine/godot/pull/102534">GH-102534</a>)</li>
|
||
<li>Add meshes to Video RAM Profiler. (<a href="https://github.com/godotengine/godot/pull/103238">GH-103238</a>)</li>
|
||
<li>Add “Paste as Unique” option to editor resource picker. (<a href="https://github.com/godotengine/godot/pull/103980">GH-103980</a>)</li>
|
||
</ul>
|
||
<h3 id="gdscript">GDScript</h3>
|
||
<p>4.5 sees with it the introduction of a new keyword: <code class="language-plaintext highlighter-rouge">abstract</code>. <a href="https://github.com/aaronfranke">Aaron Franke</a> brings this previously internal-only functionality into the hands of all GDScript users (<a href="https://github.com/godotengine/godot/pull/67777">GH-67777</a>). By prepending this keyword to a class, it ensures that direct instantiation cannot occur; meaning that all calls will actually refer to a derived classes. <a href="https://github.com/dalexeev">Danil Alexeev</a> built further upon this by introducing the ability for users to declare <em>functions</em> as abstract (<a href="https://github.com/godotengine/godot/pull/106409">GH-106409</a>). By prepending the same <code class="language-plaintext highlighter-rouge">abstract</code> keyword to a function, it will be marked for explicit override by child classes.</p>
|
||
<p><strong>Note:</strong> The GDScript team changed the <code class="language-plaintext highlighter-rouge">abstract</code> keyword to an <code class="language-plaintext highlighter-rouge">@abstract</code> annotation in 4.5 beta 2.</p>
|
||
<div class="language-gdscript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">abstract</span> <span class="k">class</span> <span class="nc">Item</span><span class="p">:</span>
|
||
<span class="n">abstract</span> <span class="k">func</span> <span class="nf">get_name</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="kt">String</span>
|
||
<span class="k">func</span> <span class="nf">use</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">void</span><span class="p">:</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Character used </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">get_name</span><span class="p">())</span>
|
||
<span class="k">class</span> <span class="nc">HealingPotion</span> <span class="k">extends</span> <span class="n">Item</span><span class="p">:</span>
|
||
<span class="k">func</span> <span class="nf">get_name</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="kt">String</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="s2">"Healing Potion"</span>
|
||
<span class="k">func</span> <span class="nf">_ready</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">void</span><span class="p">:</span>
|
||
<span class="k">var</span> <span class="n">potion</span> <span class="p">:</span><span class="o">=</span> <span class="n">HealingPotion</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>
|
||
<span class="n">potion</span><span class="o">.</span><span class="n">use</span><span class="p">()</span> <span class="c1"># Prints `Character used Healing Potion.`</span>
|
||
<span class="k">var</span> <span class="n">item</span> <span class="p">:</span><span class="o">=</span> <span class="n">Item</span><span class="o">.</span><span class="n">new</span><span class="p">()</span> <span class="c1"># Parser error!</span>
|
||
</code></pre></div></div>
|
||
<p><img src="/storage/blog/dev-snapshot-godot-4-5-beta-1/abstract-error.webp" alt="Abstract class instantiation error" /></p>
|
||
<p>Danil isn’t done yet though, as variadic arguments support (<a href="https://github.com/godotengine/godot/pull/82808">GH-82808</a>) comes from him as well! In programming languages, variadic arguments allow functions to accept a flexible number of input parameters. This allows turning the final argument of a function into an array that is called as if it were a sequence.</p>
|
||
<div class="language-gdscript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">func</span> <span class="nf">f</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="kt">int</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="kt">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="o">...</span><span class="n">args</span><span class="p">:</span> <span class="kt">Array</span><span class="p">):</span>
|
||
<span class="nb">prints</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
|
||
<span class="k">func</span> <span class="nf">_ready</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">void</span><span class="p">:</span>
|
||
<span class="n">f</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||
<span class="n">f</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
||
<span class="n">f</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
|
||
<span class="n">f</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span>
|
||
<span class="n">f</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
|
||
<span class="c1"># Output:</span>
|
||
<span class="c1"># 1 0 []</span>
|
||
<span class="c1"># 1 2 []</span>
|
||
<span class="c1"># 1 2 [3]</span>
|
||
<span class="c1"># 1 2 [3, 4]</span>
|
||
<span class="c1"># 1 2 [3, 4, 5]</span>
|
||
</code></pre></div></div>
|
||
<p><img src="/storage/blog/dev-snapshot-godot-4-5-beta-1/variadic-documentation.webp" alt="Variadic documentation" /></p>
|
||
<p>GDScript also saw a lot of usability improvements for the script editor, with notably fixes to code completion and highlighting:</p>
|
||
<ul>
|
||
<li>Inline color pickers. (<a href="https://github.com/godotengine/godot/pull/105724">GH-105724</a>)</li>
|
||
<li>Highlight warning lines. (<a href="https://github.com/godotengine/godot/pull/102469">GH-102469</a>)</li>
|
||
<li>Don’t add parenthesis when expecting <code class="language-plaintext highlighter-rouge">Callable</code>. (<a href="https://github.com/godotengine/godot/pull/96375">GH-96375</a>)</li>
|
||
<li>Autocompletion for <code class="language-plaintext highlighter-rouge">@export_tool_button</code>s. (<a href="https://github.com/godotengine/godot/pull/105081">GH-105081</a>)</li>
|
||
<li>Highlighting script members like native ones. (<a href="https://github.com/godotengine/godot/pull/74393">GH-74393</a>)</li>
|
||
<li>Code completion for overridden user-defined methods. (<a href="https://github.com/godotengine/godot/pull/106198">GH-106198</a>)</li>
|
||
</ul>
|
||
<h3 id="gui">GUI</h3>
|
||
<p>Here at the Godot Foundation, accessibililty is an absolute top-priority. The road to making an experience available to anyone regardless of their circumstances isn’t an easy one, but it’s a road that all developers are obligated to take. To that end, our resident tech guru <a href="https://github.com/bruvzg">bruvzg</a> tackled the absolutely Herculean task of integrating <a href="https://github.com/AccessKit/accesskit">AccessKit</a> to Godot as a whole (<a href="https://github.com/godotengine/godot/pull/76829">GH-76829</a>). With this in place, screenreader support is now built into the very core of the engine. All our supported desktop platforms offer fully uncompromised support, as the bindings are already in place and well-tested. When other platforms follow suit, we will ensure support to the absolute best of our ability.</p>
|
||
<p>4.5 is bringing with it quite a few new quality-of-life improvements, with one of the biggest additions being one we actually haven’t given proper coverage to yet: foldable containers! <a href="https://github.com/KoBeWi">Tomasz Chabora</a> is no stranger to editor enhancements, and this time he has blessed us with <a href="https://github.com/godotengine/godot/pull/102346">GH-102346</a>, which grants us the new <code class="language-plaintext highlighter-rouge">FoldableContainer</code> class. Now users can have dynamically cascading GUI objects with the ability to toggle if the contents are expanded or not at will, a process that previously took several workarounds to achieve.</p>
|
||
<p>In a similar vein, the ability to manipulate a group of controls simultaneously has become much easier thanks to <a href="https://github.com/Delsin-Yu">Delsin-Yu</a>’s PR with a focus on recursive control across child controls (<a href="https://github.com/godotengine/godot/pull/97495">GH-97495</a>). This implements new properties for recursively disabling <code class="language-plaintext highlighter-rouge">Focus Mode</code> and <code class="language-plaintext highlighter-rouge">Mouse Filter</code>, meaning that the ability to select and interact with child controls becomes far more intuitive, and allows for explicit overrides if desired.</p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Demo of the Controls recursive focus feature">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-beta-1/recursive-focus.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p>There’s also the newly added <code class="language-plaintext highlighter-rouge">SVGTexture</code>, implemented by our very own <a href="https://github.com/bruvzg">bruvzg</a> in <a href="https://github.com/godotengine/godot/pull/105375">GH-105375</a>, allowing for rasterization of SVG files directly. However, when initially showcased, this process was fairly long-winded, as the main uses were internal. This has since been remedied with a dedicated importer in <a href="https://github.com/godotengine/godot/pull/105655">GH-105655</a>, making rasterization much more accessible to all users.</p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Demo of toggling oversampling on SVGTexture">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-beta-1/svg-auto-scalable.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p><strong>Edit 2025-08-21:</strong> <em>Starting with 4.5 beta 6, the name of this feature was changed to <code class="language-plaintext highlighter-rouge">DPITexture</code> to better reflect the original intent (<a href="https://github.com/godotengine/godot/pull/109811">GH-109811</a>). For more information, see our section highlighting the change in the <a href="/article/dev-snapshot-godot-4-5-beta-6/">4.5 beta 6 blog post</a>.</em></p>
|
||
<p>And more:</p>
|
||
<ul>
|
||
<li>TextEdit/LineEdit: Add support for OEM Alt codes input. (<a href="https://github.com/godotengine/godot/pull/93466">GH-93466</a>)</li>
|
||
<li>Stackable outlines on <code class="language-plaintext highlighter-rouge">Label</code>. (<a href="https://github.com/godotengine/godot/pull/104731">GH-104731</a>)</li>
|
||
<li>Replace global oversampling with overrideable per-viewport oversampling. (<a href="https://github.com/godotengine/godot/pull/104872">GH-104872</a>)</li>
|
||
<li>RichTextLabel: Add paragraph separation theme property. (<a href="https://github.com/godotengine/godot/pull/107331">GH-107331</a>)</li>
|
||
</ul>
|
||
<h3 id="import">Import</h3>
|
||
<p>Godot 4.0 introduced the <a href="/article/godot-4-0-sets-sail/#easier-importing">Advanced Import Settings</a> dialog, which allows configuring how to import specific 3D assets with great flexibility. This dialog kept being improved upon in subsequent releases (including 4.5), but one part of its workflow became a major pain point for users: the ability to batch edit multiple assets to assign an external material to all of them was gone, forcing users to configure this in each asset individually using the Advanced Import Settings dialog.
|
||
<a href="https://github.com/bruvzg">bruvzg</a> corrected this oversight by reintroducing options in the Import dock to configure whether to extract materials in a way that supports multi-asset configuration (<a href="https://github.com/godotengine/godot/pull/107211">GH-107211</a>).</p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Extracting and editing a shared material from multiple glTF files at once">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-beta-1/glb-material-extract.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p>And more:</p>
|
||
<ul>
|
||
<li>Add Channel Remap settings to ResourceImporterTexture. (<a href="https://github.com/godotengine/godot/pull/99676">GH-99676</a>)</li>
|
||
<li>Use UIDs in addition to paths for extracted meshes, materials and animations. (<a href="https://github.com/godotengine/godot/pull/100786">GH-100786</a>)</li>
|
||
<li>Allow attaching scripts to nodes in the Advanced Import Settings dialog. (<a href="https://github.com/godotengine/godot/pull/103418">GH-103418</a>)</li>
|
||
<li>Use libjpeg-turbo for improved jpg compatibility and speed. (<a href="https://github.com/godotengine/godot/pull/104347">GH-104347</a>)</li>
|
||
</ul>
|
||
<h3 id="input">Input</h3>
|
||
<p>While it’s not yet integrated in beta 1, you can gather all your gamepads and joysticks in anticipation of the integration of SDL3 as Godot’s new gamepad input driver for desktop platforms (<a href="https://github.com/godotengine/godot/pull/106218">GH-106218</a>). Up until now Godot had its own “joypad” platform drivers inspired from earlier versions of SDL, but not as full-featured. Over time, issues accumulated in our implementation while SDL kept maturing, and it’s now a net positive to defer the responsibility for this subsystem to a well established cross-platform library.
|
||
If all goes well, this change should be merged for beta 2 as an exception to the feature freeze. Thanks in advance to <a href="https://github.com/Nintorch">Nintorch</a> for bringing this contribution to the finish line, building upon earlier work of <a href="https://github.com/EIREXE">Álex Román Núñez</a> and <a href="https://github.com/xsellier">Xavier Sellier</a>.</p>
|
||
<h3 id="internationalization">Internationalization</h3>
|
||
<p>Internationalization has always been an extremely crucial part of the Godot project, and its relative lack of coverage in our blogposts does not do it justice. <a href="https://github.com/timothyqiu">Haoyu Qiu</a> allows us to break this bad habit of ours with a fantastic addition to the i18n workflow: editor previews (<a href="https://github.com/godotengine/godot/pull/96921">GH-96921</a>)! Now there’s much less guesswork necessary to see how your projects will appear to the end-user in their native language, ensuring a consistent and clean style no matter the selection!</p>
|
||
<p><strong>Translation preview on <a href="https://github.com/YeldhamDev/">Michael Alexsander</a>’s <a href="https://codeberg.org/Librerama/librerama/">Librerama</a>:</strong></p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="In-editor translation preview">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-beta-1/translation-preview.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p>Similarly, the ability to swap languages on-the-fly within the editor is now possible thanks to the efforts of <a href="https://github.com/KoBeWi">Tomasz Chabora</a> in <a href="https://github.com/godotengine/godot/pull/102562">GH-102562</a>. Now users can preview <em>and</em> experience multiple language options in a single editor session.</p>
|
||
<p>We also want to give a shout-out to all the translators who tirelessly work on localizing the Godot editor, the class reference and the online documentation. If you’d like to join that effort, head to <a href="https://hosted.weblate.org/projects/godot-engine/">Weblate</a> and review our <a href="https://contributing.godotengine.org/en/latest/documentation/translation/index.html">documentation</a> for instructions.</p>
|
||
<h3 id="navigation">Navigation</h3>
|
||
<p>The navigation team has been able to really spread their wings thanks to logic for 2D and 3D being handled independently. <a href="https://github.com/smix8">smix8</a> took the mantle on the initial split, while <a href="https://github.com/AThousandShips">A Thousand Ships</a> brought the logic to the module system itself. This opened the door for improvements to performance across both navigation systems, and helps decrease the size of builds which exclusively target 2D.</p>
|
||
<p>The work started by smix8 in 4.4 to make navigation map synchronization asynchronous (<a href="https://github.com/godotengine/godot/pull/100497">GH-100497</a>) was expanded for this release by applying the same treatement to navigation regions (3D: <a href="https://github.com/godotengine/godot/pull/106670">GH-106670</a>, 2D: <a href="https://github.com/godotengine/godot/pull/107381">GH-107381</a>).</p>
|
||
<p>And more:</p>
|
||
<ul>
|
||
<li>Add navigation path query parameter limits. (<a href="https://github.com/godotengine/godot/pull/102767">GH-102767</a>)</li>
|
||
</ul>
|
||
<h3 id="physics">Physics</h3>
|
||
<p>Our implementation of 3D fixed-timestep interpolation has been completely overhauled, as the previous iteration had fundamental flaws with how it was structured in such a way that couldn’t be addressed with a simple fix or patch. The solution already existed on 3.x, and has since been forward-ported by <a href="https://github.com/lawnjelly">lawnjelly</a> via <a href="https://github.com/godotengine/godot/pull/104269">GH-104269</a>. Now all logic is handled within the <code class="language-plaintext highlighter-rouge">SceneTree</code>, but in a manner which doesn’t break any existing API. All projects will benefit from this improvement out-of-the-box.</p>
|
||
<p><strong>Interpolation with 10 ticks per second:</strong></p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Truck Town demo played at a fixed-timestep of 10 ticks per second with smooth physics thanks to interpolation">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-dev-4/3d-fti-scenetree.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p>Working in tandem since the integration of Jolt Physics as the new 3D physics engine in Godot 4.4, <a href="https://github.com/mihe">Mikael Hermansson</a> and <a href="https://github.com/jrouwe">Jorrit Rouwe</a> (Jolt’s creator) have made nearly <a href="https://github.com/godotengine/godot/issues?q=is%3Apr%20state%3Amerged%20label%3Atopic%3Aphysics%20milestone%3A4.5%20(author%3Amihe%20OR%20author%3Ajrouwe)">20 fixes and improvements</a> to the Jolt integration for Godot 4.5, which should now provide an even better experience.</p>
|
||
<p>And more:</p>
|
||
<ul>
|
||
<li>Add ability to apply forces and impulses to SoftBody3D. (<a href="https://github.com/godotengine/godot/pull/100463">GH-100463</a>)</li>
|
||
<li>Chunk tilemap physics. (<a href="https://github.com/godotengine/godot/pull/102662">GH-102662</a>)</li>
|
||
<li>SoftBody3D: Support physics Interpolation. (<a href="https://github.com/godotengine/godot/pull/106863">GH-106863</a>)</li>
|
||
</ul>
|
||
<h3 id="platforms">Platforms</h3>
|
||
<h4 id="android">Android</h4>
|
||
<p>The Android editor experience has become significantly improved thanks to the implementation of <code class="language-plaintext highlighter-rouge">TouchActionsPanel</code>. While this is technically something any touch device can take advantage of, <a href="https://github.com/syntaxerror247">Anish Mishra</a>’s PR <a href="https://github.com/godotengine/godot/pull/100339">GH-100339</a> was explicitly created with the Android editor in mind. <code class="language-plaintext highlighter-rouge">TouchActionsPanel</code> comes equipped with common action buttons (save, undo, redo, etc.), which simulate actions like <code class="language-plaintext highlighter-rouge">ui_undo</code> and <code class="language-plaintext highlighter-rouge">ui_redo</code> via pre-existing shortcuts.</p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Recording of the Android editor with the new TouchActionsPanel">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-beta-1/touch-actions-panel.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p>And more:</p>
|
||
<ul>
|
||
<li>Add support for using an Android Service to host the Godot engine. (<a href="https://github.com/godotengine/godot/pull/102866">GH-102866</a>)</li>
|
||
<li>Enable native debug symbols generation. (<a href="https://github.com/godotengine/godot/pull/105605">GH-105605</a>)</li>
|
||
<li>Add CameraFeed support. (<a href="https://github.com/godotengine/godot/pull/106094">GH-106094</a>)</li>
|
||
<li>Bump minimum supported SDK to 24. (<a href="https://github.com/godotengine/godot/pull/106148">GH-106148</a>)</li>
|
||
<li>Add support for 16KB page sizes. (<a href="https://github.com/godotengine/godot/pull/106358">GH-106358</a>)</li>
|
||
</ul>
|
||
<h4 id="linux">Linux</h4>
|
||
<p><a href="https://github.com/Riteo">Riteo</a> has been on a quest to turn <a href="https://wayland.freedesktop.org/">Wayland</a> into a true replacement for the X11 protocol. The biggest reason to not switch over as the default implementation, the lack of native sub-windows, is no longer a concern thanks to <a href="https://github.com/godotengine/godot/pull/101774">GH-101774</a>. Now users can truly take advantage of multi-window output, regardless of display protocol. This being solved, the next step will be to implement in-editor game window embedding to have full parity with the X11 flavor of the editor. Riteo already started that work in <a href="https://github.com/godotengine/godot/pull/107435">GH-107435</a>.</p>
|
||
<p><img src="/storage/blog/dev-snapshot-godot-4-5-dev-2/wayland-sub-window.webp" alt="Multi-Window output on Wayland" /></p>
|
||
<h4 id="macos">macOS</h4>
|
||
<p>Speaking of embedding the game window! It took an extra release cycle for this Godot 4.4 feature to come to macOS, as this OS does not allow the kind of window manipulation that Windows and Linux/X11 use for game window embedding. Instead, macOS utilizes an inter-process communication approach where the framebuffer is sent from the game process (which performs off-screen rendering) to the editor window, which also handles passing input events to the game process. Although it’s much more complex, <a href="https://github.com/stuartcarnie">Stuart Carnie</a> used a more robust approach that doesn’t rely on any window management hacks (<a href="https://github.com/godotengine/godot/pull/105884">GH-105884</a>). Not having to worry about edge-cases or low-level shenanigans is appealing in its own right, so this approach may be ported later to Windows/Linux in a future release to make game window embedding much more reliable overall.</p>
|
||
<p>And more:</p>
|
||
<ul>
|
||
<li>Switch ANGLE (OpenGL ES compatibility layer) to Metal backend. (<a href="https://github.com/godotengine/godot/pull/107306">GH-107306</a>)</li>
|
||
</ul>
|
||
<h4 id="visionos">visionOS</h4>
|
||
<p>The Apple XR environment, visionOS, comes to Godot Engine in 4.5! We’re already committed to making great strides in XR feature sets and support, but this brings us closer to a platform-independent pipeline similar to what we already have with traditional platforms. It might be unconventional to imagine using an engine editor within an XR environment, but it’s one which we’ve supported for Meta Quest and OpenXR; now Apple users can join the fun.</p>
|
||
<p>This work was contributed by <a href="https://github.com/rsanchezsaez">Ricardo Sanchez-Saez</a> from Apple’s visionOS engineering team. A notable consequence of this PR is that our iOS and visionOS platforms now share a unified “Apple Embedded” driver, which paves the way to implementing tvOS support in the future.</p>
|
||
<h4 id="web">Web</h4>
|
||
<p>The upcoming performance boost from SIMD is so impressive that we’ve made a <a href="/article/upcoming-serious-web-performance-boost/">dedicated article</a> to showcase exactly what kind of benefits users can expect. The short version is that <a href="https://github.com/adamscott">Adam Scott</a> created a PR which changed only a single compiler flag (<a href="https://github.com/godotengine/godot/pull/106319">GH-106319</a>), but one which caused universal improvements for web applications and editor workflow. Check out our article for the long version.</p>
|
||
<p><a href="https://github.com/marcosc90">Marcos Casagrande</a> started contributing during this release cycle and brought a <a href="https://github.com/godotengine/godot/pulls?q=is%3Apr+is%3Amerged+author%3Amarcosc90+milestone%3A4.5+label%3Aplatform%3Aweb">flurry of performance improvements</a> to the Web platform, which should further help ensure that web games work on as many devices as possible.</p>
|
||
<h4 id="windows">Windows</h4>
|
||
<p>Support for Windows 7/8.1 will be dropped starting with 4.5 (<a href="https://github.com/godotengine/godot/pull/106959">GH-106959</a>). The call to remove Windows 8.1 wasn’t a difficult one; it’s been EOL for over half a decade, had extended support end over two years ago, and was inherently unpopular to the point that online survey tools for OSes outright omit it. Windows 7 is comparatively more contentious, but builds for it were already in a broken state ever since the introduction of the aforementioned AccessKit; combine that with Windows 7 recently celebrating its 10-year anniversary of being EOL, as well as active coverage of this OS being estimated at one-tenth of a percentage point, and its removal was ultimately cemented. This had the benefit of <strong>significantly</strong> cleaning up the codebase for our Windows-specific files, which often had to rely on dummy includes to account for Windows 7 specifically, and opens the door for more modern APIs to be integrated for our Windows builds.</p>
|
||
<p>Another major improvement to the Windows export pipeline is the possibility to modify the metadata of Windows binaries without the third-party <code class="language-plaintext highlighter-rouge">rcedit</code> tool (<a href="https://github.com/godotengine/godot/pull/75950">GH-75950</a>). This means that Godot can now properly set a custom icon to your Windows .exe, and modify the relevant product name, company information, etc., fully out of the box and from any platform.</p>
|
||
<p>And more:</p>
|
||
<ul>
|
||
<li>Remove visible <code class="language-plaintext highlighter-rouge">WINDOW_MODE_FULLSCREEN</code> border by setting window region. (<a href="https://github.com/godotengine/godot/pull/88852">GH-88852</a>)</li>
|
||
<li>Official Windows binaries are now signed with a new code signing certificate (provided by Prehensile Tales).</li>
|
||
</ul>
|
||
<h3 id="rendering-and-shaders">Rendering and shaders</h3>
|
||
<h4 id="stencils">Stencils!</h4>
|
||
<p>With a PR in the making for nearly 2 years <a href="https://github.com/godotengine/godot/pull/80710">GH-80710</a>, <a href="https://github.com/apples">apples</a> has brought a long-awaited stencil support to Godot! This new shader functionality is supported on all of our rendering backends, and will allow our users to perform entirely new techniques with the power of <strong>depth</strong>.</p>
|
||
<p><strong>Standard outline, standard x-ray, and custom outline materials:</strong>
|
||
<img src="/storage/blog/dev-snapshot-godot-4-5-beta-1/stencil-compare.webp" alt="Stencil compare" /></p>
|
||
<p><strong>Custom x-ray material:</strong>
|
||
<img src="/storage/blog/dev-snapshot-godot-4-5-beta-1/stencil-x-ray.webp" alt="Stencil x-ray" /></p>
|
||
<p><strong>Cel-shaded lighting:</strong></p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Demo of cel-shaded lighting with stencils">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-beta-1/stencil-light.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p><strong>Fire effect implemented entirely with <code class="language-plaintext highlighter-rouge">StandardMaterial3D</code>:</strong></p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Demo of a fire effect implemented via StandardMaterial3D's stencil features">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-beta-1/stencil-fire.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<h4 id="shaders-and-rendering-features">Shaders and rendering features</h4>
|
||
<p>In addition to the stencil shader support, 4.5 brings with it a plethora of improvements to those working with shaders. One such usability improvement arrived via <a href="https://github.com/godotengine/godot/pull/100287">GH-100287</a>, where <a href="https://github.com/Chaosus">Yuri Rubinsky</a> re-organized the shader editor’s UI as a whole. Others are in the form of direct rendering improvements, such as: ambient specular occlusion by <a href="https://github.com/lander-vr">Lander</a> (<a href="https://github.com/godotengine/godot/pull/106145">GH-106145</a>), SMAA support by <a href="https://github.com/RGDTAB">Raymond DiDonato</a> (<a href="https://github.com/godotengine/godot/pull/102330">GH-102330</a>), and bent normal maps by <a href="https://github.com/LunaCapra">Capry</a> (<a href="https://github.com/godotengine/godot/pull/89988">GH-89988</a>).</p>
|
||
<p><strong>Specular occlusion:</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th style="text-align: center">Disabled</th>
|
||
<th style="text-align: center">Enabled</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-4/specular-disabled-1.webp" alt="Specular disabled 1" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-4/specular-enabled-1.webp" alt="Specular enabled 1" width="350" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-4/specular-disabled-2.webp" alt="Specular disabled 2" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-4/specular-enabled-2.webp" alt="Specular enabled 2" width="350" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-4/specular-disabled-3.webp" alt="Specular disabled 3" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-4/specular-enabled-3.webp" alt="Specular enabled 3" width="350" /></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><strong>SMAA:</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th style="text-align: center">Off</th>
|
||
<th style="text-align: center">On</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/smaa-off-1.webp" alt="SMAA off 1" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/smaa-on-1.webp" alt="SMAA on 1" width="350" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/smaa-off-2.webp" alt="SMAA off 2" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/smaa-on-2.webp" alt="SMAA on 2" width="350" /></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><strong>Bent normal maps:</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th style="text-align: center">Before</th>
|
||
<th style="text-align: center">After</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/bent-normals-before-1.webp" alt="Bent normals before 1" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/bent-normals-after-1.webp" alt="Bent normals after 1" width="350" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/bent-normals-before-2.webp" alt="Bent normals before 2" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/bent-normals-after-2.webp" alt="Bent normals after 2" width="350" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/bent-normals-before-3.webp" alt="Bent normals before 3" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/bent-normals-after-3.webp" alt="Bent normals after 3" width="350" /></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<h4 id="shader-baker">Shader baker</h4>
|
||
<p>Just as essential to rendering as the output itself is how performant it is to create that output in the first place. <a href="https://github.com/DarioSamo">Darío</a> and <a href="https://github.com/RandomShaper">Pedro J. Estébanez</a> bless us in this respect with <a href="https://github.com/godotengine/godot/pull/102552">GH-102552</a>, which introduces a new shader baker at export time. When enabled, all shaders will be pre-compiled at export time, ensuring that players won’t need to wait a long time for shaders to compile when running your game. Users don’t have to put in any extra work to make this work with ubershaders, as the features go hand-in-hand automatically.</p>
|
||
<p><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/shader-baker.webp" alt="Shader baker" /></p>
|
||
<p><strong>Before:</strong></p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Slow loading time of Godot's Third Person Shooter demo without prebaked shaders">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-dev-5/shader-baker-before.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p><strong>After:</strong></p>
|
||
<video autoplay="" loop="" muted="" playsinline="" title="Fast loading time of Godot's Third Person Shooter demo with prebaked shaders">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-dev-5/shader-baker-after.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<h4 id="motion-vectors-for-mobile">Motion vectors for Mobile</h4>
|
||
<p>Across our multiple renderers, it’s only reasonable that certain features would be exclusive to the higher-end selections. Motion vectors, for instance, have been available on the Forward+ renderer for ages, but have never been available to the Mobile renderer. That is, until <a href="https://github.com/devloglogan">Logan Lang</a> took to rectifying this in <a href="https://github.com/godotengine/godot/pull/100283">GH-100283</a>, which builds atop his <a href="https://github.com/godotengine/godot/pull/100282">previous PR</a>’s render-agnostic foundation.</p>
|
||
<h4 id="and-more">And more</h4>
|
||
<ul>
|
||
<li>Add new <code class="language-plaintext highlighter-rouge">StandardMaterial</code> properties to allow users to control FPS-style objects (hands, weapons, tools close to the camera). (<a href="https://github.com/godotengine/godot/pull/93142">GH-93142</a>)</li>
|
||
<li>Fragment density map support. (<a href="https://github.com/godotengine/godot/pull/99551">GH-99551</a>)</li>
|
||
<li>Overhaul the cull mask internals for Lights, Decals, and Particle Colliders. (<a href="https://github.com/godotengine/godot/pull/102399">GH-102399</a>)</li>
|
||
<li>Various performance optimizations. (<a href="https://github.com/godotengine/godot/pull/103547">GH-103547</a>, <a href="https://github.com/godotengine/godot/pull/103794">GH-103794</a>, <a href="https://github.com/godotengine/godot/pull/103889">GH-103889</a>)</li>
|
||
<li>Optimize Mobile renderer by using FP16 explicitly. (<a href="https://github.com/godotengine/godot/pull/107119">GH-107119</a>)</li>
|
||
<li>Fix LightmapGI shadow leaks. (<a href="https://github.com/godotengine/godot/pull/107254">GH-107254</a>)</li>
|
||
</ul>
|
||
<h3 id="xr">XR</h3>
|
||
<p>The XR team has been doing a <a href="https://github.com/godotengine/godot/pulls?q=is%3Amerged+is%3Apr+label%3Atopic%3Axr+milestone%3A4.5+label%3Aenhancement">lot of groundwork</a> to support more OpenXR extensions. While it’s separate from the main Godot release cycle, the Godot OpenXR Vendors had a <a href="https://github.com/GodotVR/godot_openxr_vendors/releases/tag/4.0.0-stable">4.0.0 release</a> in April which is worth checking out! <a href="https://github.com/mbucchia">Matthieu Bucchianeri</a> had a massive first contribution merged to implement support for the Direct3D 12 OpenXR backend (<a href="https://github.com/godotengine/godot/pull/104207">GH-104207</a>).</p>
|
||
<p><a href="https://github.com/DarioSamo">Darío</a> and <a href="https://github.com/devloglogan">Logan Lang</a>’s implementations of respectively fragment density maps and motion vectors for the Mobile renderer also pave the way for better rendering and supporting more extensions for XR.</p>
|
||
<p>While these are not merged yet, you can keep an eye on <a href="https://github.com/BastiaanOlij">Bastiaan Olij</a>’s cutting edge implementations for the OpenXR Spatial Entities (<a href="https://github.com/godotengine/godot/pull/107391">GH-107391</a>) and Render Model (<a href="https://github.com/godotengine/godot/pull/107388">GH-107388</a>) extensions, building upon the freshly released OpenXR SDK 1.1.49. <a href="https://github.com/m4gr3d">Fredia Huya-Kouadio</a> is also putting finishing touches on the support for running hybrid apps from the Godot XR editor (<a href="https://github.com/godotengine/godot/pull/103972">GH-103972</a>).</p>
|
||
<h2 id="changelog">Changelog</h2>
|
||
<p><strong>334 contributors</strong> submitted a staggering <strong>1817 fixes</strong> since the release of 4.4-stable. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5"><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.5-beta1">changes since the 4.5-dev5 snapshot</a>, for a more curated selection of <strong>372 fixes</strong> from <strong>119 contributors</strong>.</p>
|
||
<p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/46c495ca21f40f57a7fb9c7cde6143738f1652d4"><code class="language-plaintext highlighter-rouge">46c495ca2</code></a>.</p>
|
||
<h2 id="downloads">Downloads</h2>
|
||
<div class="card card-download">
|
||
<a class="card-download-link" href="/download/archive/4.5-beta1">
|
||
Download Godot 4.5 beta1
|
||
</a>
|
||
<div class="card-download-details">
|
||
<img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-5-beta-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://github.com/godotengine/godot-builds/releases/download/4.5-beta1/Godot_v4.5-beta1_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta1/Godot_v4.5-beta1_mono_linux_x86_64.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta1/Godot_v4.5-beta1_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta1/Godot_v4.5-beta1_mono_macos.universal.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-beta1/Godot_v4.5-beta1_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-beta1/Godot_v4.5-beta1_mono_win64.zip" 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-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.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>
|
||
<ul>
|
||
<li>Windows: As mentioned above, we used a new signing certificate for this release. Windows Defender’s SmartScreen might pop up for initial downloads as it sees a surge of downloads of binaries signed with a legit but yet unused certificate. This should automatically rectify itself by the time beta 2 rolls around.</li>
|
||
<li>Android: Subsequent exports fail when using Shader Baker. The workaround is to delete the <code class="language-plaintext highlighter-rouge">.godot/export</code> folder before exporting. (<a href="https://github.com/godotengine/godot/issues/107535">GH-107535</a>)</li>
|
||
<li>Wayland: Wayland editor documentation popups appear on screen’s edge and generate errors. (<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 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></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>A new convention to look forward to: GodotFest - Save the Date!</title><link href="https://godotengine.org/article/godotfest-2025/"/><updated>2025-06-17T00:00:00+00:00</updated><id>https://godotengine.org/article/godotfest-2025/</id><summary>Introducing the second annual Godot convention: GodotFest 25 - GodotCon Europe!</summary><content type="html"><p>We’re excited to announce a new annual, independent convention centered around Godot: <strong>GodotFest</strong>!</p>
|
||
<p>What does this mean? It means we’ll now have another annual Godot event to look forward to! Godot<em>Con</em>, will still be organized
|
||
by the Godot Foundation in 2026, and it will continue to travel the world, offering a great starting point for anyone curious about
|
||
the engine.</p>
|
||
<p>Godot<em>Fest</em>, meanwhile, will be held in the same location each year, always around the same time of the year. Since it’s aimed more
|
||
at a professional audience, it’ll take place during the workweek to make business travel more convenient.</p>
|
||
<p>This year, the GodotFest will be the GodotCon in Europe. Starting next year, you can expect to have at least three events: GodotCon North America, GodotCon Europe and GodotFest.</p>
|
||
<p>GodotFest is organized by the Munich Godot user group, the same team behind the GodotCon 23 - that’s why it will take place in <strong>Munich, Germany, on the 11th and 12th of November, at Smartvillage Bogenhausen</strong>.</p>
|
||
<p>These two days will be filled with many talks and workshops vetted by our talented submission committee
|
||
and plenty of chances to meet new people. We strive to create a professional event in a beautiful,
|
||
light and modern venue with opportunities to:</p>
|
||
<ul>
|
||
<li>connect with others in the Godot ecosystem</li>
|
||
<li>pitch your games and</li>
|
||
<li>enjoy great food and drinks throughout the event (included in your ticket)</li>
|
||
</ul>
|
||
<h2 id="tickets">Tickets!</h2>
|
||
<p>The ticket shop is now open at <a href="https://25.godotfest.com/">https://25.godotfest.com/</a>, get your tickets with
|
||
an early supporter discount until the end of June!</p>
|
||
<h2 id="call-for-speakers-at-godotfest">Call for Speakers at GodotFest</h2>
|
||
<p>Would you like to give a talk, share your knowledge in a workshop, or perhaps exhibit your game?
|
||
We’re looking for all kinds of submissions around Godot and game development in general!</p>
|
||
<p><a href="https://pretalx.godotfest.com/godotfest-25/">➡️ Call for submissions</a>, deadline: July 17th, 2025</p>
|
||
<p>A big thank you ahead of time to our lovely submission committee,
|
||
for helping us curate and create a diverse and interesting roster of submissions!</p>
|
||
<ul>
|
||
<li><a href="https://godotsteam.com/">Gramps Garcia</a>, GodotSteam Creator / Maintainer</li>
|
||
<li><a href="https://bsky.app/profile/rothiotome.bsky.social">Rothio Tome</a>, Twitch development streamer and lead developer @ Patattie Games</li>
|
||
<li>Ariel Manzur, Godot Engine Co-founder</li>
|
||
<li><a href="https://bsky.app/profile/passivestar.bsky.social">passivestar</a></li>
|
||
<li><a href="https://www.youtube.com/LucyLavend">LucyLavend</a></li>
|
||
<li><a href="https://www.linkedin.com/in/kerstin-pfaffinger/">Kerstin Pfaffinger</a>, GodotFest Co-founder, master student @ TUM</li>
|
||
<li><a href="https://dyrda.page/">Daniel Dyrda</a>, Game Design Engineer and Researcher @ TUM</li>
|
||
<li><a href="https://youtube.com/bitbraindev">Miguel aka bitbrain</a></li>
|
||
</ul>
|
||
<p>We are also actively looking for sponsors to support GodotFest.
|
||
If you or your company would be interested in learning more about sponsorship opportunities,
|
||
please reach out to <a href="mailto:contact@godotfest.com?subject=Sponsorhip inquiry">contact@godotfest.com</a>.</p>
|
||
<p>Follow the <a href="https://taplink.cc/godotfest">GodotFest socials</a> to never miss any news,
|
||
and <a href="https://discord.com/invite/DD95reBjzM">join the Discord</a> to stay in touch.</p>
|
||
<p>See you there!</p>
|
||
<h2 id="overview">Overview</h2>
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td>📅 Dates</td>
|
||
<td>11th, 12th of November</td>
|
||
</tr>
|
||
<tr>
|
||
<td>🕑 Time</td>
|
||
<td>09:30 - 18:00 CEST</td>
|
||
</tr>
|
||
<tr>
|
||
<td>🌍 Location</td>
|
||
<td>Munich, Germany</td>
|
||
</tr>
|
||
<tr>
|
||
<td>📍 Venue</td>
|
||
<td>Smartvillage Bogenhausen <br /><a href="https://www.openstreetmap.org/node/12025157887">Rosenkavalierplatz 13, 81925 Munich</a></td>
|
||
</tr>
|
||
<tr>
|
||
<td>🌐 Socials + News</td>
|
||
<td><a href="https://taplink.cc/godotfest">https://taplink.cc/godotfest</a></td>
|
||
</tr>
|
||
<tr>
|
||
<td>💬 Discord</td>
|
||
<td><a href="https://discord.com/invite/DD95reBjzM">https://discord.com/invite/DD95reBjzM</a></td>
|
||
</tr>
|
||
</tbody>
|
||
</table></content><author><name>GodotFest Team</name></author><category term="Events"/></entry><entry><title>Upcoming (serious) Web performance boost</title><link href="https://godotengine.org/article/upcoming-serious-web-performance-boost/"/><updated>2025-06-05T18:00:00+00:00</updated><id>https://godotengine.org/article/upcoming-serious-web-performance-boost/</id><summary>Compiling the Godot Engine with WASM SIMD support truly is a game changer.</summary><content type="html"><p>Sometimes, just adding a compiler flag can yield significant performance boosts. <a href="https://github.com/godotengine/godot/pull/106319">And that just happened.</a></p>
|
||
<p><a href="https://caniuse.com/wasm-simd">For about two years now</a>, all major browsers have supported WASM (<a href="https://en.wikipedia.org/wiki/WebAssembly">WebAssembly</a>) SIMD. SIMD stands for <a href="https://en.wikipedia.org/wiki/Single_instruction,_multiple_data">“Single instruction, multiple data”</a> and is a technology that permits CPUs to do some parallel computation, often speeding up the whole program. And that’s exactly why we tried it out recently.</p>
|
||
<p>We got positive results.</p>
|
||
<h2 id="the-need-for-performance-on-the-web">The need for performance on the Web</h2>
|
||
<p>The Web platform is often overlooked as a viable target, because of its less-than-ideal environment and its perceived poor performance. And the perception is somewhat right: the Web environment has a lot of security-related quirks to take into account—the user needs to interact with a game frame before the browser allows it to play any sound<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup>. Also, due to bandwidth and compatibility reasons, you rarely see high-fidelity games being played on a browser. Performance is better achieved when running software natively on the operating system.</p>
|
||
<p>But don’t underestimate the potential of the Web platform. As I explained in broad terms at the talk I gave at the last GodotCon Boston 2025, the Web has caught up a lot since the days of Flash games. Not only are there more people playing Web games every year, but standards and browsers improve every year in functionality and in performance.</p>
|
||
<p>And that’s why we are interested in using WASM SIMD.</p>
|
||
<h2 id="wasm-simd-benchmarks">WASM SIMD Benchmarks</h2>
|
||
<p>Our resident benchmark expert Hugo Locurcio (better known as <a href="https://github.com/Calinou/">Calinou</a>) ran the numbers for us on a stress test I made. We wanted to compare standard builds to builds with WASM SIMD enabled.</p>
|
||
<div class="note">
|
||
<p><strong>Note:</strong> You may try to replicate his results, but be aware that he has a beast of a machine. Here are his PC’s specifications:</p>
|
||
<ul>
|
||
<li><strong>CPU:</strong> Intel Core i9-13900K</li>
|
||
<li><strong>GPU:</strong> NVIDIA GeForce RTX 4090</li>
|
||
<li><strong>RAM:</strong> 64 GB (2×32 GB DDR5-5800 CL30)</li>
|
||
<li><strong>SSD:</strong> Solidigm P44 Pro 2 TB</li>
|
||
<li><strong>OS:</strong> Linux (Fedora 42)</li>
|
||
</ul>
|
||
</div>
|
||
<p>I built a Jolt physics stress test from a scene initially made by <a href="https://bsky.app/profile/passivestar.bsky.social">passivestar</a>. By spawning more and more barrels into the contraption, we can easily test the performance difference between the WASM SIMD build and the other.</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th style="text-align: center"> </th>
|
||
<th style="text-align: center">Without WASM SIMD</th>
|
||
<th style="text-align: center">With WASM SIMD</th>
|
||
<th style="text-align: center">Improvement (approx.)</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td style="text-align: center">Test links</td>
|
||
<td style="text-align: center"><a href="https://adamscott.github.io/godot-physics-demo-without-simd/" target="_blank">Link</a></td>
|
||
<td style="text-align: center"><a href="https://adamscott.github.io/godot-physics-demo-with-simd/" target="_blank">Link</a></td>
|
||
<td style="text-align: center">-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center">Firefox 138<br />(“+100 barrels” 3 times)</td>
|
||
<td style="text-align: center"><img src="/storage/blog/upcoming-web-serious-performance-boost/calinou-firefox138-3times-without-wasm-simd.webp" alt="Firefox 138 &quot;+ 100 barrels&quot; 3 times without SIMD" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/upcoming-web-serious-performance-boost/calinou-firefox138-3times-with-wasm-simd.webp" alt="Firefox 138 &quot;+ 100 barrels&quot; 6 times without SIMD" /></td>
|
||
<td style="text-align: center"><strong>2×</strong></td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center">Firefox 138<br />(“+100 barrels” 6 times)</td>
|
||
<td style="text-align: center"><img src="/storage/blog/upcoming-web-serious-performance-boost/calinou-firefox138-6times-without-wasm-simd.webp" alt="Firefox 138 &quot;+ 100 barrels&quot; 3 times without SIMD" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/upcoming-web-serious-performance-boost/calinou-firefox138-6times-with-wasm-simd.webp" alt="Firefox 138 &quot;+ 100 barrels&quot; 6 times without SIMD" /></td>
|
||
<td style="text-align: center"><strong>10.17×</strong>*</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center">Chromium 134<br />(“+100 barrels” 3 times)</td>
|
||
<td style="text-align: center"><img src="/storage/blog/upcoming-web-serious-performance-boost/calinou-chromium134-3times-without-wasm-simd.webp" alt="Chromium 134 &quot;+ 100 barrels&quot; 3 times without SIMD" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/upcoming-web-serious-performance-boost/calinou-chromium134-3times-with-wasm-simd.webp" alt="Chromium 134 &quot;+ 100 barrels&quot; 6 times without SIMD" /></td>
|
||
<td style="text-align: center"><strong>1.37×</strong></td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center">Chromium 134<br />(“+100 barrels” 6 times)</td>
|
||
<td style="text-align: center"><img src="/storage/blog/upcoming-web-serious-performance-boost/calinou-chromium134-6times-without-wasm-simd.webp" alt="Chromium 134 &quot;+ 100 barrels&quot; 3 times without SIMD" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/upcoming-web-serious-performance-boost/calinou-chromium134-6times-with-wasm-simd.webp" alt="Chromium 134 &quot;+ 100 barrels&quot; 6 times without SIMD" /></td>
|
||
<td style="text-align: center"><strong>14.17×</strong>*</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><em>*Please note that once the physics engine enters a “spiral of death”, it is common for the framerate to drop to single digits, SIMD or not. These tests don’t prove 10× to 15× CPU computing speed improvements, but rather that games will be more resilient to framerate drops on the same machine in the same circumstances. The 1.5× to 2× numbers are more representative here of the performance gains by WASM SIMD.</em></p>
|
||
<h2 id="what-it-means-for-your-games">What it means for your games</h2>
|
||
<p>Starting with 4.5 dev 5, you can expect your Web games to run a little bit more smoothly, without having to do anything. Especially when things get chaotic (for your CPU). It isn’t a silver bullet for poorly optimized games, but it will help nonetheless. Also, note that it cannot do anything for GPU rendering bottlenecks.</p>
|
||
<p>Be aware that the stress tests are meant by nature to only test the worst case scenarios, so you may not see such large improvements in normal circumstances. But it’s nice to see such stark improvements when the worst happens.</p>
|
||
<h2 id="availability">Availability</h2>
|
||
<p>From here on out, the 4.5 release official templates will only support WebAssembly SIMD-compatible browsers in order to keep the template sizes small. We generally aim to maintain compatibility with the oldest devices we can. But in this case, the performance gains are too large to ignore and the chances of users having browsers that are that far out of date is too small relative to the potential benefits.</p>
|
||
<p>If you need to use non-SIMD templates, don’t fret. You can always <a href="https://docs.godotengine.org/en/stable/engine_details/development/compiling/index.html">build</a> the Godot Editor and the engine templates without WebAssembly SIMD support by using the <code class="language-plaintext highlighter-rouge">wasm_simd=no</code> build option.</p>
|
||
<h2 id="whats-next">What’s next?</h2>
|
||
<p>As I wrote in <a href="/article/live-from-godotcon-boston-web-dotnet-prototype/">my last blog post</a>, we’re currently working very hard to make C#/.NET exports a reality. We do have <a href="https://lab.godotengine.org/godot-dotnet-web/">a promising prototype</a>, we just need to make sure that it’s production-ready.</p>
|
||
<p>I also mentioned in that article that I wanted to concentrate on improving our asset loading game. Preloading an entire game before even starting it hinders the ability to use Godot for commercial Web games. Once something is implemented to improve that issue, count on me to share the news with you.</p>
|
||
<div class="footnotes" role="doc-endnotes">
|
||
<ol>
|
||
<li id="fn:1">
|
||
<p>It’s either that, or we return to the old days of spam-webpages using the <a href="https://www.youtube.com/watch?v=WckVsX5-uyE">“Congratulations, you won!”</a> sound effect when you least expect it. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
|
||
</li>
|
||
</ol>
|
||
</div></content><author><name>Adam Scott</name></author><category term="Progress Report"/></entry><entry><title>Dev snapshot: Godot 4.5 dev 5</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-5-dev-5/"/><updated>2025-06-02T12:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-5-dev-5/</id><summary>The cool chill of the feature freeze approaches…</summary><content type="html"><p>Brrr… Do you feel that? That’s the cold front of the feature freeze just around the corner. It’s not upon us <em>just</em> yet, but this is likely to be our final development snapshot of the 4.5 release cycle. As we enter the home stretch of new features, bugs are naturally going to follow suit, meaning bug reports and feedback will be especially important for a smooth beta timeframe.</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 <a href="https://editor.godotengine.org/releases/4.5.dev5/">try the <strong>Web editor</strong></a> or the <strong>Android editor</strong> 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://www.walaber.com/replicube"><strong>Replicube</strong></a>, <em>a programming puzzle game where you write code to recreate voxelized objects. It is developed by <a href="https://www.walaber.com/">Walaber Entertainment LLC</a> (<a href="https://bsky.app/profile/walaber.com">Bluesky</a>, <a href="https://twitter.com/walaber">Twitter</a>). You can get the game on <a href="https://store.steampowered.com/app/3401490/Replicube/?curator_clanid=41324400">Steam</a>.</em></p>
|
||
<h2 id="highlights">Highlights</h2>
|
||
<p>In case you missed them, see the <a href="/article/dev-snapshot-godot-4-5-dev-1/">4.5 dev 1</a>, <a href="/article/dev-snapshot-godot-4-5-dev-2/">4.5 dev 2</a>, <a href="/article/dev-snapshot-godot-4-5-dev-3/">4.5 dev 3</a>, and <a href="/article/dev-snapshot-godot-4-5-dev-4/">4.5 dev 4</a> release notes for an overview of some key features which were already in those snapshots, and are therefore still available for testing in dev 5.</p>
|
||
<h3 id="native-visionos-support">Native visionOS support</h3>
|
||
<p>Normally, our featured highlights in these development blogs come from long-time contributors. This makes sense of course, as it’s generally those users that have the familiarity necessary for major changes or additions that are commonly used for these highlights. That’s why it might surprise you to hear that visionOS support comes to us from <a href="https://github.com/rsanchezsaez">Ricardo Sanchez-Saez</a>, whose pull request <a href="https://github.com/godotengine/godot/pull/105628">GH-105628</a> is his <em>very first</em> contribution to the engine! It might <em>not</em> surprise you to hear that Ricardo is part of the visionOS engineering team at Apple, which certainly helps get his foot in the door, but that still makes visionOS the first officially-supported platform integration in about a decade.</p>
|
||
<p>For those unfamiliar, visionOS is Apple’s XR environment. We’re no strangers to XR as a concept (see our recent <a href="/article/godot-xr-update-mar-2025/">XR blogpost</a> highlighting the latest <a href="https://itch.io/jam/godot-xr-game-jam-feb-2025">Godot XR Game Jam</a>), but XR platforms are as distinct from one another as traditional platforms. visionOS users have expressed a strong interest in integrating with our ever-growing XR community, and now we can make that happen. See you all in the next XR Game Jam!</p>
|
||
<h3 id="gdscript-abstract-classes">GDScript: Abstract classes</h3>
|
||
<p>While the Godot Engine utilizes abstract classes—a class that cannot be directly instantiated—frequently, this was only ever supported internally. Thanks to the efforts of <a href="https://github.com/aaronfranke">Aaron Franke</a>, this paradigm is now available to GDScript users (<a href="https://github.com/godotengine/godot/pull/67777">GH-67777</a>). Now if a user wants to introduce their own abstract class, they merely need to declare it via the new <code class="language-plaintext highlighter-rouge">abstract</code> keyword:</p>
|
||
<div class="language-gdscript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">abstract</span> <span class="k">class_name</span> <span class="n">MyAbstract</span> <span class="k">extends</span> <span class="n">Node</span>
|
||
</code></pre></div></div>
|
||
<p><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/abstract-error.webp" alt="Abstract error" /></p>
|
||
<p>The purpose of an abstract class is to create a baseline for other classes to derive from:</p>
|
||
<div class="language-gdscript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class_name</span> <span class="n">ExtendsMyAbstract</span> <span class="k">extends</span> <span class="n">MyAbstract</span>
|
||
</code></pre></div></div>
|
||
<p><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/abstract-derived.webp" alt="Abstract derived" /></p>
|
||
<h3 id="shader-baker">Shader baker</h3>
|
||
<p>From the technical gurus behind implementing <a href="/article/dev-snapshot-godot-4-4-dev-4/#ubershaders-and-pipeline-pre-compilation-and-dedicated-transfer-queues">ubershaders</a>, <a href="https://github.com/DarioSamo">Darío Samo</a> and <a href="https://github.com/RandomShaper">Pedro J. Estébanez</a> bring us another miracle of rendering via <a href="https://github.com/godotengine/godot/pull/102552">GH-102552</a>: shader baker exporting. This is an optional feature that can be enabled at export time to speed up shader compilation massively. This feature works with ubershaders automatically without any work from the user. Using shader baking is strongly recommended when targeting Apple devices or D3D12 since it makes the biggest difference there (over <strong>20× decrease</strong> in load times in the TPS demo)!</p>
|
||
<p><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/shader-baker.webp" alt="Shader baker" /></p>
|
||
<p><strong>Before:</strong></p>
|
||
<video autoplay="" loop="" muted="" playsinline="">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-dev-5/shader-baker-before.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p><strong>After:</strong></p>
|
||
<video autoplay="" loop="" muted="" playsinline="">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-dev-5/shader-baker-after.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p>However, it comes with tradeoffs:</p>
|
||
<ol>
|
||
<li>Export time will be much longer.</li>
|
||
<li>Build size will be much larger since the baked shaders can take up a lot of space.</li>
|
||
<li>We have removed several MoltenVK bug workarounds from the Forward+ shader, therefore we no longer guarantee support for the Forward+ renderer on Intel Macs. If you are targeting Intel Macs, you should use the Mobile or Compatibility renderers.</li>
|
||
<li>Baking for Vulkan can be done from any device, but baking for D3D12 needs to be done from a Windows device and baking for Apple <code class="language-plaintext highlighter-rouge">.metallib</code> requires a Metal compiler (macOS with Xcode / Command Line Tools installed).</li>
|
||
</ol>
|
||
<h3 id="web-webassembly-simd-support">Web: WebAssembly SIMD support</h3>
|
||
<p>As you might recall, Godot 4.0 initially released under the assumption that multi-threaded web support would become the standard, and only supported that format for web builds. This assumption unfortunately proved to be wishful thinking, and was <a href="/article/dev-snapshot-godot-4-3-dev-3/#single-threaded-web-exports">reverted in 4.3</a> by allowing for single-threaded builds once more. However, this doesn’t mean that these single-threaded environments are inherently incapable of parallel processing; it just requires alternative implementations. One such implementation, <abbr title="Single instruction, multiple data"><a href="https://en.wikipedia.org/wiki/Single_instruction,_multiple_data">SIMD</a></abbr>, is a perfect candidate thanks to its support across <a href="https://caniuse.com/wasm-simd">all major browsers</a>. To that end, web-wiz <a href="https://github.com/adamscott">Adam Scott</a> has taken to integrating this implementation for our web builds by default (<a href="https://github.com/godotengine/godot/pull/106319">GH-106319</a>).</p>
|
||
<h3 id="inline-color-pickers">Inline color pickers</h3>
|
||
<p>While it’s always been possible to see what kind of variable is assigned to an exported color in the inspector, some users have expressed a keen interest in allowing for this functionality within the script editor itself. This is because it would mean seeing what kind of color is represented by a variable without it needing to be exposed, as well as making it more intuitive at a glance as to what color a name or code corresponds to. <a href="https://github.com/dugramen">Koliur Rahman</a> has blessed us with this quality-of-life goodness, which adds an inline color picker <a href="https://github.com/godotengine/godot/pull/105724">GH-105724</a>. Now no matter where the color is declared, users will be able to immediately and intuitively know what is actually represented in a non-intrusive manner.</p>
|
||
<p><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/inline-color-picker.webp" alt="Inline color picker" /></p>
|
||
<h3 id="rendering-goodies">Rendering goodies</h3>
|
||
<p>The renderer got a fair amount of love this snapshot; not from any one PR, but rather a multitude of community members bringing some long-awaited features to light. <a href="https://github.com/RGDTAB">Raymond DiDonato</a> helped SMAA 1x make its transition from addon to fully-fledged engine feature (<a href="https://github.com/godotengine/godot/pull/102330">GH-102330</a>). <a href="https://github.com/LunaCapra">Capry</a> brings bent normal maps to further enhance specular occlusion and indirect lighting (<a href="https://github.com/godotengine/godot/pull/89988">GH-89988</a>). Our very own <a href="https://github.com/clayjohn">Clay John</a> converted our Compatibility backend to use a fragment shader copy instead of a blit copy, working around common sample rate issues on mobile devices (<a href="https://github.com/godotengine/godot/pull/106267">GH-106267</a>). More technical information on these rendering changes can be found in their associated PRs.</p>
|
||
<p><strong>SMAA comparison:</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th style="text-align: center">Off</th>
|
||
<th style="text-align: center">On</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/smaa-off-1.webp" alt="SMAA off 1" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/smaa-on-1.webp" alt="SMAA on 1" width="350" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/smaa-off-2.webp" alt="SMAA off 2" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/smaa-on-2.webp" alt="SMAA on 2" width="350" /></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><strong>Bent normal map comparison:</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th style="text-align: center">Before</th>
|
||
<th style="text-align: center">After</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/bent-normals-before-1.webp" alt="Bent normals before 1" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/bent-normals-after-1.webp" alt="Bent normals after 1" width="350" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/bent-normals-before-2.webp" alt="Bent normals before 2" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/bent-normals-after-2.webp" alt="Bent normals after 2" width="350" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/bent-normals-before-3.webp" alt="Bent normals before 3" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-5/bent-normals-after-3.webp" alt="Bent normals after 3" width="350" /></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: Add alphabetical sorting to Animation Player (<a href="https://github.com/godotengine/godot/pull/103584">GH-103584</a>).</li>
|
||
<li>Animation: Add animation filtering to animation editor (<a href="https://github.com/godotengine/godot/pull/103130">GH-103130</a>).</li>
|
||
<li>Audio: Implement seek operation for Theora video files, improve multi-channel audio resampling (<a href="https://github.com/godotengine/godot/pull/102360">GH-102360</a>).</li>
|
||
<li>Core: Add <code class="language-plaintext highlighter-rouge">--scene</code> command line argument (<a href="https://github.com/godotengine/godot/pull/105302">GH-105302</a>).</li>
|
||
<li>Core: Overhaul resource duplication (<a href="https://github.com/godotengine/godot/pull/100673">GH-100673</a>).</li>
|
||
<li>Core: Use Grisu2 algorithm in <code class="language-plaintext highlighter-rouge">String::num_scientific</code> to fix serializing (<a href="https://github.com/godotengine/godot/pull/98750">GH-98750</a>).</li>
|
||
<li>Editor: Add “Quick Load” button to <code class="language-plaintext highlighter-rouge">EditorResourcePicker</code> (<a href="https://github.com/godotengine/godot/pull/104490">GH-104490</a>).</li>
|
||
<li>Editor: Add <code class="language-plaintext highlighter-rouge">PROPERTY_HINT_INPUT_NAME</code> for use with <code class="language-plaintext highlighter-rouge">@export_custom</code> to allow using input actions (<a href="https://github.com/godotengine/godot/pull/96611">GH-96611</a>).</li>
|
||
<li>Editor: Add named <code class="language-plaintext highlighter-rouge">EditorScript</code>s to the command palette (<a href="https://github.com/godotengine/godot/pull/99318">GH-99318</a>).</li>
|
||
<li>GUI: Add file sort to FileDialog (<a href="https://github.com/godotengine/godot/pull/105723">GH-105723</a>).</li>
|
||
<li>I18n: Add translation preview in editor (<a href="https://github.com/godotengine/godot/pull/96921">GH-96921</a>).</li>
|
||
<li>Import: Add Channel Remap settings to <code class="language-plaintext highlighter-rouge">ResourceImporterTexture</code> (<a href="https://github.com/godotengine/godot/pull/99676">GH-99676</a>).</li>
|
||
<li>Physics: Improve performance with non-monitoring areas when using Jolt Physics (<a href="https://github.com/godotengine/godot/pull/106490">GH-106490</a>).</li>
|
||
<li>Porting: Android: Add export option for custom theme attributes (<a href="https://github.com/godotengine/godot/pull/106724">GH-106724</a>).</li>
|
||
<li>Porting: Android: Add support for 16 KB page sizes, update to NDK r28b (<a href="https://github.com/godotengine/godot/pull/106358">GH-106358</a>).</li>
|
||
<li>Porting: Android: Remove the <code class="language-plaintext highlighter-rouge">gradle_build/compress_native_libraries</code> export option (<a href="https://github.com/godotengine/godot/pull/106359">GH-106359</a>).</li>
|
||
<li>Porting: Web: Use actual <code class="language-plaintext highlighter-rouge">PThread</code> pool size for <code class="language-plaintext highlighter-rouge">get_default_thread_pool_size()</code> (<a href="https://github.com/godotengine/godot/pull/104458">GH-104458</a>).</li>
|
||
<li>Porting: Windows/macOS/Linux: Use SSE 4.2 as a baseline when compiling Godot (<a href="https://github.com/godotengine/godot/pull/59595">GH-59595</a>).</li>
|
||
<li>Rendering: Add new StandardMaterial properties to allow users to control FPS-style objects (hands, weapons, tools close to the camera) (<a href="https://github.com/godotengine/godot/pull/93142">GH-93142</a>).</li>
|
||
<li>Rendering: FTI - Optimize <code class="language-plaintext highlighter-rouge">SceneTree</code> traversal (<a href="https://github.com/godotengine/godot/pull/106244">GH-106244</a>).</li>
|
||
</ul>
|
||
<h2 id="changelog">Changelog</h2>
|
||
<p><strong>109 contributors</strong> submitted <strong>252 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5-dev5"><strong>interactive changelog</strong></a> for the complete list of changes since the previous 4.5-dev4 snapshot.</p>
|
||
<p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/64b09905c7b2877f8aef99d8b63e73e5d31acfb9"><code class="language-plaintext highlighter-rouge">64b09905c</code></a>.</p>
|
||
<h2 id="downloads">Downloads</h2>
|
||
<div class="card card-download">
|
||
<a class="card-download-link" href="/download/archive/4.5-dev5">
|
||
Download Godot 4.5 dev5
|
||
</a>
|
||
<div class="card-download-details">
|
||
<img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-5-dev-5.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://github.com/godotengine/godot-builds/releases/download/4.5-dev5/Godot_v4.5-dev5_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-dev5/Godot_v4.5-dev5_mono_linux_x86_64.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-dev5/Godot_v4.5-dev5_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-dev5/Godot_v4.5-dev5_mono_macos.universal.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-dev5/Godot_v4.5-dev5_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-dev5/Godot_v4.5-dev5_mono_win64.zip" 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-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>
|
||
<ul>
|
||
<li>Windows executables (both the editor and export templates) have been signed with an expired certificate. You may see warnings from Windows Defender’s SmartScreen when running this version, or outright be prevented from running the executables with a double-click (<a href="https://github.com/godotengine/godot/issues/106373">GH-106373</a>). Running Godot from the command line can circumvent this. We will soon have a renewed certificate which will be used for future builds.</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>.</p>
|
||
<p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>Dev snapshot: Godot 4.5 dev 4</title><link href="https://godotengine.org/article/dev-snapshot-godot-4-5-dev-4/"/><updated>2025-05-13T12:00:00+00:00</updated><id>https://godotengine.org/article/dev-snapshot-godot-4-5-dev-4/</id><summary>One post-GodotCon snapshot coming up!</summary><content type="html"><p>To everyone who ended up going to GodotCon this past week, we hope you had a safe journey home! For those of you that missed the fun, we’ve logged some of the highlights on the blog already—such as the long-awaited <a href="/article/live-from-godotcon-boston-web-dotnet-prototype/">web support for .NET</a>—with more to come later in the week. As always, we’ve recorded all of our GodotCon talks, and those shall be uploaded to our <a href="https://www.youtube.com/c/GodotEngineOfficial">YouTube channel</a> in a few weeks. With that now behind us, we can go full-steam ahead on our next development snapshot: 4.5 dev 4. Plenty of new features this time around, so feedback and bug reports from testing are once again strongly recommended.</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 <a href="https://editor.godotengine.org/releases/4.5.dev4/">try the <strong>Web editor</strong></a> or the <strong>Android editor</strong> 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://www.majorariatto.com/ambidextro"><strong>Ambidextro</strong></a>, <em>a precision-platformer where you must control two characters simultaneously, one with each hand. It is developed by <a href="https://www.majorariatto.com/">Majorariatto</a> (<a href="https://bsky.app/profile/alvamajo.com">Bluesky</a>, <a href="https://twitter.com/majorariatto">Twitter</a>). You can get the game on <a href="https://store.steampowered.com/app/3445580/Ambidextro/?curator_clanid=41324400">Steam</a>, <a href="https://www.nintendo.com/store/products/ambidextro-switch/">Nintendo Switch</a>, and <a href="https://www.xbox.com/games/store/ambidextro/9nk9bnkcbvj4">Xbox</a>.</em></p>
|
||
<h2 id="highlights">Highlights</h2>
|
||
<p>In case you missed them, see the <a href="/article/dev-snapshot-godot-4-5-dev-1/">4.5 dev 1</a>, <a href="/article/dev-snapshot-godot-4-5-dev-2/">4.5 dev 2</a>, and <a href="/article/dev-snapshot-godot-4-5-dev-3/">4.5 dev 3</a> release notes for an overview of some key features which were already in those snapshots, and are therefore still available for testing in dev 4.</p>
|
||
<h3 id="macos-embedded-window-support">macOS: Embedded window support</h3>
|
||
<p>After Windows and Linux users got to experience the benefits of embedding their windows in the editor, macOS users have understandably been expressing interest in the same coming to their platform. Easier said than done, as this feature is OS-specific and <em>very</em> low-level, so implementation requires someone both extremely knowledgeable in a niche area and actually owning the platform in question for proper testing. Thankfully, both of these qualifications were met by <a href="https://github.com/stuartcarnie">Stuart Carnie</a>, who was up to the task of integrating this behemoth in <a href="https://github.com/godotengine/godot/pull/105884">GH-105884</a>. The results should speak for themselves:</p>
|
||
<video autoplay="" loop="" muted="" playsinline="">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-dev-4/macos-embedded-window.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p>The macOS implementation works differently from the Windows and Linux implementations. Since macOS does not allow the kind of window manipulation that Windows and Linux use for game window embedding, macOS uses an inter-process communication approach where the framebuffer is sent from the game process (which performs off-screen rendering) to the editor window. Input events are also sent from the editor window to the game process. This approach is more complex, but is also more robust as it doesn’t rely on window management tricks that can fall apart in certain edge cases. This approach may be ported later to Windows/Linux in a future release, as it would help improve the reliability of game window embedding.</p>
|
||
<h3 id="move-3d-physics-interpolation-to-scenetree">Move 3D physics interpolation to <code class="language-plaintext highlighter-rouge">SceneTree</code></h3>
|
||
<p>The old design of the 3D interpolation system was fundamentally flawed, as it operated under the assumption that the scene side wouldn’t require access to interpolated transforms. This isn’t something that could’ve just been “patched in” either, thanks to the multithreaded design, command queue, and stalling. Lacking any sort of workaround, <a href="https://github.com/lawnjelly">lawnjelly</a> has taken a break from being the person responsible for 90% of 3.x code nowadays and <a href="https://github.com/godotengine/godot/pull/103685">forward-ported</a> a solution via <a href="https://github.com/godotengine/godot/pull/104269">GH-104269</a>. This addresses the problem by porting all logic to the <code class="language-plaintext highlighter-rouge">SceneTree</code>, while completely retaining the existing API!</p>
|
||
<video autoplay="" loop="" muted="" playsinline="">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-dev-4/3d-fti-scenetree.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<p>No changes are needed to existing projects to benefit from the new 3D physics interpolation architecture.</p>
|
||
<h3 id="export-variables-as-variant">Export variables as <code class="language-plaintext highlighter-rouge">Variant</code></h3>
|
||
<p>Despite both arrays and dictionaries technically supporting <code class="language-plaintext highlighter-rouge">Variant</code> values, this functionality was never actually exposed in isolation. That is: it was impossible to export a variable of type <code class="language-plaintext highlighter-rouge">Variant</code> directly. <a href="https://github.com/KoBeWi">Tomasz Chabora</a> found this limitation quite silly, so took to addressing this grave injustice with <a href="https://github.com/godotengine/godot/pull/89324">GH-89324</a>. Now users are granted extra flexibility with their exports, as the option is now available to change not only the variable, but the type itself.</p>
|
||
<video autoplay="" loop="" muted="" playsinline="">
|
||
<source src="/storage/blog/dev-snapshot-godot-4-5-dev-4/export-variant.mp4?1" type="video/mp4" />
|
||
</video>
|
||
<h3 id="stackable-outlines-on-label">Stackable outlines on <code class="language-plaintext highlighter-rouge">Label</code></h3>
|
||
<p>Have you ever been in the situation where you want to add fancy outline or shadow effects to your text, only to realize that you’re stuck with only one of each? Sure, you can double-up the amount of text objects directly atop one-another, but that’s cumbersome and doesn’t account for outlines affecting other outlines. There must be a better way! Well, thanks to the efforts of <a href="https://github.com/Delsin-Yu">Delsin-Yu</a>, users no longer have to struggle with this moral conundrum. Instead, they can simply take advantage of <a href="https://github.com/godotengine/godot/pull/104731">GH-104731</a> adding support for stacked layers of effects; no cumbersome workarounds required.</p>
|
||
<p><img src="/storage/blog/dev-snapshot-godot-4-5-dev-4/stacked-outlines.webp" alt="Stacked outlines" /></p>
|
||
<h3 id="specular-occlusion-from-ambient-light">Specular occlusion from ambient light</h3>
|
||
<p>Our renderer currently lacks a cheap option for specular occlusion, causing certain metallic/reflective materials to still receive reflections when they should be darkened/occluded. <a href="https://github.com/lander-vr">Lander</a> rectified this limitation in <a href="https://github.com/godotengine/godot/pull/106145">GH-106145</a>, where specular occlusion is added based on ambient light. As users might prefer the old visuals, this is now handled through a toggle in the project settings. The differences can be observed here:</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th style="text-align: center">Disabled</th>
|
||
<th style="text-align: center">Enabled</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-4/specular-disabled-1.webp" alt="Specular disabled 1" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-4/specular-enabled-1.webp" alt="Specular enabled 1" width="350" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-4/specular-disabled-2.webp" alt="Specular disabled 2" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-4/specular-enabled-2.webp" alt="Specular enabled 2" width="350" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-4/specular-disabled-3.webp" alt="Specular disabled 3" width="350" /></td>
|
||
<td style="text-align: center"><img src="/storage/blog/dev-snapshot-godot-4-5-dev-4/specular-enabled-3.webp" alt="Specular enabled 3" width="350" /></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>Core: Add <code class="language-plaintext highlighter-rouge">Node.get_orphan_node_ids</code>, edit <code class="language-plaintext highlighter-rouge">Node.print_orphan_nodes</code> (<a href="https://github.com/godotengine/godot/pull/83757">GH-83757</a>).</li>
|
||
<li>Core: Add compression level support to Zip module (<a href="https://github.com/godotengine/godot/pull/103283">GH-103283</a>).</li>
|
||
<li>Core: Fix for debugging typed dictionaries (<a href="https://github.com/godotengine/godot/pull/106170">GH-106170</a>).</li>
|
||
<li>Core: Print script backtrace in the crash handler (<a href="https://github.com/godotengine/godot/pull/105741">GH-105741</a>).</li>
|
||
<li>Editor: Add editor setting to collapse main menu into a <code class="language-plaintext highlighter-rouge">MenuButton</code> (<a href="https://github.com/godotengine/godot/pull/105944">GH-105944</a>).</li>
|
||
<li>Editor: Enable Auto Reload Scripts on External Change by default in the editor settings (<a href="https://github.com/godotengine/godot/pull/97148">GH-97148</a>).</li>
|
||
<li>GUI: Add drag zoom feature with CTRL+MiddleMouseButton (<a href="https://github.com/godotengine/godot/pull/105625">GH-105625</a>).</li>
|
||
<li>GUI: Add property to control showing the virtual keyboard on focus events (<a href="https://github.com/godotengine/godot/pull/106114">GH-106114</a>).</li>
|
||
<li>Import: Use libjpeg-turbo for improved jpg compatibility and speed (<a href="https://github.com/godotengine/godot/pull/104347">GH-104347</a>).</li>
|
||
<li>Network: mbedTLS: Fix concurrency issues with TLS (<a href="https://github.com/godotengine/godot/pull/106167">GH-106167</a>).</li>
|
||
<li>Particles: Overhaul the cull mask internals for Lights, Decals, and Particle Colliders (<a href="https://github.com/godotengine/godot/pull/102399">GH-102399</a>).</li>
|
||
<li>Porting: Android: Annual versions bump for the Android platform (<a href="https://github.com/godotengine/godot/pull/106152">GH-106152</a>).</li>
|
||
<li>Porting: Android: Bump the minimum supported SDK version to 24 (<a href="https://github.com/godotengine/godot/pull/106148">GH-106148</a>).</li>
|
||
<li>Porting: Wayland: Handle <code class="language-plaintext highlighter-rouge">fifo_v1</code> and clean up suspension logic (<a href="https://github.com/godotengine/godot/pull/101454">GH-101454</a>).</li>
|
||
<li>Rendering: Add Meshes to the Video RAM Profiler (<a href="https://github.com/godotengine/godot/pull/103238">GH-103238</a>).</li>
|
||
<li>Rendering: Allow moving meshes without motion vectors (<a href="https://github.com/godotengine/godot/pull/105437">GH-105437</a>).</li>
|
||
<li>Rendering: Forward+: Replace the current BRDF approximation with a DFG LUT and add multiscattering energy compensation (<a href="https://github.com/godotengine/godot/pull/103934">GH-103934</a>).</li>
|
||
<li>Rendering: FTI - Add custom interpolation for wheels (<a href="https://github.com/godotengine/godot/pull/105915">GH-105915</a>).</li>
|
||
<li>Shaders: Expose built-in region information (<a href="https://github.com/godotengine/godot/pull/90436">GH-90436</a>).</li>
|
||
</ul>
|
||
<h2 id="changelog">Changelog</h2>
|
||
<p><strong>105 contributors</strong> submitted <strong>261 fixes</strong> for this release. See our <a href="https://godotengine.github.io/godot-interactive-changelog/#4.5-dev4"><strong>interactive changelog</strong></a> for the complete list of changes since the previous 4.5-dev3 snapshot.</p>
|
||
<p>This release is built from commit <a href="https://github.com/godotengine/godot/commit/209a446e3657e6fd736b9b7589b94cbdaad2d854"><code class="language-plaintext highlighter-rouge">209a446e3</code></a>.</p>
|
||
<h2 id="downloads">Downloads</h2>
|
||
<div class="card card-download">
|
||
<a class="card-download-link" href="/download/archive/4.5-dev4">
|
||
Download Godot 4.5 dev4
|
||
</a>
|
||
<div class="card-download-details">
|
||
<img class="lightbox-ignore" src="/storage/blog/covers/dev-snapshot-godot-4-5-dev-4.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://github.com/godotengine/godot-builds/releases/download/4.5-dev4/Godot_v4.5-dev4_linux.x86_64.zip" class="btn btn-download btn-download-primary platform-linux">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-dev4/Godot_v4.5-dev4_mono_linux_x86_64.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-dev4/Godot_v4.5-dev4_macos.universal.zip" class="btn btn-download btn-download-primary platform-macos">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-dev4/Godot_v4.5-dev4_mono_macos.universal.zip" 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://github.com/godotengine/godot-builds/releases/download/4.5-dev4/Godot_v4.5-dev4_win64.exe.zip" class="btn btn-download btn-download-primary platform-windows">
|
||
<div class="download-title">
|
||
Standard
|
||
</div>
|
||
</a>
|
||
<a href="https://github.com/godotengine/godot-builds/releases/download/4.5-dev4/Godot_v4.5-dev4_mono_win64.zip" 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-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>
|
||
<ul>
|
||
<li>Windows executables (both the editor and export templates) have been signed with an expired certificate. You may see warnings from Windows Defender’s SmartScreen when running this version, or outright be prevented from running the executables with a double-click (<a href="https://github.com/godotengine/godot/issues/106373">GH-106373</a>). Running Godot from the command line can circumvent this. We will soon have a renewed certificate which will be used for future builds.</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>.</p>
|
||
<p><a class="btn" href="https://fund.godotengine.org/">Donate now</a></p></content><author><name>Thaddeus Crews</name></author><category term="Pre-release"/></entry><entry><title>Live from GodotCon Boston: Web .NET prototype</title><link href="https://godotengine.org/article/live-from-godotcon-boston-web-dotnet-prototype/"/><updated>2025-05-09T12:00:00+00:00</updated><id>https://godotengine.org/article/live-from-godotcon-boston-web-dotnet-prototype/</id><summary>We managed to do the impossible: we created a Godot-based prototype for the Web that runs .NET! Come and try it!</summary><content type="html"><style>
|
||
.godot-dotnet-web-link {
|
||
margin: 2em auto;
|
||
display: block;
|
||
width: max-content;
|
||
background-color: rgb(54, 137, 201);
|
||
text-decoration: none;
|
||
border-radius: 1em;
|
||
color: white;
|
||
padding: 1em;
|
||
box-shadow: var(--more-shadow);
|
||
}
|
||
blockquote {
|
||
font-size: 95%;
|
||
padding: 1em;
|
||
background-color: rgba(0, 0, 0, 0.03);
|
||
}
|
||
blockquote p, blockquote ul li {
|
||
font-style: italic;
|
||
}
|
||
blockquote p:first-child {
|
||
margin-top: 0;
|
||
}
|
||
blockquote p:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
</style>
|
||
<p>Hi there! I’m Adam Scott (<a href="https://github.com/adamscott">@adamscott on GitHub</a>), the Godot Engine Web team lead, live from the GodotCon Boston 2025!</p>
|
||
<p>On May 6, during my <a href="https://talks.godotengine.org/godotcon-us-2025/talk/UCLFXR/">State of Godot and the Web talk</a>, <a href="https://slides.com/scottmada/state-of-the-godot-and-the-web-2025/#/35/2">I revealed a world premiere</a> to the GodotCon attendees. It was something some thought impossible, and others were resigned to not seeing during their lifetime.</p>
|
||
<p><em>Please note that the VOD isn’t available yet. The link to the recording will be added to the article once available. Meanwhile, you can access <a href="https://slides.com/scottmada/state-of-the-godot-and-the-web-2025">the slides of the presentation</a>.</em></p>
|
||
<p>The .NET team lead, Raul Santos (<a href="https://github.com/raulsntos">@raulsntos on GitHub</a>), managed to create a prototype running C# on the Web.</p>
|
||
<div>
|
||
<a href="https://lab.godotengine.org/godot-dotnet-web/" class="godot-dotnet-web-link" target="_blank">
|
||
<span>Click here to see the prototype!</span>
|
||
</a>
|
||
</div>
|
||
<h2 id="wasnt-it-impossible">Wasn’t it impossible?</h2>
|
||
<p>We tried <code class="language-plaintext highlighter-rouge">dotnet.js</code>. <a href="https://github.com/godotengine/godot/issues/70796#issuecomment-2524834258">It didn’t work.</a></p>
|
||
<p>We tried NativeAOT-LLVM. <a href="https://github.com/godotengine/godot/issues/70796#issuecomment-2524834258">It didn’t work.</a></p>
|
||
<p>We (initially) tried statically linking Mono. <a href="https://github.com/godotengine/godot/issues/70796#issuecomment-2524834258">It didn’t work.</a></p>
|
||
<p>Well, Raul gave it another shot recently and managed to make it work. <a href="https://github.com/godotengine/godot/issues/70796#issuecomment-2855430724">Here’s how he explains his accomplishment.</a></p>
|
||
<blockquote>
|
||
<p>As mentioned in my last update, the option of statically linking Mono seemed the most promising so we went ahead with that.</p>
|
||
<p>I have opened a draft PR with the latest changes, but keep in mind it’s still a work in progress:</p>
|
||
<ul>
|
||
<li><a href="https://github.com/godotengine/godot/pull/106125">[.NET] Add web export support #106125</a></li>
|
||
</ul>
|
||
<p>As a reminder, this approach still seems very brittle to me and has some limitations. The C# project must match the WASM features supported by the Godot template (this includes things like the threading model, exception handling, SIMD support, etc.). The TargetFramework version of the C# project must also match the one that was used to build the template.</p>
|
||
<p>Additionally, since we currently don’t load any globalization data, we only support invariant mode. This is not a big problem because most users will likely rely on Godot’s localization features, so it’s not a blocker.</p>
|
||
<p>On the last update the issue we run into was retrieving function pointers. We were able to workaround that by declaring stub C# methods on the project we use to retrieve the Mono runtime. When building the Godot templates, this ensures these methods are included in the generated table which seems to be enough to let us retrieve the function pointer at runtime.</p>
|
||
<p>In a regular C# application built for the web platform you’d use dotnet.js which acts as a loader for the WASM file and other required assets. In Godot we have our own way of doing this, and as a result we’re currently missing a key part of the process.</p>
|
||
<p>The Mono runtime exports some JavaScript functions but at the time of building the templates these are stubs. The dotnet.js loader takes care of replacing these stubs with their real implementation in dotnet.runtime.js. We’re currently missing this step so they remain stubs.</p>
|
||
<p>This means some .NET APIs that rely on these exported JavaScript functions will not work, resulting in unexpected behavior. This includes things that must be implemented using browser APIs such as cryptography.</p>
|
||
<p>Nonetheless, I think this is significant progress and has allowed us to build a demo running on the browser.</p>
|
||
</blockquote>
|
||
<h2 id="whats-next-for-cnet-on-the-web">What’s next for C#/.NET on the Web</h2>
|
||
<p>Raul has published <a href="https://github.com/godotengine/godot/pull/106125">his pull request</a> as a draft so far. It means that there’s a lot of work and testing to do.</p>
|
||
<p>We’re working as fast as we can to enable you to export C#/.NET to the Web, but we cannot commit to a specific timeline yet. If everything works great, it should be available in the next Godot release.</p>
|
||
<h3 id="what-about-file-size-my-pck-size-has-exploded">What about file size? My <code class="language-plaintext highlighter-rouge">.pck</code> size has exploded!</h3>
|
||
<p>Currently, we do have to include some <code class="language-plaintext highlighter-rouge">.dll</code> files in your main <code class="language-plaintext highlighter-rouge">.pck</code> file in order to be able to run a C# project. For the simple prototype, the <code class="language-plaintext highlighter-rouge">.pck</code> file size is at an astounding 72 MiB. Fortunately, when Brotli-compressed, the file can be reduced to 23.8 MiB.</p>
|
||
<p>It’s not perfect, as we often suggest targeting the smallest size when deploying to the Web. But the following announcement should help at least somewhat concerning this issue.</p>
|
||
<h2 id="introducing-built-in-precompression">Introducing built-in (pre)compression</h2>
|
||
<p><a href="https://slides.com/scottmada/state-of-the-godot-and-the-web-2025/#/41">I also revealed</a> my upcoming built-in (pre)compression PR to the public.</p>
|
||
<p>It will do the following:</p>
|
||
<ul>
|
||
<li>add an option to compress template files when compiling the engine</li>
|
||
<li>add export options to compress exported files</li>
|
||
<li>if the target server doesn’t support serving pre-compiled files, the preloading script will take over as a fallback, ensuring to download compressed files instead of non-compressed ones in order to save bandwidth.</li>
|
||
</ul>
|
||
<h2 id="the-future-is-bright">The future is bright</h2>
|
||
<p>C#/.NET support on the Web and file compression are two important features that will come to the platform. These features will push the limits of what can be done by Godot users on the Web. I do hope that you are as excited as we are!</p></content><author><name>Adam Scott</name></author><category term="Events"/><category term="Progress Report"/></entry><entry><title>Godot Showcase - Somar</title><link href="https://godotengine.org/article/godot-showcase-somar/"/><updated>2025-05-02T15:00:00+00:00</updated><id>https://godotengine.org/article/godot-showcase-somar/</id><summary>We interviewed Frédéric Plourde from Collabora and Daniel Castellanos from Decasis about the Somar project.</summary><content type="html"><style>
|
||
.fred {
|
||
color: #aa77e2;
|
||
}
|
||
.daniel {
|
||
color: #40b99f;
|
||
}
|
||
</style>
|
||
<p>Today we present a showcase that is a little different. We interviewed Frédéric Plourde and Daniel Castellanos who used Godot to create an educational XR experience for <a href="https://somarbio.pt/">SOMAR</a>, a non-profit association focusing on the conservation of marine life in the Algarve.</p>
|
||
<p>Frédéric Plourde is the XR Lead at Collabora where he drives AR/VR strategy, business development, and open-source innovation, leading a team of talented engineers working on XR customer projects and Monado, the cross-platform open-source OpenXR runtime. He is also Vice Outreach Officer at the Khronos Group where he promotes the OpenXR standard, fosters industry collaboration, and advocates for open and interoperable XR solutions. In the SOMAR project, Frédéric took on a technical leadership role, overviewing the development of an immersive XR experience and leading Collabora’s efforts toward developing a Cardboard driver for Monado.</p>
|
||
<p>Daniel Castellanos is the owner of Decacis Studio, and was contracted by Collabora to work mainly as a programmer/developer on the SOMAR project.</p>
|
||
<iframe width="512" height="512" style="width: 100%; height: 100%; aspect-ratio: 16/9;" src="https://www.youtube.com/embed/JqeOwLQ4wGs" title="The Somar Project" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
|
||
<h3 id="can-you-tell-us-a-little-more-about-the-non-profit-organisation-behind-the-somar-project-who-they-are-and-what-their-mission-is">Can you tell us a little more about the non-profit organisation behind the SOMAR project, who they are and what their mission is?</h3>
|
||
<p><strong class="fred">Fred:</strong> SOMAR is a non-profit organization that focuses on protecting dolphins, whales, and marine life in the Algarve. Their mission is to raise awareness about the impact of human activities—like underwater noise pollution—on marine ecosystems. By combining scientific research, education, and innovative technology, SOMAR promotes sustainable practices and works to preserve the region’s ocean biodiversity for future generations.</p>
|
||
<h3 id="can-you-tell-us-a-bit-about-the-xr-experience-you-have-created-and-what-you-set-out-to-achieve">Can you tell us a bit about the XR experience you have created, and what you set out to achieve?</h3>
|
||
<p><strong class="fred">Fred:</strong> The XR experience developed for the SOMAR project was designed to provide an immersive, educational tool to raise awareness about the impact of underwater noise pollution on marine life. By immersing users in realistic coastal and offshore environments of the Algarve, the experience showcases the effects of noise from tourist boats, particularly whale and dolphin-watching activities. Users can witness firsthand how these essential marine mammals are disrupted in their communication and hunting activities, gaining a deeper understanding of the challenges they face. Through this interactive experience, we aimed to engage users emotionally and inform them about the urgent need for conservation efforts to protect these creatures and their habitats.</p>
|
||
<p><img alt="SOMAR selection menu" src="/storage/blog/godot-xr/somar-showcase/somar-selection-menu.webp" /></p>
|
||
<h3 id="i-understand-the-project-is-focused-on-being-deployed-in-museums-and-in-classrooms-in-portugal-can-you-tell-us-more-about-how-this-works">I understand the project is focused on being deployed in museums and in classrooms in Portugal. Can you tell us more about how this works?</h3>
|
||
<p><strong class="fred">Fred:</strong> The SOMAR project was designed with flexibility in mind and offers content in both English and Portuguese through Godot’s built-in localization functionality. Built on OpenXR, the project benefits from a standardized framework that simplifies deployment across multiple devices, allowing us to target both museums and classrooms across Portugal. In museums and institutional venues, the Meta Quest version of the XR experience offers a high-fidelity, immersive experience with detailed visuals, allowing visitors to explore the application in a captivating, educational environment. Meanwhile, the PhoneXR version, optimized for accessibility, is intended for use in classrooms, where students can experience the same core content through low-cost <a href="https://arvr.google.com/cardboard/">Google Cardboard</a>-type phone holders. By running the open-source cross-platform OpenXR runtime <a href="https://monado.dev/">Monado</a> on those phones, this version is designed to be more accessible and straightforward, making it possible for kids to dive into XR for the first time, all while learning about conservation in an interactive way. This dual deployment strategy ensures that the SOMAR project can reach diverse audiences, from the general public to younger generations, fostering environmental awareness across different settings.</p>
|
||
<h3 id="will-the-experience-be-available-to-play-by-the-general-public-and-if-so-where-can-they-find-it">Will the experience be available to play by the general public and if so, where can they find it?</h3>
|
||
<p><strong class="fred">Fred:</strong> Yes — the SOMAR experience is now available for everyone to explore! 🐬 Dive into our open-source XR project and discover the impact of underwater noise pollution on marine life. You can download and try it out for free on <a href="https://somar-project.itch.io/somar-project">SOMAR’s official itch.io page</a>.</p>
|
||
<p><img alt="SOMAR whale" src="/storage/blog/godot-xr/somar-showcase/somar-whale.webp" /></p>
|
||
<h3 id="what-were-your-main-considerations-in-choosing-godot-as-the-xr-platform-to-create-this-experience">What were your main considerations in choosing Godot as the XR platform to create this experience?</h3>
|
||
<p><strong class="fred">Fred:</strong> One of the main considerations for selecting Godot as the game engine for this project was finding an open-source engine that could provide flexibility, scalability, and a strong support community. Godot stood out for its robust 3D capabilities, ease of use, and ability to run on multiple platforms. Godot’s open-source nature felt like a perfect match for the Monado-driven experience and our collaboration with a non-profit as part of Collabora’s 1% for the Planet initiative, reinforcing our commitment to both innovation and social impact. Additionally, Godot’s growing reputation within the XR and gaming communities, coupled with its ongoing OpenXR development via a <a href="https://www.khronos.org/rfp/godot-integration">Khronos-funded project</a>, gave us confidence in its future-proof capabilities, ensuring that the SOMAR project could evolve and expand over time.</p>
|
||
<h3 id="what-was-the-most-enjoyable-part-of-using-godot">What was the most enjoyable part of using Godot?</h3>
|
||
<p><strong class="daniel">Daniel:</strong> I’ve been using Godot for a few years now, and the most enjoyable part of it for me is being able to iterate quickly. Throughout its development, the project experienced numerous revisions, but implementing these changes was generally straightforward and quick.</p>
|
||
<h3 id="what-was-the-most-difficult-issue-to-overcome">What was the most difficult issue to overcome?</h3>
|
||
<p><strong class="daniel">Daniel:</strong> Having a balance between creating the most realistic or immersive experience possible while having to keep the experience performant on mobile devices apart from the Quest.</p>
|
||
<h3 id="did-you-use-any-existing-toolkitsplugins-in-developing-this-experience-and-what-was-the-motivation-behind-choosing-these-or-building-your-own-solution">Did you use any existing toolkits/plugins in developing this experience and what was the motivation behind choosing these or building your own solution?</h3>
|
||
<p><strong class="daniel">Daniel:</strong> Not really! The project doesn’t feature movement, and user input is limited, so building a custom solution was not a problem. Furthermore, keeping the project as simple as possible was one of my goals, both to prevent bugs and keep the code clean and easy to understand.</p>
|
||
<p><img alt="SOMAR boats and dolphins" src="/storage/blog/godot-xr/somar-showcase/somar-boats-dolphins.webp" /></p>
|
||
<h3 id="what-would-you-like-to-see-evolve-within-godots-xr-support-that-would-have-made-building-this-project-easier">What would you like to see evolve within Godot’s XR support that would have made building this project easier?</h3>
|
||
<p><strong class="daniel">Daniel:</strong> There was a single bug or unexpected behavior that I found during development, but nothing that couldn’t be worked around. For this project, I believe Godot was the right choice and made things as easy as they could be.</p>
|
||
<h3 id="i-understand-the-project-currently-targets-the-meta-quest-headsets-what-motivated-this-choice">I understand the project currently targets the Meta Quest headsets. What motivated this choice?</h3>
|
||
<p><strong class="fred">Fred:</strong> The Meta Quest headset was chosen for the SOMAR project due to its strong popularity, excellent performance, and ease of use. As a standalone device, the Quest 3 delivers high-quality visuals and immersive experiences without needing a PC or external sensors, making it ideal for both museum venues and broader accessibility. Its widespread presence in the XR market ensures compatibility with future updates, allowing us to reach a wide audience while providing a seamless and engaging experience.</p>
|
||
<h3 id="how-was-the-experience-of-using-godot-with-the-meta-quest">How was the experience of using Godot with the Meta Quest?</h3>
|
||
<p><strong class="daniel">Daniel:</strong> Awesome! I used Meta Quest Link for most of the development to quickly test things, but every once in a while I deployed the project directly into the Meta Quest to measure performance. Fun fact: the project uses the Khronos OpenXR runtime, and it worked flawlessly first time.</p>
|
||
<h3 id="i-also-understand-the-project-is-also-capable-of-using-the-monado-openxr-runtime-can-you-tell-me-a-bit-more-about-the-motivation-and-goals-of-this-port">I also understand the project is also capable of using the Monado OpenXR runtime. Can you tell me a bit more about the motivation and goals of this port?</h3>
|
||
<p><strong class="fred">Fred:</strong> The motivation behind also targeting the Monado OpenXR runtime was to ensure broader accessibility and compatibility across different platforms, particularly for low-cost, phone-based VR systems. Monado’s open-source nature aligns with our goal of creating a flexible, cost-effective solution that’s not reliant on proprietary ecosystems. For this project, Collabora dedicated engineering resources to develop a new Monado Cardboard driver, which enables the experience to run on Android phones with Cardboard VR headsets, making the immersive content accessible to a wider audience, including kids and students. This port reinforces our commitment to open standards, allowing for future enhancements and maintaining the project’s long-term sustainability.
|
||
You can find the code for that driver on the <a href="https://gitlab.freedesktop.org/bl4ckb0ne/monado/-/tree/cardboard-sdk">freedesktop.org GitLab</a>. It will be upstreamed soon.</p>
|
||
<h3 id="fred-specifically-for-you-can-you-give-us-a-synopsis-of-what-monado-is-and-your-perspective-on-the-combination-of-using-godot-with-monado">Fred, specifically for you, can you give us a synopsis of what Monado is and your perspective on the combination of using Godot with Monado?</h3>
|
||
<p><strong class="fred">Fred:</strong> <a href="https://monado.dev/">Monado</a> is an open-source, cross-platform OpenXR runtime designed to provide the fundamental building blocks for XR device vendors and developers. By offering compatibility with major platforms like Linux, Windows, and Android, Monado serves as a versatile foundation for creating and deploying XR applications. Combining Monado with Godot, an open-source game engine, creates a powerful synergy. Godot’s flexibility, combined with Monado’s OpenXR support, enables both the simplicity of Godot’s development environment and the vast compatibility of Monado’s runtime.</p>
|
||
<p><img alt="SOMAR info panels" src="/storage/blog/godot-xr/somar-showcase/somar-info-panels.webp" /></p>
|
||
<h3 id="are-there-any-plans-to-bring-this-project-to-other-vr-headsets">Are there any plans to bring this project to other VR headsets?</h3>
|
||
<p><strong class="fred">Fred:</strong> Yep, we’re currently testing the SOMAR application on other platforms and devices. Since Monado is built on OpenXR, it’s designed to be highly adaptable and should be able to run on many other platforms and devices with minimal effort. However, as an open-source project, the real strength lies in the community. While we continue to extend support for more headsets, we encourage developers and enthusiasts to contribute to the project and help expand its reach even further. The open-source nature of Monado makes it easy for anyone to pitch in and bring support to new platforms, creating a collaborative and growing ecosystem.</p>
|
||
<h3 id="whats-next-for-you-anything-interesting-on-the-horizon">What’s next for you, anything interesting on the horizon?</h3>
|
||
<p><strong class="daniel">Daniel:</strong> Sure. I’m currently working on my next game: <a href="https://stellar.decacis.com/">Stellar Checkpoint</a>, which will be available in both VR and desktop/flat modes. It should come out later this year, so stay tuned!</p>
|
||
<h3 id="finally-is-there-any-advice-youd-like-to-share-especially-to-someone-considering-using-godot-for-their-next-xr-project">Finally, is there any advice you’d like to share especially to someone considering using Godot for their next XR project?</h3>
|
||
<p><strong class="fred">Fred:</strong> Absolutely! One of the most exciting things about using Godot for XR projects is the incredible community that surrounds it. Godot has such a passionate and supportive group of developers, artists, and creators, and it’s all accessible through platforms like <a href="https://discord.com/invite/godotengine">the Godot Discord</a>. If you’re just getting started with XR in Godot, I highly recommend joining the Discord first.</p>
|
||
<p><strong class="daniel">Daniel:</strong> Just try it. Read the official documentation, place a couple of cubes as hands and experience how easy it is to get started! And if you get stuck, there is always someone from the community willing to help. Godot scales really well, and it works for both simple and complex projects, and best of all, being open-source means you can extend it to fit your needs.</p>
|
||
<h3 id="some-extra-information-about-the-organisations-involved">Some extra information about the organisations involved</h3>
|
||
<p><a href="https://www.collabora.com/">Collabora</a> is a global consultancy specializing in delivering the benefits of open-source software to the commercial world. Whether it’s the Linux kernel, graphics, multimedia, machine learning or XR, Collabora’s expertise spans across all key areas of open-source software development. By harnessing the potential of community-driven open-source projects, and re-using existing components, Collabora helps its clients reduce time to market and focus on creating product differentiation. To learn more, please visit <a href="https://www.collabora.com/">collabora.com</a>.</p>
|
||
<p><a href="https://decacis.com/">Decasis studio</a> is an independent development studio run by Daniel Castellanos.</p>
|
||
<p><a href="https://somarbio.pt/">SOMAR</a> is a non-profit association founded in 2020, dedicated to the conservation of the Algarve’s dolphins, whales, and broader marine life. With a focus on protecting the oceans, SOMAR operates through a variety of initiatives aimed at safeguarding the region’s rich biodiversity. The organization is driven by its commitment to raise awareness about the negative impacts of human activities, such as underwater noise pollution, on marine fauna. By combining scientific research, environmental education, and innovative technologies, SOMAR seeks to promote sustainable practices and inspire collective action to preserve the natural marine ecosystems of the Algarve for future generations.</p>
|
||
<p><img alt="SOMAR orca" src="/storage/blog/godot-xr/somar-showcase/somar-orca.webp" /></p></content><author><name>Bastiaan Olij</name></author><category term="Showcase"/></entry></feed> |