Building on macOS (Apple Silicon)
April 14, 2026 · View on GitHub
The SConstruct.py already contains a platform == "macos" branch, so
building on macOS works out of the box — it is simply not documented or
listed in the README's supported platforms. This doc captures the exact
steps that succeeded on Apple Silicon (tested on M3 Pro, Godot 4.6.2).
Prerequisites
brew install pkg-config cmake ninja openssl@3
pip3 install --user scons
pkg-config: required by vcpkg (fmt fails to build without it).openssl@3: macOS's bundled LibreSSL breaks Cesium Native's SSL build.cmake+ninja: C++ build tools.scons: the build orchestrator used by this repo.
Environment
Export OpenSSL root so Cesium Native picks up Homebrew's OpenSSL instead of the system LibreSSL:
export OPENSSL_ROOT_DIR=$(brew --prefix openssl@3)
export OPENSSL_DIR=$(brew --prefix openssl@3)
Build
First run will clone Cesium Native into cesium_godot/native/, then ask
interactively whether to build Cesium Native. Pipe yes so scons proceeds
non-interactively:
yes | scons platform=macos arch=arm64 compileTarget=extension \
target=template_release production=yes
Build takes ~15–20 minutes on M3 Pro. Output:
godot3dtiles/addons/cesium_godot/lib/libGodot3DTiles.macos.template_release.arm64.dylib
(~16 MB, Mach-O 64-bit shared library for arm64.)
Wiring into a Godot project
- Copy
godot3dtiles/addons/cesium_godotinto your project'saddons/. - The
Godot3DTiles.gdextensionalready references the macOS arm64 paths for bothmacos.debug.arm64andmacos.release.arm64. If you only builttemplate_release, duplicate it as debug so the editor loads it:cp addons/cesium_godot/lib/libGodot3DTiles.macos.template_release.arm64.dylib \ addons/cesium_godot/lib/libGodot3DTiles.macos.template_debug.arm64.dylib - Enable the plugin in
Project → Project Settings → Plugins(or append"res://addons/cesium_godot/plugin.cfg"toeditor_plugins/enabledinproject.godot).
Verify the GDExtension loaded:
godot --headless -s /path/to/probe.gd
where probe.gd does:
extends SceneTree
func _init():
for name in ("CesiumGeoreference", "Cesium3DTileset", "CesiumIonRasterOverlay"):
print(name, " registered: ", ClassDB.class_exists(name))
quit()
Expected: all three print true.
Known quirks on macOS
CesiumDynamicCamera's defaultmove_speed = 100m/s is designed for globe-scale navigation and is unusable at building scale. For Cartographic origin at city level, either lowermove_speedor write a custom camera that callstileset.update_tileset(camera_xform)each frame.- The default shaders reference
res://Shaders/spatial_texture_rotation.gdshaderwhich does not ship inaddons/cesium_godot/. Missing-shader errors appear on scene load but do not block tile streaming. (Tracking separately.) Godot3DTiles.gdextensionlists bothmacos.debug.arm64andmacos.release.arm64. Distributing pre-built binaries of both variants would unblock users who can't compile C++.
Rationale
Several users on forums ask whether the plugin "works on Mac". The answer is "yes, the code is ready" — only the build toolchain friction and the README listing discourage them. This doc closes that gap without changing any build code.