Dev Planet

Avatar photo

RSS feed aggregator for FOSS game development.

Godot Showcase – Xogot: Godot for iPad & iPhone

We’re happy to showcase a project that released last year, but was long in the making. The folks at Xibbon have been working hard to port the Godot Engine to the iOS platforms. Not only did they port the editor to make it run on iOS, they successfully interfaced the editor with a custom iOS interface in order to make the engine match Apple strict UI and UX guidelines. Using their app on the iPad and iPhone feels totally native, because it is!

Xibbon has been active in our community, in terms of code contributions and events. Xibbon has been our sponsor at events, such as the first GodotCon in the US!

Today, Miguel de Icaza, known for starting the GNOME, Mono, and Xamarin projects, is sharing with us his experience developing his iOS app.


Can you tell us a little bit about your project?

Screenshot of Xogot running on an iPad.

Xogot brings the Godot Editor to the iPad and the iPhone as a native iOS application.

Xogot uses the Godot Editor and the Godot Engine, but we provide an alternative user interface and shell that is built on top of Apple’s native user interface elements. We tuned the user experience to be both touch friendly and to work with the more limited screen space on these devices.

By being a new user interface on top of the existing Godot Editor, we remain compatible with the desktop Godot and users can move seamlessly between the platforms, but we also wanted to make a product that truly belonged on the iPad, not merely running the desktop experience on the iPad.

While I am an engineer, the joy that I derive from using creative apps on the iPad is unmatched.

Interacting with the world with our fingers is one of the earliest skills that we acquire as babies – and I find the physical feedback of using touch user interfaces to be very rewarding. Not only do I spend hours playing with my iPad, I also love watching creators use their iPads for sketching, drawing, modeling, composing, editing videos, and building games.

Why did you want to build Xogot?

Xogot is very much a labor of love, the result of a perfect storm of conditions and a way of expanding our own horizons and getting out of our comfort zone.

We have worked on the mobile world for almost fourteen years, and built developer tools for helping .NET developers target mobile platforms. Mostly building IDEs and tools and supporting others on their adventures to bring software to users (among those, funding the early effort to bring .NET to Godot).

We wanted to get out of our comfort zone, and build an end-user product that followed the ethos of iOS developers that obsess over highly polished apps. Products that obsess over the details of the user experience and strive to create delightful user interfaces.

For almost sixteen years we have helped folks in the game industry adopt .NET for game development, and we supported various games, engines, and hardware vendors with their efforts to bring our compilers and tools to their systems. Just like we were inspired by the iOS community, we are inspired by the game developer community – people pouring their hearts out exploring ways of entertaining and surprising us, and we wanted to get closer to this joyful world.

Lastly, we all witnessed a major turning point in the game-engine industry when Unity’s leadership made decisions that shook developer trust across the community. We watched as the industry rushed to find alternatives – and being emotionally invested already in Godot, we were very much in the camp “How can we give the Godot community an edge?”.

What was challenging about bringing the Godot Editor to the iPad and iPhone?

Screenshot of Xogot running on an iPhone.

This is the poster child of a slippery slope, or an extreme case of Yak Shaving.

There are three buckets of challenges:

  • Multi-process
  • User experience
  • Embedding

At first, we figured “How hard could it be to get Godot on the iPad?” and it turned out that running Godot on iPad was quite simple, but comes with some strings attached. The first thing you have to deal with is that the Godot workflow uses three processes: the home screen that creates new fresh Godot Editors on demand, the Godot Editor itself, and every time you press “play”, a new and fresh instance of Godot.

The challenge is that iPadOS does not really support the above model where you get a fresh new process for each step, instead you get a single process and you get to live there. Without being able to launch a new project, Godot would have worked, but would not have been very interesting to people.

We first experimented with a proof of concept which was to reset the state of Godot to one of a fresh process. That worked, and it allowed us to edit one game, and then edit a second one. We called this the “reset state” effort. That was still not quite useful. The second stage was to make the editor run a child process, and for that what we did was to “virtualize” every single global variable in Godot, so we could run multiple instances simultaneously. That turned out to work great, but it relied on a very manual process of editing a very large chunk of Godot to remove every access to globals and static variables. We later invested in a clang-based rewriter that would take an existing Godot codebase and produce a virtualized Godot on demand. This is what we are based on now.

With the above system we could open multiple projects, but also start and stop the game under development over and over. So we were now cooking with gas. One last component was not just to launch separate instances of Godot, but having those run side-by-side, which was necessary to implement debugging over a “virtual” process that happened to be running on your same address space.

We took the limitations of the platform as a fun challenge to solve, and I am incredibly proud of the result.

That was a very satisfying technical problem to solve, but it did not lend itself to a great iPad experience. Godot is designed for a desktop computer where you have a lot of space, and you can easily aim your mouse at small user interface elements. On the iPad and iPhone, Apple recommends that elements are at least 44 points in size for users to be able to interact with them comfortably. In fact, every time I thought I could get away “just this time” with a smaller user interface, I found out the hard way that neither our users nor myself could tap it. We repeatedly learned that lesson.

44 points.

It is now hanging on a printed piece of paper next to my desk, so I do not forget.

