This repository scaffolds a GDExtension that will embed SIP calling via PJSIP.
- GDExtension skeleton is in place.
- PJSIP (
pjsua) integration is wired for init, registration, calls, and audio device selection. - Godot-facing API is active (
SIPClient,SIPCall) with async signals from native callbacks.
This repository distributes binaries that link against pjproject (PJSIP).
- Distributed addon binaries and releases are licensed under
GPL-2.0-or-later. - The top-level
LICENSEfile contains the GNU GPL v2 text. pjprojectis included as a submodule inthirdparty/pjsip/pjprojectand keeps its own upstream licensing and notices.
If you need non-GPL distribution terms, use an appropriate commercial licensing path for pjproject and adjust this repository's distribution model accordingly.
- Godot 4.x headers via
godot-cpp. - PJSIP built for your target platform(s).
- CMake 3.22+ and a C++17 compiler.
This repository uses a git submodule for pjproject.
git clone --recurse-submodules <repo-url>If you already cloned without submodules:
git submodule update --init --recursive- Build
godot-cppfor your target platform and note its path. - Build PJSIP and note its root path (contains
pjlib/include). - Configure + build this project:
cmake -S . -B build \
-DGODOT_CPP_PATH=/path/to/godot-cpp \
-DPJSIP_PATH=/path/to/pjsip
cmake --build build --config DebugThe build outputs to build/bin/ with Godot-style names like:
godot_sip.windows.debug.x86_64.dllgodot_sip.linux.release.x86_64.sogodot_sip.macos.release.arm64.dylib
Copy the resulting library to your Godot project at addons/godot_sip/bin/ and keep the extension manifest at addons/godot_sip/godot_sip.gdextension.
SIPClientinitialize(user_agent: String) -> boolregister_account(sip_uri, username, password, registrar) -> boolmake_call(destination_uri: String) -> SIPCallhangup_call(call: SIPCall)answer_call(call: SIPCall)reject_call(call: SIPCall)get_audio_input_devices() -> PackedStringArrayget_audio_output_devices() -> PackedStringArrayselect_audio_input_device(name: String) -> boolselect_audio_output_device(name: String) -> boolregistration_state_changed(state)signalincoming_call(call)signalcall_state_changed(call, state)signal
- Open
addons/godot_sip/demo/sip_demo.tscnin Godot. - Fill account fields, then click
Register. - Enter destination URI and click
Call. - Use
Answer,Reject,Hang Upfor active/incoming calls. - Pick audio devices from the dropdowns or refresh with
Refresh Audio Devices.
- Add call hold/resume, transfer, and DTMF APIs.
- Add transport options (TCP/TLS, custom SIP port, ICE/STUN/TURN config).
- Add platform packaging scripts to copy the right
.dll/.so/.dylibinto a Godot project automatically.