Open-Source Wikis

/

Godot

/

Modules

godotengine/godot

Modules

Godot's modules/ directory holds optional engine extensions that can be enabled or disabled at compile time. They are not "modules" in the OS dynamic-linking sense — they compile into the same binary as the rest of the engine and register themselves through register_module_types. Disabling a module via module_<name>_enabled=no (or the custom_modules mechanism) drops its code entirely from the build.

Why modules exist

Several distinct reasons:

  1. Optional features that not every project needs (Mono/C#, MP3 decoding, OpenXR, regex).
  2. Pluggable backends (godot_physics_3d vs jolt_physics, text_server_adv vs text_server_fb, navigation_3d) where the user picks one.
  3. First-party importers that do not belong in core/ (glTF, FBX, ZIP).
  4. Format support for media types (Vorbis, Theora, WebP, KTX, DDS, BMP, JPEG, HDR, TGA, SVG).
  5. Hosted scripting languages (gdscript, mono).

Most modules are enabled by default. The mono module is the most prominent opt-in.

In-tree modules

Module Purpose One-line
GDScript Built-in dynamic language Lexer, parser, analyzer, compiler, VM, debugger, LSP
Mono / C# C# scripting via .NET 8 Hostfxr, generated bindings, marshalling glue
glTF glTF 2.0 import/export First-class 3D scene format
Jolt Physics Recommended 3D physics Wraps Jorrit Rouwe's Jolt library
OpenXR Primary XR runtime Action sets, hand/face/body tracking, layers
Multiplayer High-level networking RPC, scene replication, peer abstractions
Other modules Format/effect/utility modules Audio formats, regex, noise, CSG, visual shader, …
text_server_adv Default text server HarfBuzz + ICU + FreeType
text_server_fb Fallback text server FreeType only
godot_physics_2d / godot_physics_3d Built-in physics backends SAT/GJK/EPA + iterative solver
navigation_2d / navigation_3d Default navigation backends Recast + RVO2
webrtc, websocket, enet, upnp, mbedtls Networking TLS, ENet, WS, WebRTC, UPnP discovery
webxr WebXR backend Web platform only
mobile_vr Phone-stereo VR Cardboard-style
gridmap 3D tile system GridMap node, MeshLibrary resources
csg Constructive solid geometry Brushes, booleans, level prototyping
visual_shader Visual shader graphs Drag-and-drop shader authoring
lightmapper_rd RD-based lightmap baker Computes static GI for LightmapGI
regex PCRE2 regex API RegEx/RegExMatch classes
noise Noise generators FastNoiseLite, NoiseTexture2D, NoiseTexture3D
mp3, vorbis, ogg, theora Media decoders Audio + video
webp, svg, jpg, bmp, dds, hdr, ktx, tga, tinyexr Image format loaders Decoders for textures
basis_universal, astcenc, betsy, bcdec, cvtt, etcpak Texture compressors Per-format compressed texture pipelines
meshoptimizer, xatlas_unwrap, vhacd Mesh tooling Index/vertex optimization, UV atlasing, convex decomposition
interactive_music Layered/transitioning music AudioStreamInteractive, AudioStreamSynchronized
objectdb_profiler Object DB profiler Editor-only insight into live Object counts
jsonrpc JSON-RPC 2.0 Used by the GDScript LSP and editor remote tools
raycast Embree-backed raycasting Used by lightmapper + navigation
freetype, glslang, msdfgen Library wrappers Vendored thirdparty registered via small modules
zip Zip archive support Reading + writing
accesskit Accessibility integration Cross-platform a11y via AccessKit

A module's structure is conventional:

modules/<name>/
├── config.py              Build-time options + can_build callback
├── SCsub                  SCons enumeration of sources
├── register_types.{cpp,h} Module entry: registers classes/services with engine
├── doc_classes/           XML class reference for the module's classes
├── icons/                 Editor icons (SVG)
├── editor/                (optional) Editor plugins this module ships
├── tests/                 (optional) doctest unit tests
└── …source code…

Some modules also vendor third-party code under thirdparty/ at the repo root (e.g., HarfBuzz, ICU, FreeType, Jolt, Mbed TLS, Vulkan-Loader). The vendoring keeps build reproducibility and removes the need for git submodules.

Disabling and replacing

scons module_<name>_enabled=no disables a module. The build emits modules_enabled.gen.h listing the active set; #ifdef MODULE_<NAME>_ENABLED guards code in other layers.

External modules can be added via custom_modules=path/to/module1,path/to/module2 — useful for proprietary integrations.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

Modules – Godot wiki | Factory