But even if we resized the controls, the user interface did not feel good on the iPad. Godot was clearly intended to be used with a mouse and a keyboard, so we set out to solve the most problematic areas for our users. Some were mechanical, like “make this button larger” or “display this elsewhere”, but some were more philosophical. In my previous experience with the GNOME desktop, we pursued a path similar to Godot. That is, we tried to deliver a user interface, but whenever there were disagreements about the intended behavior, rather than making an editorial or design decision, we offered a choice. Or three. Or four. Or five, or as many choices as there were opinions.

Offering choices sounds great on paper, but is terrible in practice. Options can paralyze users, but each option forces you to test two codepaths – and that is if you are lucky, if you have options that interact with other options. Now you have to test combinations of those features, and so on. And then you get to document all these combinations.

We wanted an application that lived up to the ethos of great iOS applications. We felt that we had to act as editors and make design choices that surfaced the right defaults, and we opted to only surface what we felt was necessary.

Overall, I think that we did a pretty good job, but every once in a while, our users would complain and make a case for why they really needed an option. So, in those cases, we have brought back a level of configuration or re-surfaced elements that were previously not shown.

Our design process was documented in our blog, and you can see our process and some of the iterations on the concepts over time.

We initially thought we would only touch on a couple of pieces, the scene pad, the file pad – and over time we found ourselves rewriting almost all of the user interface in Godot, both because it felt so much better, but also as users struggled with different parts of the UI. This is a process that has been both extensive, but also quite enjoyable – as SwiftUI has made this a delightful exercise.

At first, we just layered a new UI on top of the Godot Editor, and we customized Godot to show fewer UI elements when running. This served us well for a while, but at some point we found ourselves needing to “host” parts of the Godot UI in SwiftUI views that we controlled, like the bottom bar panels, the plugins that render inside the inspector, as well as having a fallback for custom Godot user interface code – and for that we used a system that allows us to “rehost” parts of the Godot UI – but having this was important to fully take control of the user experience, while ensuring that everything you need to work with Godot was still there.

Adapting Godot from a desktop application into a pleasant, touch-first, iPad application was a lot of work, and we were convinced there was no more shrinking or adjusting in our future. But even during the beta period before we launched the iPad version, our testers kept asking us for an iPhone version. We were not convinced that this was necessary, but our users kept telling us all the reasons why they would want this – tuning their apps, experimenting on the go, testing an idea during small breaks, adjusting some properties of their game during their bus or train ride or during their lunch breaks.

But there is a big gap between what people tell you they want and what they are actually going to do, so we remained skeptical for a long time. The first time we reconsidered this was when we heard a presentation from Chad Stewart on using Godot on Android where he shared his real-life experiences doing his work on the go. Then the Godot foundation shared information about usage of Godot on Android, on phones and tablets – and it was then that we grasped that for some folks their phone is their sole computing device. So not only was this possible, for some folks it was a necessity.

So, delivering the full Godot Editor on iPad and iPhone has meant more than just porting a desktop app. To meet App Store requirements and match Apple users’ expectations, we rebuilt the interface to be truly native and touch-first – something that feels at home on touch devices rather than adapted for it.
Xogot has been a multi-year effort and a significant engineering investment. It’s a commercial product created by a small team deeply passionate about both Godot and Apple platforms. Xogot includes a free tier open to everyone, with the complete version provided at no cost to students and contributors to the Godot open-source project.

What are the biggest differences between the Xogot and the Godot Editor?

Xogot has two major limitations. First, it can not run third-party plugins authored in native code, or run .NET code. The reason for the former is that Apple’s security system does not allow for third-party dynamic code to be loaded into a process, so all of these plugins fail.

And the ability to run .NET code is not something we have worked on.

Considering the improvements made to adapt to the new form factor, are there any plans on bringing Xogot to other platforms?

By default, when launching the game from the Xogot Editor, the game launches in a split screen.

We want to bring Xogot to the Apple Vision Pro. Anecdotally, just before we decided to embark on bringing Godot to the iPad, we were working on building frameworks and games for the Vision Pro. We were going to our first Boston Unity meeting to learn more about Unity and Vision when the Boston Unity group disbanded in response to Unity’s license changes. It was in this turmoil that we were inspired to jump headlong into the Godot world.

The idea of building and testing immersive experiences directly inside the headset feels like a natural extension of what we have done so far – creating something with your hands, right in front of you, makes the process feel immediate and physical. But like the iPad effort, there are a number of very interesting problems to solve there before we can ship a product that would meet the expectations of users, so we are going to have to work through those.

We don’t currently have plans to bring Xogot to non-Apple platforms. Our focus right now is on delivering the best possible experience on iPhone and iPad, and continuing to refine what it means to build games natively on Apple’s devices. So you will see us iterating on the experience and incorporating user feedback until we can score ourselves one of those Apple Design Awards.

That said, Godot already runs on many platforms, and we see Xogot as part of that larger ecosystem. For now, our aim is to deliver a great experience to game developers on the Apple platforms, and to maintain a high level of compatibility with Godot so that both environments can complement each other.

Were there some improvements made in Xogot that made it upstream?

Our biggest contribution so far has been the LibGodot effort, which is a major investment we’ve been funding with the development work led by Migeran. LibGodot makes it possible to embed Godot inside modern applications, and Migeran is now in the process of getting it upstreamed so it can benefit the broader community.

