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:
- Optional features that not every project needs (Mono/C#, MP3 decoding, OpenXR, regex).
- Pluggable backends (
godot_physics_3dvsjolt_physics,text_server_advvstext_server_fb,navigation_3d) where the user picks one. - First-party importers that do not belong in
core/(glTF, FBX, ZIP). - Format support for media types (Vorbis, Theora, WebP, KTX, DDS, BMP, JPEG, HDR, TGA, SVG).
- 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.