Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

GDExtension documentation system

備註

Adding documentation for GDExtensions is only possible for Godot 4.3 and later. The support can be integrated into your project regardless because the snippet will check if you use the appropriate godot-cpp version. If you set the compatability_minimum to 4.2 and you load a project with the extension through a 4.2 editor, the documentation page for that class will be empty. The extension itself will still work.

The GDExtension documentation system works in a similar manner to the built-in engine documentation. It uses a series of XML files (one per class) to document the exposed constructors, properties, methods, constants, signals, and theme items of each class.

備註

We are assuming you are using the project files explained in the GDExtension C++ Example with the following structure:

gdextension_cpp_example/  # GDExtension directory
|
+--demo/                  # game example/demo to test the extension
|   |
|   +--main.tscn
|   |
|   +--bin/
|       |
|       +--gdexample.gdextension
|
+--godot-cpp/             # C++ bindings
|
+--src/                   # source code of the extension we are building
|   |
|   +--register_types.cpp
|   +--register_types.h
|   +--gdexample.cpp
|   +--gdexample.h

Inside the Godot demo project directory of your GDExtension directory, run the following terminal command:

# Replace "godot" with the full path to a Godot editor binary
# if Godot is not installed in your `PATH`.
godot --doctool ../ --gdextension-docs

This command calls upon the Godot editor binary to generate documentation via the --doctool and --gdextension-docs commands. The ../ addition is to let Godot know where the GDExtension SConstruct file is located. By calling this command, Godot generates a doc_classes directory inside the project directory in which it generates XML files for the GDExtension classes. Those files can then be edited to add information about member variables, methods, signals, and more.

To add the now edited documentation to the GDExtension and let the editor load it, you need to add the following lines to your SConstruct file:

if env["target"] in ["editor", "template_debug"]:
try:
    doc_data = env.GodotCPPDocData("src/gen/doc_data.gen.cpp", source=Glob("doc_classes/*.xml"))
    sources.append(doc_data)
except AttributeError:
    print("Not including class reference as we're targeting a pre-4.3 baseline.")

The if-statement checks if we are compiling the GDExtension library with the editor and template_debug flags. SCons then tries to load all the XML files inside the doc_classes directory and appends them to the sources variable which already includes all the source files of your extension. If it fails it means we are currently trying to compile the library when the godot_cpp is set to a version before 4.3.

After loading the extension in a 4.3 Godot editor or later and open the documentation of your extension class either by Ctrl + Click in the script editor or the Editor help dialog you will see something like this:

../../../_images/gdextension_docs_generation.webp

Documentation styling

To style specific parts of text you can use BBCode tags similarly to how they can be used in RichTextLabels. You can set text as bold, italic, underlined, colored, codeblocks etc. by embedding them in tags like this:

[b]this text will be shown as bold[/b]

Currently they supported tags for the GDExtension documentation system are:

標籤

範例

使“{text}”使用“RichTextLabel”的粗體(或粗體斜體)字形。

[b]{text}[/b]

使“{text}”使用“RichTextLabel”的斜體(或粗體斜體)字形。

[i]{text}[/i]

u
{text} 上顯示底線。

[u]{text}[/u]

s
{text} 上顯示刪除線。

[s]{text}[/s]

kbd
Makes {text} use a grey beveled background, indicating a keyboard shortcut.

[kbd]{text}[/kbd]

code
Makes inline {text} use the mono font and styles the text color and background like code.

[code]{text}[/code]

codeblocks
Makes multiline {text} use the mono font and styles the text color and background like code.
The addition of the [gdscript] tag highlights the GDScript specific syntax.
[codeblocks]
[gdscript]
{project}
[/gdscript]
[/codeblocks]
center
使得 {text} 水平居中.
與“[palign=center]”相同。

[center]{text}[/center]

url
建立超連結(帶下劃線且可點擊的文字)。可以包含可選的“{text}”或按原樣顯示“{link}”。
[url]{url}[/url]
[url=<url>]{text}[/url]
img
從「{path}」插入映像(可以是任何有效的 class_Texture2D 資源)。
如果提供了“{width}”,圖像將嘗試適應該寬度並保持縱橫比。
如果同時提供了“{width}”和“{height}”,則圖像將縮放到該尺寸。
Add % to the end of {width} or {height} value to specify it as percentages of the control width instead of pixels.
If {valign} configuration is provided, the image will try to align to the surrounding text, see Image and table vertical alignment.
支援配置選項,請參閱 匯入選項
[img]{path}[/img]
[img=<width>]{path}[/img]
[img=<width>x<height>]{path}[/img]
[img]{path}[/img]
[img]{path}[/img]
color
更改“{text}”的顏色。顏色必須由通用名稱提供(請參閱 doc_bbcode_in_richtextlabel_named_colors`)或使用十六進位格式(例如“#ff00ff”,請參閱 doc_bbcode_in_richtextlabel_hex_colors`)。

[color={code/name}]{text}[/color]

Publishing documentation online

You may want to publish an online reference for your GDExtension, similar to this website. The most important step is to build reStructuredText (.rst) files from your XML class reference:

# You need a version.py file, so download it first.
curl -sSLO https://raw.githubusercontent.com/godotengine/godot/refs/heads/master/version.py

# Edit version.py according to your project before proceeding.
# Then, run the rst generator. You'll need to have Python installed for this command to work.
curl -sSL https://raw.githubusercontent.com/godotengine/godot/master/doc/tools/make_rst.py | python3 - -o "docs/classes" -l "en" doc_classes

Your .rst files will now be available in docs/classes/. From here, you can use any documentation builder that supports reStructuredText syntax to create a website from them.

godot-docs uses Sphinx. You can use the repository as a basis to build your own documentation system. The following guide describes the basic steps, but they are not exhaustive: You will need a bit of personal insight to make it work.

  1. Add godot-docs as a submodule to your docs/ folder.

  2. Copy over its conf.py, index.rst, .readthedocs.yaml files into /docs/. You may later decide to copy over and edit more of godot-docs' files, like _templates/layout.html.

  3. Modify these files according to your project. This mostly involves adjusting paths to point to the godot-docs subfolder, as well as strings to reflect it's your project rather than Godot you're building the docs for.

  4. Create an account on readthedocs.org. Import your project, and modify its base .readthedocs.yaml file path to /docs/.readthedocs.yaml.

Once you have completed all these steps, your documentation should be available at <repo-name>.readthedocs.io.