We’ve also contributed a number of smaller patches and fixes, and we’re continuing to learn what it takes to shepherd contributions through the review and merge process. Looking ahead, we expect to contribute larger components as well. We already have a few ideas in mind. But as we’re still relatively new to the game development community, we want those contributions to be shaped by what we learn as Xogot and its user base continue to grow.

I would love to participate more directly in Godot’s workgroups and community discussions. Balancing that with running a company and raising three kids can be challenging, but I have enormous respect for the dedication and care of the Godot team. My hope is that over time we can contribute not just code, but also ideas and processes that help strengthen the community.

What’s next for Xogot?

We’re especially excited about Xogot Connect, our new open-source Godot add-on that lets developers on Windows, Linux, or macOS easily run and debug their projects on iPhone or iPad without the usual complexity of exporting to iOS, building in Xcode, or managing provisioning profiles.

Our goal is to keep expanding that bridge between desktop and mobile development. Xogot Connect already makes it simple to configure on-screen controls in your game by enabling the iOS Virtual Controller in Project Settings, and we have a few more ideas like this in the works that bring the mobile-specific affordances we’ve developed for Xogot directly to Godot developers on the desktop and make targeting mobile smoother and more approachable.


I would like to thank Miguel de Icaza for sharing with us the experience of his ride of adapting the Godot Editor specifically for a new platform.

You can easily find Xogot in the App Store or at its homepage.

Also, don’t forget to check out Xogot Connect in the Godot Asset Library. (Expect it to be also in the upcoming Asset Store!)

Maintenance release: Godot 4.6.2

While the majority of our team continues to focus on development snapshots for Godot 4.7, we still have a commitment to maintenance releases for the latest stable version. Specifically, our release support policy promises active support until the successor’s first patch release, so there’s still room for yet more maintenance releases in the future. As for now, we’d like to thank everyone who took the time to evaluate and ratify our release candidates for Godot 4.6.2.

Maintenance releases are expected to be safe for an upgrade, but we recommend to always make backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss.

Please consider supporting the project financially, 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.

Download Godot 4.6.2 now or try the online version of the Godot editor.

Godot is downloading…

Godot exists thanks to donations from people like you. Help us continue our work:


Make a Donation

Close this popup

The cover illustration is from Bombun, a wholesome 3D platformer where you guide Bombun, a bomb-throwing bunny, on a mission to defend her floating fortress from a friend-turned-foe. You can buy the game on Steam, and follow the developer on Bluesky or itch.io.

Changes

61 contributors submitted 122 fixes for this release. See our interactive changelog for the complete list of changes since the 4.6.1-stable release.

  • 3D: Fix 3D focus selection for subgizmos (GH-116972).
  • 3D: Fix DirectionalLight3D property list (GH-117189).
  • Animation: Check playback_queue existance after emit animation_finished signal (GH-116676).
  • Animation: Deselect bezier keyframes when switching animations (GH-116953).
  • Animation: Fix timeline cursor following mouse during marker selection (GH-117634).
  • Animation: Fix visual shift of animation editor keys during selection (GH-117290).
  • Core: Fix String::split_ crash on empty string (GH-117353).
  • Core: Fix editable children state when duplicating instantiated nodes (GH-117041).
  • Core: RingBuffer: Fix T read() method reading empty buffer (GH-117388).
  • Core: RingBuffer: Fix overreading on methods that take an offset as an argument (GH-117151).
  • Editor: Fix build profile generator creating bogus profiles (GH-115410).
  • Editor: Fix mute button after pausing and stopping (GH-116537).
  • Editor: Fix theme item inspector tooltips for Window subclasses (GH-115245).
  • Editor: Set accessibility name on Tree inline cell editor when editing (GH-117135).
  • Editor: Stop autocomplete from eating words by default (GH-117464).
  • Export: Android Editor: Copy keystore to temp file during export (GH-116161).
  • GDExtension: Add missing GDVIRTUAL_BIND(_get_supported_extensions) on MovieWriter (GH-117479).
  • GUI: Fix “Custom” anchor preset being ignored if the parent isn’t a Control (GH-117488).
  • GUI: Fix RichTextLabel drag selection not working after double-click (GH-117201).
  • GUI: TextEdit: Fix clipping of last character due to right margin rounding (GH-116850).
  • GUI: TextServer: Ignore language of embedded object replacement spans when updating line breaks (GH-116197).
  • Import: Blender attempts should be incremented to avoid endless loop (GH-116589).
  • Physics: Jolt Physics: Make MoveKinematic more accurate when rotating a body by a very small angle (GH-115327).
  • Physics: Jolt Physics: Rework how gravity is applied to dynamic bodies to prevent energy increase on elastic collisions (GH-115305).
  • Physics: Jolt Physics: Swapping vertices of triangle if it is scaled inside out (GH-115089).
  • Platforms: Android: Fix FileAccess crash when using treeUri in Gradle-built apps (GH-117131).
  • Platforms: Fix macOS Steam time tracking lost when opening a project (GH-117335).
  • Platforms: iOS: Add UIScene lifecycle events (GH-116395).
  • Platforms: iOS: Propagate VC UI preferences to SwiftUI hosting controller (GH-116633).
  • Platforms: macOS: Enable wake for events if Magnet is running (GH-116524).
  • Platforms: Wayland: Improve mapping robustness and synchronization (GH-117385).
  • Platforms: Windows: Set current driver when ANGLE init fails (GH-117253).
  • Rendering: Apply fixed size properly for mono/stereo rendering (GH-115147).
  • Rendering: Fix accidental write-combined memory reads in canvas renderer (GH-115757).
  • Rendering: Fix Tangent decoding detection when computing vertex skinning (GH-117401).
  • Rendering: Fix viewport debanding not working with spatial scalers (GH-114890).
  • Rendering: macOS: Force ANGLE (GL over Metal) when running in VM (GH-117371).

