From 028abe15d1733855ca2958123b38afbf4e268f49 Mon Sep 17 00:00:00 2001 From: Lukas Tenbrink Date: Wed, 5 Feb 2025 00:06:58 +0100 Subject: [PATCH] Split C++ (godot-cpp) and GDExtension system info into separate categories, children of Scripting. --- _tools/redirects/redirects.csv | 5 +- about/docs_changelog.rst | 2 +- classes/class_gdextension.rst | 2 +- classes/class_gdextensionmanager.rst | 2 +- tutorials/platform/android/android_plugin.rst | 2 +- tutorials/scripting/cpp/about_godot_cpp.rst | 96 ++++++++++++++ .../files/cpp_example/SConstruct | 0 .../gdextension_cpp_example.rst | 50 ++++--- .../gdextension_docs_system.rst | 8 +- .../img/gdextension_cpp_animated.webm | Bin .../img/gdextension_cpp_nodes.webp | Bin .../img/gdextension_cpp_sprite.webp | Bin .../img/gdextension_docs_generation.webp | Bin tutorials/scripting/cpp/index.rst | 17 +++ .../gdextension/gdextension_c_example.rst | 2 +- .../gdextension/gdextension_file.rst | 2 +- tutorials/scripting/gdextension/index.rst | 24 +++- .../gdextension/what_is_gdextension.rst | 124 +----------------- tutorials/scripting/index.rst | 4 + tutorials/scripting/other_languages.rst | 36 +++++ 20 files changed, 222 insertions(+), 154 deletions(-) create mode 100644 tutorials/scripting/cpp/about_godot_cpp.rst rename tutorials/scripting/{gdextension => cpp}/files/cpp_example/SConstruct (100%) rename tutorials/scripting/{gdextension => cpp}/gdextension_cpp_example.rst (92%) rename tutorials/scripting/{gdextension => cpp}/gdextension_docs_system.rst (98%) rename tutorials/scripting/{gdextension => cpp}/img/gdextension_cpp_animated.webm (100%) rename tutorials/scripting/{gdextension => cpp}/img/gdextension_cpp_nodes.webp (100%) rename tutorials/scripting/{gdextension => cpp}/img/gdextension_cpp_sprite.webp (100%) rename tutorials/scripting/{gdextension => cpp}/img/gdextension_docs_generation.webp (100%) create mode 100644 tutorials/scripting/cpp/index.rst create mode 100644 tutorials/scripting/other_languages.rst diff --git a/_tools/redirects/redirects.csv b/_tools/redirects/redirects.csv index 8abf405791e..31930a3fe0d 100644 --- a/_tools/redirects/redirects.csv +++ b/_tools/redirects/redirects.csv @@ -399,8 +399,9 @@ source,destination /tutorials/plugins/gdnative/gdnative-c-example.html,/tutorials/scripting/gdnative/gdnative_c_example.html /tutorials/plugins/gdnative/gdnative-cpp-example.html,/tutorials/scripting/gdnative/gdnative_cpp_example.html /tutorials/plugins/gdnative/index.html,/tutorials/scripting/gdnative/index.html -/tutorials/scripting/gdnative/gdnative_c_example.html,/tutorials/plugins/gdextension/gdextension_cpp_example.html -/tutorials/scripting/gdnative/gdnative_cpp_example.html,/tutorials/plugins/gdextension/gdextension_cpp_example.html +/tutorials/plugins/gdextension/gdextension_cpp_example.html,/tutorials/plugins/cpp/gdextension_cpp_example.html +/tutorials/scripting/gdnative/gdnative_c_example.html,/tutorials/plugins/cpp/gdextension_cpp_example.html +/tutorials/scripting/gdnative/gdnative_cpp_example.html,/tutorials/plugins/cpp/gdextension_cpp_example.html /tutorials/scripting/gdnative/index.html,/tutorials/scripting/gdextension/index.html /tutorials/scripting/gdnative/what_is_gdnative.html,/tutorials/scripting/gdnative/what_is_gdextension.html /tutorials/shading/advanced_postprocessing.html,/tutorials/shaders/advanced_postprocessing.html diff --git a/about/docs_changelog.rst b/about/docs_changelog.rst index 2ff6a8b318d..5a792dab538 100644 --- a/about/docs_changelog.rst +++ b/about/docs_changelog.rst @@ -84,7 +84,7 @@ GDExtension ~~~~~~~~~~~ - :ref:`doc_gdextension_file` -- :ref:`doc_gdextension_docs_system` +- :ref:`doc_godot_cpp_docs_system` Migrating ~~~~~~~~~ diff --git a/classes/class_gdextension.rst b/classes/class_gdextension.rst index 3015d96c576..552395963b7 100644 --- a/classes/class_gdextension.rst +++ b/classes/class_gdextension.rst @@ -30,7 +30,7 @@ Tutorials - :doc:`GDExtension overview <../tutorials/scripting/gdextension/what_is_gdextension>` -- :doc:`GDExtension example in C++ <../tutorials/scripting/gdextension/gdextension_cpp_example>` +- :doc:`GDExtension example in C++ <../tutorials/scripting/cpp/gdextension_cpp_example>` .. rst-class:: classref-reftable-group diff --git a/classes/class_gdextensionmanager.rst b/classes/class_gdextensionmanager.rst index f8413266fdf..d2264329fd2 100644 --- a/classes/class_gdextensionmanager.rst +++ b/classes/class_gdextensionmanager.rst @@ -30,7 +30,7 @@ Tutorials - :doc:`GDExtension overview <../tutorials/scripting/gdextension/what_is_gdextension>` -- :doc:`GDExtension example in C++ <../tutorials/scripting/gdextension/gdextension_cpp_example>` +- :doc:`GDExtension example in C++ <../tutorials/scripting/cpp/gdextension_cpp_example>` .. rst-class:: classref-reftable-group diff --git a/tutorials/platform/android/android_plugin.rst b/tutorials/platform/android/android_plugin.rst index a355c1b3399..61c906f3f41 100644 --- a/tutorials/platform/android/android_plugin.rst +++ b/tutorials/platform/android/android_plugin.rst @@ -231,7 +231,7 @@ At build time, the contents of the ``export_scripts_template`` directory as well Packaging a v2 Android plugin with GDExtension capabilities ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -For GDExtension, we follow the same steps as for `Packaging a v2 Android plugin`_ and add the `GDExtension config file `_ in +For GDExtension, we follow the same steps as for `Packaging a v2 Android plugin`_ and add the `GDExtension config file `_ in the same location as ``plugin.cfg``. For reference, here is the `folder structure for the GDExtension Android plugin project template `_. diff --git a/tutorials/scripting/cpp/about_godot_cpp.rst b/tutorials/scripting/cpp/about_godot_cpp.rst new file mode 100644 index 00000000000..8560b8632ae --- /dev/null +++ b/tutorials/scripting/cpp/about_godot_cpp.rst @@ -0,0 +1,96 @@ +.. _doc_about_godot_cpp: + +About godot-cpp +=============== + +`godot-cpp `__ are the official C++ GDExtension bindings, maintained +as part of the Godot project. + +godot-cpp is built with the :ref:`GDExtension system `, which allows access to Godot in almost the +same way as :ref:`modules `: A lot of `engine code `__ +can be used in your godot-cpp project almost exactly as it is. + +In particular, godot-cpp has access to all functions that :ref:`GDScript ` and :ref:`C# ` +have, and additional access to a few more for fast low-level access of data, or deeper integration with Godot. + +Differences between godot-cpp and C++ modules +--------------------------------------------- + +You can use both `godot-cpp `__ +and :ref:`C++ modules ` to run C or C++ code in a Godot project. + +They also both allow you to integrate third-party libraries into Godot. The one +you should choose depends on your needs. + +.. warning:: + + godot-cpp is currently *experimental*, which means that we may + break compatibility in order to fix major bugs or include critical features. + + +Advantages of godot-cpp +~~~~~~~~~~~~~~~~~~~~~~~ + +Unlike modules, godot-cpp (and GDExtensions, in general) don't require +compiling the engine's source code, making it easier to distribute your work. +It gives you access to most of the API available to GDScript and C#, allowing +you to code game logic with full control regarding performance. It's ideal if +you need high-performance code you'd like to distribute as an add-on in the +:ref:`asset library `. + +Also: + +- You can use the same compiled godot-cpp library in the editor and exported + project. With C++ modules, you have to recompile all the export templates you + plan to use if you require its functionality at runtime. +- godot-cpp only requires you to compile your library, not the whole engine. + That's unlike C++ modules, which are statically compiled into the engine. + Every time you change a module, you need to recompile the engine. Even with + incremental builds, this process is slower than using godot-cpp. + +Advantages of C++ modules +~~~~~~~~~~~~~~~~~~~~~~~~~ + +We recommend :ref:`C++ modules ` in cases where +godot-cpp (or another GDExtension system) isn't enough: + +- C++ modules provide deeper integration into the engine. GDExtension's access + is not as deep as static modules. +- You can use C++ modules to provide additional features in a project without + carrying native library files around. This extends to exported projects. + +.. note:: + + If you notice that specific systems are not accessible via godot-cpp + but are via custom modules, feel free to open an issue on the + `godot-cpp repository `__ + to discuss implementation options for exposing the missing functionality. + +.. _doc_what_is_gdextension_version_compatibility: + +Version compatibility +--------------------- + +Usually, GDExtensions targeting an earlier version of Godot will work in later +minor versions, but not vice-versa. For example, a GDExtension targeting Godot 4.2 +should work just fine in Godot 4.3, but one targeting Godot 4.3 won't work in Godot 4.2. + +For this reason, when creating GDExtensions, you may want to target the lowest version of +Godot that has the features you need, *not* the most recent version of Godot. This can +save you from needing to create multiple builds for different versions of Godot. + +However, GDExtension is currently *experimental*, which means that we may +break compatibility in order to fix major bugs or include critical features. +For example, GDExtensions created for Godot 4.0 aren't compatible with Godot +4.1 (see :ref:`updating_your_gdextension_for_godot_4_1`). + +GDExtensions are also only compatible with engine builds that use the same +level of floating-point precision the extension was compiled for. This means +that if you use an engine build with double-precision floats, the extension must +also be compiled for double-precision floats and use an ``extension_api.json`` +file generated by your custom engine build. See :ref:`doc_large_world_coordinates` +for details. + +Generally speaking, if you build a custom version of Godot, you should generate an +``extension_api.json`` from it for your GDExtensions, because it may have some differences +from official Godot builds. diff --git a/tutorials/scripting/gdextension/files/cpp_example/SConstruct b/tutorials/scripting/cpp/files/cpp_example/SConstruct similarity index 100% rename from tutorials/scripting/gdextension/files/cpp_example/SConstruct rename to tutorials/scripting/cpp/files/cpp_example/SConstruct diff --git a/tutorials/scripting/gdextension/gdextension_cpp_example.rst b/tutorials/scripting/cpp/gdextension_cpp_example.rst similarity index 92% rename from tutorials/scripting/gdextension/gdextension_cpp_example.rst rename to tutorials/scripting/cpp/gdextension_cpp_example.rst index 21cdd6f815a..ea898738a24 100644 --- a/tutorials/scripting/gdextension/gdextension_cpp_example.rst +++ b/tutorials/scripting/cpp/gdextension_cpp_example.rst @@ -1,29 +1,38 @@ -.. _doc_gdextension_cpp_example: +.. _doc_godot_cpp_getting_started: -GDExtension C++ example -======================= +Getting started +=============== -Introduction ------------- +Workflow overview +----------------- + +As a GDExtension, godot-cpp is more complicated to use than :ref:`GDScript ` and :ref:`C# `. +If you decide to work with it, here's what to expect your workflow to look like: -The C++ bindings for GDExtension are built on top of the C GDExtension API -and provide a nicer way to "extend" nodes and other built-in classes in Godot using C++. -This new system allows the extension of Godot to nearly the same -level as statically linked C++ modules. +* Create a new godot-cpp project (from the `template `__, or from scratch, as explained below). +* Develop your code with your :ref:`favorite IDE ` locally. +* Build and test your code with the earliest compatible Godot version. +* Create builds for all platforms you want to support (e.g. using `GitHub Actions `__). +* Optional: Publish on the `Godot Asset Library `__. -You can download the included example in the test folder of the godot-cpp -repository `on GitHub `__. +Example project +--------------- + +For your first godot-cpp project, we recommend starting with this guide to understand the technology involved with +godot-cpp. After you're done, you can use the `godot-cpp template `__, +which has better coverage of features, such as a GitHub action pipeline and useful ``SConstruct`` boilerplate code. +However, the template does not explain itself to a high level of detail, which is why we recommend going through this +guide first. Setting up the project ---------------------- There are a few prerequisites you'll need: -- a Godot 4 executable, -- a C++ compiler, -- SCons as a build tool, -- a copy of the `godot-cpp - repository `__. +- A Godot 4 executable. +- A C++ compiler. +- SCons as a build tool. +- A copy of the `godot-cpp repository `__. See also :ref:`Configuring an IDE ` and :ref:`Compiling ` as the build tools are identical @@ -712,6 +721,9 @@ Every second, we output our position to the console. Next steps ---------- -We hope the above example showed you the basics. You can -build upon this example to create full-fledged scripts to control nodes in Godot -using C++. +We hope the above example showed you the basics. You can build upon this example to create full-fledged scripts +to control nodes in Godot using C++! + +Instead of basing your project off the above example setup, we recommend to restart now by cloning the +`godot-cpp template `__, and base your project off of that. +It has better coverage of features, such as a GitHub build action and additional useful ``SConstruct`` boilerplate. diff --git a/tutorials/scripting/gdextension/gdextension_docs_system.rst b/tutorials/scripting/cpp/gdextension_docs_system.rst similarity index 98% rename from tutorials/scripting/gdextension/gdextension_docs_system.rst rename to tutorials/scripting/cpp/gdextension_docs_system.rst index 575a901ef94..f1c79f564b8 100644 --- a/tutorials/scripting/gdextension/gdextension_docs_system.rst +++ b/tutorials/scripting/cpp/gdextension_docs_system.rst @@ -1,7 +1,7 @@ -.. _doc_gdextension_docs_system: +.. _doc_godot_cpp_docs_system: -GDExtension documentation system -================================ +Adding documentation +==================== .. note:: @@ -15,7 +15,7 @@ XML files (one per class) to document the exposed constructors, properties, meth .. note:: - We are assuming you are using the project files explained in the :ref:`GDExtension C++ Example ` + We are assuming you are using the project files explained in the :ref:`example project ` with the following structure: .. code-block:: none diff --git a/tutorials/scripting/gdextension/img/gdextension_cpp_animated.webm b/tutorials/scripting/cpp/img/gdextension_cpp_animated.webm similarity index 100% rename from tutorials/scripting/gdextension/img/gdextension_cpp_animated.webm rename to tutorials/scripting/cpp/img/gdextension_cpp_animated.webm diff --git a/tutorials/scripting/gdextension/img/gdextension_cpp_nodes.webp b/tutorials/scripting/cpp/img/gdextension_cpp_nodes.webp similarity index 100% rename from tutorials/scripting/gdextension/img/gdextension_cpp_nodes.webp rename to tutorials/scripting/cpp/img/gdextension_cpp_nodes.webp diff --git a/tutorials/scripting/gdextension/img/gdextension_cpp_sprite.webp b/tutorials/scripting/cpp/img/gdextension_cpp_sprite.webp similarity index 100% rename from tutorials/scripting/gdextension/img/gdextension_cpp_sprite.webp rename to tutorials/scripting/cpp/img/gdextension_cpp_sprite.webp diff --git a/tutorials/scripting/gdextension/img/gdextension_docs_generation.webp b/tutorials/scripting/cpp/img/gdextension_docs_generation.webp similarity index 100% rename from tutorials/scripting/gdextension/img/gdextension_docs_generation.webp rename to tutorials/scripting/cpp/img/gdextension_docs_generation.webp diff --git a/tutorials/scripting/cpp/index.rst b/tutorials/scripting/cpp/index.rst new file mode 100644 index 00000000000..437267d4620 --- /dev/null +++ b/tutorials/scripting/cpp/index.rst @@ -0,0 +1,17 @@ +:allow_comments: False + +.. _doc_godot_cpp: + +C++ (godot-cpp) +=============== + +This section documents `godot-cpp `__, +the official C++ GDExtension bindings maintained as part of the Godot project. + +.. toctree:: + :maxdepth: 1 + :name: toc-tutorials-godot-cpp + + about_godot_cpp + gdextension_cpp_example + gdextension_docs_system diff --git a/tutorials/scripting/gdextension/gdextension_c_example.rst b/tutorials/scripting/gdextension/gdextension_c_example.rst index a7293401b4f..8724f30f79d 100644 --- a/tutorials/scripting/gdextension/gdextension_c_example.rst +++ b/tutorials/scripting/gdextension/gdextension_c_example.rst @@ -2148,5 +2148,5 @@ quite straightforward and not very verbose. If you want to create actual extensions, it is preferred to use the C++ bindings instead, as it takes away all of the boilerplate from your code. Check the -:ref:`GDExtension C++ example ` to see how you can +:ref:`godot-cpp documentation ` to see how you can do this. diff --git a/tutorials/scripting/gdextension/gdextension_file.rst b/tutorials/scripting/gdextension/gdextension_file.rst index 61e42a5b8fb..68cd73ea1b6 100644 --- a/tutorials/scripting/gdextension/gdextension_file.rst +++ b/tutorials/scripting/gdextension/gdextension_file.rst @@ -9,7 +9,7 @@ Introduction The ``.gdextension`` file in your project contains the instructions for how to load the GDExtension. The instructions are separated into specific sections. This page should give you a quick overview of the different options available to you. For an introduction -how to get started with GDExtensions take a look at the :ref:`GDExtension C++ Example `. +how to get started with C++ (godot-cpp), take a look at the :ref:`GDExtension C++ Example `. Configuration section --------------------- diff --git a/tutorials/scripting/gdextension/index.rst b/tutorials/scripting/gdextension/index.rst index 7aec6a9c749..76be9d8690b 100644 --- a/tutorials/scripting/gdextension/index.rst +++ b/tutorials/scripting/gdextension/index.rst @@ -1,14 +1,26 @@ :allow_comments: False -GDExtension -=========== +.. _doc_gdextension: + +The GDExtension system +====================== + +**GDExtension** is a Godot-specific technology that lets the engine interact with +native `shared libraries `__ +at runtime. You can use it to run native code without compiling it with the engine. + +.. note:: GDExtension is *not* a scripting language and has no relation to + :ref:`GDScript `. + +This section describes how GDExtension works, and is generally aimed at people wanting to make a GDExtension from +scratch, for example to create language bindings. If you want to use existing language bindings, please refer to other +articles instead, such as the articles about :ref:`C++ (godot-cpp) ` or one of the +:ref:`community-made ones `. .. toctree:: :maxdepth: 1 - :name: toc-tutorials-gdnative + :name: toc-tutorials-gdextension what_is_gdextension - gdextension_cpp_example - gdextension_c_example gdextension_file - gdextension_docs_system + gdextension_c_example diff --git a/tutorials/scripting/gdextension/what_is_gdextension.rst b/tutorials/scripting/gdextension/what_is_gdextension.rst index e1b99ec114d..f1963700503 100644 --- a/tutorials/scripting/gdextension/what_is_gdextension.rst +++ b/tutorials/scripting/gdextension/what_is_gdextension.rst @@ -3,130 +3,20 @@ What is GDExtension? ==================== -Introduction ------------- - **GDExtension** is a Godot-specific technology that lets the engine interact with native `shared libraries `__ at runtime. You can use it to run native code without compiling it with the engine. -.. note:: GDExtension is *not* a scripting language and has no relation to - :ref:`GDScript `. - -Differences between GDExtension and C++ modules ------------------------------------------------ - -You can use both GDExtension and :ref:`C++ modules ` to -run C or C++ code in a Godot project. - -They also both allow you to integrate third-party libraries into Godot. The one -you should choose depends on your needs. - -.. warning:: - - GDExtension is currently *experimental*, which means that we may - break compatibility in order to fix major bugs or include critical features. - -Advantages of GDExtension -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Unlike modules, GDExtension doesn't require compiling the engine's source code, -making it easier to distribute your work. It gives you access to most of the API -available to GDScript and C#, allowing you to code game logic with full control -regarding performance. It's ideal if you need high-performance code you'd like -to distribute as an add-on in the :ref:`asset library `. - -Also: - -- GDExtension is not limited to C and C++. Thanks to :ref:`third-party bindings - `, you can use it with many other - languages. -- You can use the same compiled GDExtension library in the editor and exported - project. With C++ modules, you have to recompile all the export templates you - plan to use if you require its functionality at runtime. -- GDExtension only requires you to compile your library, not the whole engine. - That's unlike C++ modules, which are statically compiled into the engine. - Every time you change a module, you need to recompile the engine. Even with - incremental builds, this process is slower than using GDExtension. - -Advantages of C++ modules -~~~~~~~~~~~~~~~~~~~~~~~~~ - -We recommend :ref:`C++ modules ` in cases where -GDExtension isn't enough: - -- C++ modules provide deeper integration into the engine. GDExtension's access - is not as deep as static modules. -- You can use C++ modules to provide additional features in a project without - carrying native library files around. This extends to exported projects. - -.. note:: - - If you notice that specific systems are not accessible via GDExtension - but are via custom modules, feel free to open an issue on the - `godot-cpp repository `__ - to discuss implementation options for exposing the missing functionality. +There are three primary methods with which this is achieved: -Supported languages -------------------- +* ``gdextension_interface.h``: A set of C functions that Godot and a GDExtension can use to communicate. +* ``extension_api.json``: A list of C functions that are exposed from Godot APIs (:ref:`Core Features `). +* :ref:`*.gdextension `: A file format read by Godot to load a GDExtension. -The Godot developers officially support the following language bindings for -GDExtension: - -- C++ :ref:`(tutorial) ` - -.. note:: - - There are no plans to support additional languages with GDExtension officially. - That said, the community offers several bindings for other languages (see - below). - -.. _doc_what_is_gdnative_third_party_bindings: - -The bindings below are developed and maintained by the community: - -.. Binding developers: Feel free to open a pull request to add your binding if it's well-developed enough to be used in a project. -.. Please keep languages sorted in alphabetical order. - -- `D `__ -- `Go `__ -- `Nim `__ -- `Rust `__ -- `Swift `__ -- `Odin `__ - -.. note:: - - Not all bindings mentioned here may be production-ready. Make sure to - research options thoroughly before starting a project with one of those. - Also, double-check whether the binding is compatible with the Godot version - you're using. - -.. _doc_what_is_gdextension_version_compatibility: +Most people create GDExtensions with some existing language binding, such as :ref:`godot-cpp (for C++) `, +or one of the :ref:`community-made ones `. Version compatibility --------------------- -Usually, GDExtensions targeting an earlier version of Godot will work in later -minor versions, but not vice-versa. For example, a GDExtension targeting Godot 4.2 -should work just fine in Godot 4.3, but one targeting Godot 4.3 won't work in Godot 4.2. - -For this reason, when creating GDExtensions, you may want to target the lowest version of -Godot that has the features you need, *not* the most recent version of Godot. This can -save you from needing to create multiple builds for different versions of Godot. - -However, GDExtension is currently *experimental*, which means that we may -break compatibility in order to fix major bugs or include critical features. -For example, GDExtensions created for Godot 4.0 aren't compatible with Godot -4.1 (see :ref:`updating_your_gdextension_for_godot_4_1`). - -GDExtensions are also only compatible with engine builds that use the same -level of floating-point precision the extension was compiled for. This means -that if you use an engine build with double-precision floats, the extension must -also be compiled for double-precision floats and use an ``extension_api.json`` -file generated by your custom engine build. See :ref:`doc_large_world_coordinates` -for details. - -Generally speaking, if you build a custom version of Godot, you should generate an -``extension_api.json`` from it for your GDExtensions, because it may have some differences -from official Godot builds. +See :ref:`godot-cpp Version Compatibility `, which applies to all GDExtensions. diff --git a/tutorials/scripting/index.rst b/tutorials/scripting/index.rst index 3df2ffc8b53..dfaf28cc7af 100644 --- a/tutorials/scripting/index.rst +++ b/tutorials/scripting/index.rst @@ -21,8 +21,12 @@ The sections below each focus on a given programming language. gdscript/index c_sharp/index + cpp/index + other_languages gdextension/index +.. _doc_scripting_core_features: + Core features ------------- diff --git a/tutorials/scripting/other_languages.rst b/tutorials/scripting/other_languages.rst new file mode 100644 index 00000000000..3a124c4b885 --- /dev/null +++ b/tutorials/scripting/other_languages.rst @@ -0,0 +1,36 @@ +.. _doc_scripting_languages: + +Other languages +--------------- + +The Godot developers officially support the following languages for Godot: + +- :ref:`GDScript (all versions)` +- :ref:`C# (.NET version)` +- :ref:`C++ (via GDExtension) ` + +.. note:: + + There are no plans to support additional languages officially. + That said, the community offers several bindings for other languages (see below). + +.. _doc_what_is_gdnative_third_party_bindings: + +The bindings below are developed and maintained by the community: + +.. Binding developers: Feel free to open a pull request to add your binding if it's well-developed enough to be used in a project. +.. Please keep languages sorted in alphabetical order. + +- `D `__ +- `Go `__ +- `Nim `__ +- `Rust `__ +- `Swift `__ +- `Odin `__ + +.. note:: + + Not all bindings mentioned here may be production-ready. Make sure to + research options thoroughly before starting a project with one of those. + Also, double-check whether the binding is compatible with the Godot version + you're using.