Frequently asked questions¶
What can I do with Godot? How much does it cost? What are the license terms?¶
Godot is Free and Open-Source Software available under the OSI-approved MIT license. This means it is free as in “free speech” as well as in “free beer.”
In short:
- You are free to download and use Godot for any purpose, personal, non-profit, commercial, or otherwise.
- You are free to modify, distribute, redistribute, and remix Godot to your heart’s content, for any reason, both non-commercially and commercially.
All the contents of this accompanying documentation are published under the permissive Creative Commons Attribution 3.0 (CC-BY 3.0) license, with attribution to “Juan Linietsky, Ariel Manzur and the Godot Engine community.”
Logos and icons are generally under the same Creative Commons license. Note that some third-party libraries included with Godot’s source code may have different licenses.
For full details, look at the COPYRIGHT.txt as well as the LICENSE.txt and LOGO_LICENSE.txt files in the Godot repository.
Also, see the license page on the Godot website.
Which platforms are supported by Godot?¶
For the editor:
- Windows
- macOS
- X11 (Linux, *BSD)
For exporting your games:
- Windows (and UWP)
- macOS
- X11 (Linux, *BSD)
- Android
- iOS
- Web
Both 32- and 64-bit binaries are supported where it makes sense, with 64 being the default.
Some users also report building and using Godot successfully on ARM-based systems with Linux, like the Raspberry Pi.
Additionally, there is some unofficial third-party work being done on building for some consoles. However, none of this is included in the default build scripts or export templates at this time.
For more on this, see the sections on exporting and compiling Godot yourself.
Which programming languages are supported in Godot?¶
The officially supported languages for Godot are GDScript, Visual Scripting, C#, and C++. See the subcategories for each language in the scripting section.
If you are just starting out with either Godot or game development in general, GDScript is the recommended language to learn and use since it is native to Godot. While scripting languages tend to be less performant than lower-level languages in the long run, for prototyping, developing Minimum Viable Products (MVPs), and focusing on Time-To-Market (TTM), GDScript will provide a fast, friendly, and capable way of developing your games.
Note that C# support is still relatively new, and as such, you may encounter some issues along the way. Our friendly and hard-working development community is always ready to tackle new problems as they arise, but since this is an open-source project, we recommend that you first do some due diligence yourself. Searching through discussions on open issues is a great way to start your troubleshooting.
As for new languages, support is possible via third parties using the GDNative / NativeScript / PluginScript facilities. (See the question about plugins below.) Work is currently underway, for example, on unofficial bindings for Godot to Python and Nim.
What is GDScript and why should I use it?¶
GDScript is Godot’s integrated scripting language. It was built from the ground up to maximize Godot’s potential in the least amount of code, affording both novice and expert developers alike to capitalize on Godot’s strengths as fast as possible. If you’ve ever written anything in a language like Python before then you’ll feel right at home. For examples, history, and a complete overview of the power GDScript offers you, check out the GDScript scripting guide.
There are several reasons to use GDScript–especially when you are prototyping, in alpha/beta stages of your project, or are not creating the next AAA title–but the most salient reason is the overall reduction of complexity.
The original intent of creating a tightly integrated, custom scripting language for Godot was two-fold: first, it reduces the amount of time necessary to get up and running with Godot, giving developers a rapid way of exposing themselves to the engine with a focus on productivity; second, it reduces the overall burden of maintenance, attenuates the dimensionality of issues, and allows the developers of the engine to focus on squashing bugs and improving features related to the engine core–rather than spending a lot of time trying to get a small set of incremental features working across a large set of languages.
Since Godot is an open-source project, it was imperative from the start to prioritize a more integrated and seamless experience over attracting additional users by supporting more familiar programming languages–especially when supporting those more familiar languages would result in a worse experience. We understand if you would rather use another language in Godot (see the list of supported options above). That being said, if you haven’t given GDScript a try, try it for three days. Just like Godot, once you see how powerful it is and rapid your development becomes, we think GDScript will grow on you.
More information about getting comfortable with GDScript or dynamically typed languages can be found in the GDScript: An introduction to dynamic languages tutorial.
What were the motivations behind creating GDScript?¶
In the early days, the engine used the Lua scripting language. Lua is fast, but creating bindings to an object oriented system (by using fallbacks) was complex and slow and took an enormous amount of code. After some experiments with Python, it also proved difficult to embed.
The main reasons for creating a custom scripting language for Godot were:
- Poor threading support in most script VMs, and Godot uses threads (Lua, Python, Squirrel, JavaScript, ActionScript, etc.).
- Poor class-extending support in most script VMs, and adapting to the way Godot works is highly inefficient (Lua, Python, JavaScript).
- Many existing languages have horrible interfaces for binding to C++, resulting in large amount of code, bugs, bottlenecks, and general inefficiency (Lua, Python, Squirrel, JavaScript, etc.) We wanted to focus on a great engine, not a great amount of integrations.
- No native vector types (vector3, matrix4, etc.), resulting in highly reduced performance when using custom types (Lua, Python, Squirrel, JavaScript, ActionScript, etc.).
- Garbage collector results in stalls or unnecessarily large memory usage (Lua, Python, JavaScript, ActionScript, etc.).
- Difficulty to integrate with the code editor for providing code completion, live editing, etc. (all of them). This is well-supported by GDScript.
GDScript was designed to curtail the issues above, and more.
What type of 3D model formats does Godot support?¶
Godot supports Collada via the OpenCollada exporter (Maya, 3DSMax). If you are using Blender, take a look at our own Better Collada Exporter.
As of Godot 3.0, glTF is supported.
FBX is supported via the Open Asset Import library. However, FBX is proprietary so we recommend using other formats listed above, if suitable for your workflow.
Will [insert closed SDK such as FMOD, GameWorks, etc.] be supported in Godot?¶
The aim of Godot is to create a free and open-source MIT-licensed engine that is modular and extendable. There are no plans for the core engine development community to support any third-party, closed-source/proprietary SDKs, as integrating with these would go against Godot’s ethos.
That said, because Godot is open-source and modular, nothing prevents you or anyone else interested in adding those libraries as a module and shipping your game with them–as either open- or closed-source.
To see how support for your SDK of choice could still be provided, look at the Plugins question below.
If you know of a third-party SDK that is not supported by Godot but that offers free and open-source integration, consider starting the integration work yourself. Godot is not owned by one person; it belongs to the community, and it grows along with ambitious community contributors like you.
How should assets be created to handle multiple resolutions and aspect ratios?¶
This question pops up often and it’s probably thanks to the misunderstanding created by Apple when they originally doubled the resolution of their devices. It made people think that having the same assets in different resolutions was a good idea, so many continued towards that path. That originally worked to a point and only for Apple devices, but then several Android and Apple devices with different resolutions and aspect ratios were created, with a very wide range of sizes and DPIs.
The most common and proper way to achieve this is to, instead, use a single base resolution for the game and only handle different screen aspect ratios. This is mostly needed for 2D, as in 3D it’s just a matter of Camera XFov or YFov.
- Choose a single base resolution for your game. Even if there are devices that go up to 2K and devices that go down to 400p, regular hardware scaling in your device will take care of this at little or no performance cost. Most common choices are either near 1080p (1920x1080) or 720p (1280x720). Keep in mind the higher the resolution, the larger your assets, the more memory they will take and the longer the time it will take for loading.
- Use the stretch options in Godot; 2D stretching while keeping aspect ratios works best. Check the Multiple resolutions tutorial on how to achieve this.
- Determine a minimum resolution and then decide if you want your game to stretch vertically or horizontally for different aspect ratios, or if there is one aspect ratio and you want black bars to appear instead. This is also explained in Multiple resolutions.
- For user interfaces, use the anchoring to determine where controls should stay and move. If UIs are more complex, consider learning about Containers.
And that’s it! Your game should work in multiple resolutions.
If there is a desire to make your game also work on ancient devices with tiny screens (fewer than 300 pixels in width), you can use the export option to shrink images, and set that build to be used for certain screen sizes in the App Store or Google Play.
How can I extend Godot?¶
For extending Godot, like creating Godot Editor plugins or adding support for additional languages, take a look at EditorPlugins and tool scripts.
Also, see the official blog posts on these topics:
You can also take a look at the GDScript implementation, the Godot modules, as well as the unofficial Python support for Godot. This would be a good starting point to see how another third-party library integrates with Godot.
I would like to contribute! How can I get started?¶
Awesome! As an open-source project, Godot thrives off of the innovation and ambition of developers like you.
The first place to get started is in the issues. Find an issue that resonates with you, then proceed to the How to Contribute guide to learn how to fork, modify, and submit a Pull Request (PR) with your changes.
Why does Godot not use STL (Standard Template Library)¶
Like many other libraries (Qt as an example), Godot does not make use of STL. We believe STL is a great general purpose library, but we had special requirements for Godot.
- STL templates create very large symbols, which results in huge debug binaries. We use few templates with very short names instead.
- Most of our containers cater to special needs, like Vector, which uses copy on write and we use to pass data around, or the RID system, which requires O(1) access time for performance. Likewise, our hash map implementations are designed to integrate seamlessly with internal engine types.
- Our containers have memory tracking built-in, which helps better track memory usage.
- For large arrays, we use pooled memory, which can be mapped to either a preallocated buffer or virtual memory.
- We use our custom String type, as the one provided by STL is too basic and lacks proper internationalization support.
Why does Godot not use exceptions?¶
We believe games should not crash, no matter what. If an unexpected situation happens, Godot will print an error (which can be traced even to script), but then it will try to recover as gracefully as possible and keep going.
Additionally, exceptions significantly increase binary size for the executable.
Why does Godot not enforce RTTI?¶
Godot provides its own type-casting system, which can optionally use RTTI internally. Disabling RTTI in Godot means considerably smaller binary sizes can be achieved, at a little performance cost.
Why does Godot not force users to implement DoD (Data oriented Design)?¶
While Godot internally for a lot of the heavy performance tasks attempts to use cache coherency as well as possible, we believe most users don’t really need to be forced to use DoD practices.
DoD is mostly a cache coherency optimization that can only gain you significant performance improvements when dealing with dozens of thousands of objects (which are processed every frame with little modification). As in, if you are moving a few hundred sprites or enemies per frame, DoD won’t help you, and you should consider a different approach to optimization.
The vast majority of games do not need this and Godot provides handy helpers to do the job for most cases when you do.
If a game that really needs to process such large amount of objects is needed, our recommendation is to use C++ and GDNative for the high performance parts and GDScript (or C#) for the rest of the game.
How can I support Godot development or contribute?¶
See Ways to contribute.
Who is working on Godot? How can I contact you?¶
See the corresponding page on the Godot website.