This release is built from commit 001aa128b.

Known incompatibilities

As of now, there are no known incompatibilities with the previous Godot 4.6.1 release. We encourage all users to upgrade to 4.6.2.

If you experience any unexpected behavior change in your projects after upgrading to 4.6.2, please file an issue on GitHub.

Bug reports

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

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).

Support

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 generous donations from the Godot community. A big thank you to everyone who has contributed their time or their financial support to the project!

If you’d like to support the project financially and help us secure our future hires, you can do so using the Godot Development Fund.

Donate now

Castle Game Engine: PasDoc 1.0.0 release with with many features and fixes: modern HTML look, show source position, visibility of membes toggleable, show inherited members…

This a bit non-standard news post: I wanted to announce a new release of PasDoc, documentation generator we use to create Castle Game Engine API docs. PasDoc is a documentation generator for Pascal source code. Documentation is generated from comments found in the source code (or in special description files). We support many output formats, …

Dev snapshot: Godot 4.7 dev 3

Following hot on the heels of the last snapshot, the third development snapshot for what will become Godot 4.7 is now out! This snapshot comes packed with some long-awaited features, some of which may transform the way you design GUIs in Godot. As always, we need as much testing as possible to ensure everything can be stabilized.

Please consider supporting the project financially, 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.

Jump to the Downloads section, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the Web editor, the XR editor, or the Android editor for this release. If you are interested in the latter, please request to join our testing group to get access to pre-release builds.


The cover illustration is from Lucid Blocks, a game where you explore, build, and survive in a cryptic expanse oozing with dreamlike oddities and esoteric critters. You can buy the game on Steam, and follow the developers on Bluesky, YouTube, or Discord.

Highlights

GUI: Add transform offset to Control nodes

One of the most long-awaited features in Godot’s GUI system is to be able to translate, rotate, or scale a Control node without it affecting the rest of the container. This is most notably used for animation purposes, so that buttons can smoothly slide in view or fade away with a scale change.

However, Godot’s various Container nodes apply the position, rotation, and scale to their children, which means any changes made to the children’s transform is lost when the container is sorted again (which occurs when children are added, removed, or moved in the scene tree). The new transform offset properties implemented by Timo Schwarzer in GH-87081 aim to address this limitation in a self-contained manner, similar to the transform property in CSS.

Render transform properties in the inspector

You can choose whether the transform offset affects mouse input. By default, transform offset is purely visual, which means there is no risk of buttons losing their hover status after being transformed. Controls with a transform offset applied show their original bounding box with a gray dotted rectangle:

GUI: Implement search bar for PopupMenu

As a tool that can be used to create complex projects, Godot is no stranger to popups with dozens of options to choose from (if not more). While incremental search can be used to focus the first item that starts with a given letter (by pressing the letter in question), this can be difficult to use as incremental search lacks visible feedback once you perform it.

To resolve this longstanding usability quirk, Alexander Streng added search bars to PopupMenu in GH-114236. This is particularly useful for long lists such as animations, skeleton bones, inspector dropdowns for Resource properties, and more. A visible search bar also makes searching more discoverable, which is a win for usability.

This feature is available in any PopupMenu node, which means it can also be used in projects such as non-game applications.

Editor: Add vertex snapping to the 3D editor

One of the most keenly awaited features to improve 3D editor usability is finally here! Robert Yevdokimov implemented vertex snapping in the 3D editor in GH-117235. This allows you to snap the selection to nearby nodes’ vertices, which is useful for level design and ensuring everything is visually connected to neighboring nodes.

To use vertex snapping, hold B and move the mouse near the selection’s vertices. Once you see a yellow circle, hold the mouse button and move the mouse to the desired location (you can release B at this point). The circle becomes green once a vertex to snap to is detected near the mouse cursor. For better depth perception, the yellow/green circle appears with reduced opacity if it’s occluded by another surface.

Vertex snapping works differently depending on whether the selected node has a mesh-based representation or not. For example, MeshInstance3D and CSG nodes have a mesh-based representation, while other nodes such as Label3D and Marker3D do not. Nodes without a mesh-based representation will teleport to the highlighted vertex when holding B and clicking on another node’s vertex. Thanks to the follow-up contribution GH-117380, you can opt into this behavior for nodes that have a mesh-based representation too.

Editor: Use class name instead of Object ID in remote scene view

The remote scene tree is very useful to diagnose what’s going on in a running project. However, until now, everything was shown as a bunch of anonymous-looking Object IDs. Jayden Sipe has improved this view by adding class names in GH-115738, making this tool significantly more useful.

Before

Object ID shown in the remote inspector, without class name indication

After

Class names shown in the remote inspector, with object ID still visible

Editor: Create a proper editor for MeshLibrary

GridMap users rejoice! The MeshLibrary resource (which stores tiles that can be used in a GridMap node) can now be edited much more easily, thanks to the work of Michael Alexsander in GH-117376.

This new bottom editor comes with the following features:

  • Presentation of items in a grid, with search and zooming.
  • Editing of individual items in a separate inspector.
  • Full undo/redo for all actions.
  • Fallback preview to an item’s mesh in case none was specifically set.

Here’s an example of what it looks like:

New GridMap MeshLibrary editor

Android: Add support for picture-in-picture

Thanks to the work of Fredia Huya-Kouadio in GH-114505, Godot now has the ability to run a project and move it to a small window pinned to one of the screen corners. This relies on Android’s native support for picture-in-picture (PiP) display. For example, YouTube on Android uses this functionality to show the currently played video in a corner of the screen.

Note that picture-in-picture does not permit interacting with the application while it is in this mode, so this feature is most useful for applications and games that have sections that don’t require real-time input (idle games, autobattlers, etc.).

Picture-in-picture functionality can be enabled in two ways:

  • Explicitly by calling DisplayServer.pip_mode_enter().
  • Configured to happen automatically by calling DisplayServer.pip_mode_set_auto_enter_on_background(). In this case, the app will automatically go into picture-in-picture mode when the user presses the home button or uses the home gesture on their device.

As an example, since this ability can be toggled at runtime, you can allow picture-in-picture mode to engage when a cutscene starts and disable it when returning to interactive contents.

Here’s an example of it in action on the game Rift Riff, where PiP mode is only enabled during one of the game’s waves:

Android: Enable orientation change in Script Editor

The improvements for Android don’t stop there. Thanks to the work of Anish Kumar in GH-117109, you can now switch to portrait mode while in the script editor on Android devices. This makes it easier to view code while you’re typing on a virtual keyboard. Note that distraction-free mode must be enabled for this to be possible (it can be toggled). This restriction has to be in place, since the side docks take a lot of horizontal space and the script editor in portrait mode wouldn’t be practical with the side docks visible.

Linux/*BSD: Support HDR output

Continuing from the previous development snapshots which added support for HDR output on Windows and Apple platforms, we have added support for HDR output on Linux when using the Wayland display server (GH-102987). Kudos to ArchercatNEO for their dedication to developing and maintaining the Wayland support alongside the Windows and Apple PRs for more than a year!

Also of note is that documentation on HDR output is now available. Check it out! A demo project for testing HDR output will follow soon.

And more!

There are too many exciting changes to list them all here, but here’s a curated selection:

  • 3D: Add automatic smoothing for CSG nodes (GH-116749).
  • Animation: Optimize Animation Resource, Library, Mixer, and Player (GH-116394).
  • Animation: Optimize AnimationTree, Improve internals & Editor & Node::process_thread_group safety (GH-117277).
  • Core: Improve thread-safety of Object signals (GH-117511).
  • Core: Use TRACY_ON_DEMAND by default for Tracy integration (GH-1117583).
  • Editor: Add View3DController for editor 3D view manipulation (GH-115957).
  • Editor: Add 3D vertex snap base setting (Vertex/Origin) (GH-117380).
  • Editor: Depict version discrepancies in Project Manager (GH-111528).
  • Editor: Generate and display documentation for the properties generated by PropertyListHelper (GH-115253).
  • Editor: Reorganize Output dock (GH-112690).
  • Editor: Revamp autoload creation (GH-91124).
  • Editor: Stop autocomplete from eating words by default (GH-117464).
  • Editor: Support folding, groups, and subgroups in remote scene inspector (GH-117357).
  • GUI: Add triple-click paragraph selection to RichTextLabel (GH-116868).
  • Input: Add project setting to ignore joypad events if the app is unfocused (GH-115119).
  • Platforms: Add haptic feedback on long-press right-click in the editor (GH-117198).
  • Platforms: Enable wake for events if Magnet is running (GH-116524).
  • Rendering: Add fast path to Polygon2D (GH-117334).
  • Rendering: Add scale 3D and rotation 3D in particle process (GH-1112447).

Changelog

113 contributors submitted 297 fixes for this release. See our interactive changelog for the complete list of changes since 4.7-dev2. You can also review all changes included in 4.7 compared to the previous 4.6 feature release.

This release is built from commit 778cf54da.

Downloads

Godot is downloading…

Godot exists thanks to donations from people like you. Help us continue our work:


Make a Donation

Close this popup

Standard build includes support for GDScript and GDExtension.

.NET build (marked as mono) includes support for C#, as well as GDScript and GDExtension.

While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition a pre-release piece of software. 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.

Known issues

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 known bugs.

There are currently no known issues introduced by this release.

Bug reports

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

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).

Support

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 generous donations from the Godot community. A big thank you to everyone who has contributed their time or their financial support to the project!

If you’d like to support the project financially and help us secure our future hires, you can do so using the Godot Development Fund platform managed by Godot Foundation. There are also several alternative ways to donate which you may find more suitable.

Donate now

Release candidate: Godot 4.6.2 RC 2

Last week, we released our first Release Candidate snapshot for 4.6.2, and have since backported even more critical bugfixes. While we normally only need a single pass for maintenance releases, sometimes enough changes are integrated to warrant a second pass. So, once more for good measure: Godot 4.6.2 RC 2 is ready for general testing!

Please consider supporting the project financially, 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.

Jump to the Downloads section, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the Web editor, the XR editor, or the Android editor for this release. If you are interested in the latter, please request to join our testing group to get access to pre-release builds.


The illustration picture for this article comes from Funi Raccoon Game, a 3D platformer collectathon, where you play as a raccoon on a quest to fill their newly acquired home with an incalculable quantity of knick-knacks. You can buy the recently-released game or try the demo for free on Steam, and follow the developers, Crayon and Kit, on Bluesky.

What’s new

25 contributors submitted 29 improvements for this release. See our interactive changelog for the complete list of changes since 4.6.2-rc1. You can also review all changes included in 4.6.2 compared to the previous 4.6.1 maintenance release.

This section covers all changes made since 4.6.2-rc1, which are largely regression fixes:

  • 3D: Fix 3D focus selection for subgizmos (GH-116972).
  • 3D: Fix DirectionalLight3D property list (GH-117189).
  • Animation: Deselect bezier keyframes when switching animations (GH-116953).
  • Animation: Fix visual shift of animation editor keys during selection (GH-117290).
  • Buildsystem: Add UTF-8 encoding to SVG file open in platform_builders.py (GH-117454).
  • Buildsystem: CI: Bump JavaScript actions to Node 24 (GH-117428).
  • Buildsystem: ScrollBar: Fix compilation with precision=double (GH-117224).
  • Buildsystem: Update CODEOWNERS (GH-117674).
  • Core: Fix String::split_ crash on empty string (GH-117353).
  • Core: Fix editable children state when duplicating instantiated nodes (GH-117041).
  • Core: RingBuffer: Fix T read() method reading empty buffer (GH-117388).
  • Core: RingBuffer: Fix overreading on methods that take an offset as an argument (GH-117151).
  • Editor: Set accessibility name on Tree inline cell editor when editing (GH-117135).
  • GDExtension: Add missing GDVIRTUAL_BIND(_get_supported_extensions) on MovieWriter (GH-117479).
  • GUI: Fix “Custom” anchor preset being ignored if the parent isn’t a Control (GH-117488).
  • GUI: Fix RichTextLabel drag selection not working after double-click (GH-117201).
  • GUI: TextEdit: Fix clipping of last character due to right margin rounding (GH-116850).
  • Import: Blender attempts should be incremented to avoid endless loop (GH-116589).
  • Platforms: Apple Embedded: Fix static .a/.xcframework library loading in open_dynamic_library (GH-117469).
  • Platforms: Fix macOS Steam time tracking lost when opening a project (GH-117335).
  • Platforms: iOS: Propagate VC UI preferences to SwiftUI hosting controller (GH-116633).
  • Platforms: macOS: Enable wake for events if Magnet is running (GH-116524).
  • Platforms: Windows: Set current driver when ANGLE init fails (GH-117253).
  • Plugin: Android: Fix java.util.HashMap handling (GH-114941).
  • Plugin: Fix EditorDock not reopening (GH-117340).
  • Rendering: Fix Tangent decoding detection when computing vertex skinning (GH-117401).
  • Rendering: macOS: Force ANGLE (GL over Metal) when running in VM (GH-117371).
  • Thirdparty: libpng: Update to 1.6.55 (GH-117564).
  • Thirdparty: Update access-kit to 0.21.2 (GH-117433).

This release is built from commit 638b2f1e9.

Downloads

Godot is downloading…

Godot exists thanks to donations from people like you. Help us continue our work:


Make a Donation

Close this popup

Standard build includes support for GDScript and GDExtension.

.NET build (marked as mono) includes support for C#, as well as GDScript and GDExtension.

While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition a pre-release piece of software. 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.

Known issues

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 list of regressions and significant issues which we aim to address before releasing 4.6.2. This list is dynamic and will be updated if we discover new showstopping issues after more users start testing the RC snapshots.

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 known bugs.

Bug reports

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

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).

Support

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 generous donations from the Godot community. A big thank you to everyone who has contributed their time or their financial support to the project!

If you’d like to support the project financially and help us secure our future hires, you can do so using the Godot Development Fund.

Donate now

Maintenance release: Godot 4.5.2

While most users have upgraded their projects to Godot 4.6 by now, some have to stay on the previous 4.5 branch for various reasons, so we do our best to provide them with important fixes.

Our release support policy is that we support a given stable branch actively until its successor has had its first patch release, which happened a month ago with 4.6.1. But 4.5.2 was already in the pipeline with RC1, I just never got to finalizing it… so it’s time to wrap it up with a stable release!

Note: Following this maintenance release, the 4.5 branch switches to partial support, and the 4.4 branch is end of life and won’t get new patch releases.

Maintenance releases are expected to be safe for an upgrade, but we recommend to always make backups, or use a version control system such as Git, to preserve your projects in case of corruption or data loss.

Please consider supporting the project financially, 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.

Download Godot 4.5.2 now or try the online version of the Godot editor.

Godot is downloading…

Godot exists thanks to donations from people like you. Help us continue our work:


Make a Donation

Close this popup

The cover illustration is from Spooky Express, a 3D puzzle game which has you in charge of the only rail service willing to transport both humans and undeads in turns, or in other words, the goat, cabbage, and wolf problem in spookyland! Spooky Express was created by the award-winning designers at Draknek & Friends, who recently started using Godot for their new titles. You can buy the game on Steam, itch.io, App Store, and Google Play, and follow the developers on Bluesky or Mastodon.

Highlights

This release backports important fixes on the rendering and platform porting areas, notably:

  • Thanks to work done by the Android maintainers in Godot 4.5, we’ve been providing debug symbols for the Android export templates, which users can upload to Google Play to symbolicate their crash logs. This has enabled developers of games such as Rift Riff, Kamaeru, and Spooky Express to share detailed stack traces about crashes that some players run into on their games. These developers also assisted the rendering maintainers in debugging the issues, and so Skyth could write fixes for most issues found, which are available in this release.
    • If you have a game published on Google Play using Vulkan Mobile, we strongly recommend upgrading to 4.5.2 or later, as this should resolve a lot of crash reports that your game might have. If using Compatibility, there are also significant crash fixes worth getting.
  • Still on the rendering side, we’ve backported a number of Direct3D 12 bug fixes and performance improvements, notably to reduce initial shader compilation time and get it closer to what we have with Vulkan. While Godot 4.6 has even more fixes and new features, enabling it to make Direct3D 12 the default driver on Windows, for 4.5.2 it remains opt-in, but these fixes should improve the experience for developers who choose to target this API.
  • And finally, again on rendering, iOS exports using Metal (Forward+ or Mobile rendering methods) will now default to restrict support to A12 devices or newer. This means excluding some older iPads which technically support Metal but struggle to run Godot games properly. You can toggle this option in the export preset, as this is just a change of its default state based on your rendering method.

Changes

107 contributors submitted 218 fixes for this release. See our interactive changelog for the complete list of changes since the 4.5.1-stable release.

  • 2D: Check for tiles outside texture on TileSet atlas settings changes (GH-112271).
  • 3D: Don’t redraw Sprite3D/AnimatedSprite3D outside the tree (GH-112593).
  • Animation: Separate branching ping-pong time and delta (GH-112047).
  • Audio: Fix AudioStreamPolyphonic to honor AudioStreamPlayer.pitch_scale (GH-110525).
  • Audio: Check if on tree before calling can_process() (GH-114966).
  • C#: Fix dotnet class lookup returning modified names instead of engine names (GH-112023).
  • C#: Ensure .NET editor supports Visual Studio 2026 (GH-112961).
  • Core: Fix load_threaded_get returning null when used with CACHE_MODE_IGNORE (GH-111387).
  • Core: Improve determinism of UIDs (GH-111858).
  • Core: Fix duplicating node references of custom node type properties (GH-112076).
  • Editor: Visual Shader: Fix nodes’ relative positions changed in a different display scale (GH-97620).
  • Editor: Fix editing resources in the inspector when inside an array or dictionary (GH-106099).
  • Editor: Fix switch to GameView when closing game window (GH-111811).
  • Editor: EditorRun: Load override.cfg to get window configuration for embedded mode (GH-111847).
  • Editor: Add donate button to project manager (GH-111969).
  • Editor: Fix file duplication making random UID (GH-112015).
  • Export: Disable shader baker when exporting as dedicated server (GH-112361).
  • Export: iOS: Automatically enable iphone-ipad-minimum-performance-a12 if project is using Forward+/Mobile renderer (GH-114098).
  • Export: Fix Android export with multiple architectures failing when GDExtension includes native dependencies (GH-114483).
  • GDExtension: iOS: Fix loading of xcframework dynamic libraries (GH-112784).
  • GDScript: LSP: Fix goto native declaration (GH-111478).
  • GUI: Fix update order for exclusive child window (GH-94488).
  • GUI: FoldableContainer: Override has_point to use title rect when folded (GH-110847).
  • GUI: Fix IME input in multiple windows at once (GH-111865).
  • Network: Normalize IP parsing, fix IPv6, tests (GH-114827).
  • Particles: Fix CPUParticle3D not randomizing (GH-112514).
  • Physics: Fix transform updates sometimes being discarded when using Jolt (GH-115364).
  • Platforms: Android: Add support for Android XR devices to the Godot XR Editor (GH-112776).
  • Platforms: Android: Fix ANRs when shutting down the engine due to the render thread (GH-114207).
  • Platforms: Android: Trigger save of the RD pipeline cache on application pause (GH-114463).
  • Platforms: Apple Embedded: Fix static .a/.xcframework library loading in open_dynamic_library (GH-117469).
  • Platforms: macOS: Fix ~500ms hang on transparent OpenGL window creation on macOS 26 (GH-111657).
  • Platforms: macOS: Fix microphone issue (GH-111691).
  • Platforms: macOS: Disable window embedding code in export templates (GH-113966).
  • Platforms: Linux: Add SSE4.2 support runtime check (GH-112279).
  • Platforms: Linux/X11: Fix input delay regression (GH-113537).
  • Platforms: Windows: Fix EnumDevices stall using IAT hooks (GH-113013).
  • Platforms: Windows: Set current driver when ANGLE init fails (GH-117253).
  • Rendering: Round values after renormalization when generating mipmaps (GH-111841).
  • Rendering: Use AABB center instead of origin for visibility fade (GH-113486).
  • Rendering: D3D12: Fix not checking for fullscreen clear region correctly (GH-111321).
  • Rendering: D3D12: Fix specialization constant patching (GH-111356).
  • Rendering: D3D12: Greatly reduce shader conversion time & fix spec constant bitmasking (GH-111762).
  • Rendering: OpenGL: Add all PowerVR devices to the transform feedback shader cache ban list (GH-111329).
  • Rendering: OpenGL: Use GL_FRAMEBUFFER instead of GL_DRAW_FRAMEBUFFER when doing final blit to the screen framebuffer to work around OBS bug (GH-111834).
  • Rendering: Vulkan: Create new pools when they become fragmented (GH-114313).
  • Rendering: Vulkan: Implement workaround for GPU driver crash on Adreno 5XX (GH-114416).
  • Rendering: Vulkan: Create separate graphics queue instead of reusing the main queue when transfer queue family is unsupported (GH-114476).
  • Shaders: Fix VisualShader conversion failing with subresources (GH-109375).
  • Thirdparty: libpng: Update to 1.6.55 (GH-117564).
  • Thirdparty: mbedTLS: Update to version 3.6.5 (GH-111845).
  • Thirdparty: pcre2: Update to 10.46 (GH-114766).

Known incompatibilities

As of now, there are no known incompatibilities with the previous Godot 4.5.x releases. We encourage all 4.5 users to upgrade to 4.5.2 (or newer stable releases).

If you experience any unexpected behavior change in your projects after upgrading to 4.5.2, please file an issue on GitHub.

Bug reports

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

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).

Support

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 generous donations from the Godot community. A big thank you to everyone who has contributed their time or their financial support to the project!

If you’d like to support the project financially and help us secure our future hires, you can do so using the Godot Development Fund.

Donate now

Release candidate: Godot 4.6.2 RC 1

It’s been nearly two months since the initial release of Godot 4.6, and three weeks since the 4.6.1 maintenance release. In that time, we’ve had a steady chain of development snapshots for 4.7—the latest of which came out last week—and the number of resolved issues from bugs/regressions have only increased since then. In fact, we’ve received so many fixes that we’re preparing for yet another maintenance release: Godot 4.6.2!

Please consider supporting the project financially, 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.

Jump to the Downloads section, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the Web editor, the XR editor, or the Android editor for this release. If you are interested in the latter, please request to join our testing group to get access to pre-release builds.


The illustration picture for this article comes from MR FARMBOY, a colony/farming simulation game, where you build your dream farm and community by leveraging the power of automation (hired labor). You can buy the recently-released game for sale on Steam, and follow the developer on Twitch and Discord.

What’s new

43 contributors submitted 86 improvements for this release. See our interactive changelog for the complete list of changes since the 4.6.1-stable release.

This section covers the most relevant changes made since the 4.6.1 maintenance release, which are largely regression fixes:

  • Animation: Check playback_queue existance after emit animation_finished signal (GH-116676).
  • Editor: Fix build profile generator creating bogus profiles (GH-115410).
  • Editor: Fix mute button after pausing and stopping (GH-116537).
  • Export: Android Editor: Copy keystore to temp file during export (GH-116161).
  • GUI: TextServer: Ignore language of embedded object replacement spans when updating line breaks (GH-116197).
  • Physics: Jolt Physics: Make MoveKinematic more accurate when rotating a body by a very small angle (GH-115327).
  • Physics: Jolt Physics: Rework how gravity is applied to dynamic bodies to prevent energy increase on elastic collisions (GH-115305).
  • Physics: Jolt Physics: Swapping vertices of triangle if it is scaled inside out (GH-115089).
  • Platforms: Android: Fix FileAccess crash when using treeUri in Gradle-built apps (GH-117131).
  • Platforms: iOS: Add UIScene lifecycle events (GH-116395).
  • Rendering: Apply fixed size properly for mono/stereo rendering (GH-115147).
  • Rendering: Fix accidental write-combined memory reads in canvas renderer (GH-115757).
  • Rendering: Fix viewport debanding not working with spatial scalers (GH-114890).

This release is built from commit 257ac3532.

Downloads

Godot is downloading…

Godot exists thanks to donations from people like you. Help us continue our work:


Make a Donation

Close this popup

Standard build includes support for GDScript and GDExtension.

.NET build (marked as mono) includes support for C#, as well as GDScript and GDExtension.

While engine maintainers try their best to ensure that each preview snapshot and release candidate is stable, this is by definition a pre-release piece of software. 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.

Known issues

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 list of regressions and significant issues which we aim to address before releasing 4.6.2. This list is dynamic and will be updated if we discover new showstopping issues after more users start testing the RC snapshots.

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 known bugs.

  • macOS builds are not signed this release; this will be resolved by the time 4.6.2-stable comes out.

Bug reports

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

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).

Support

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 generous donations from the Godot community. A big thank you to everyone who has contributed their time or their financial support to the project!

If you’d like to support the project financially and help us secure our future hires, you can do so using the Godot Development Fund.

Donate now