Launching gd-empd



LAUNCHING gd-empd v1.0: Pure Data Meets Godot
November 23, 2025
We're excited to announce gd-empd - a GDExtension that brings the full power of Pure Data into Godot Engine, with first-class WebAssembly support!
RUN PURE DATA EVERYWHERE
gd-empd lets you run Pure Data patches directly in Godot - on desktop and web browsers. Same patches, same behavior, no compromises.
THE PROBLEM WE SOLVED
Game audio middleware is expensive and restrictive. Pure Data is free and powerful, but integrating it into game engines has been painful - especially for web. We fixed that.
HOW IT'S DIFFERENT
There are other Pure Data integrations for Godot (godot-pd, godot-pure-data), and we appreciate their pioneering work! Here's what makes gd-empd unique:
- FIRST-CLASS WEB SUPPORT - Only implementation with working WebAssembly exports using threaded WASM + SharedArrayBuffer
- 3-LINE INTEGRATION - PdNode handles everything automatically: initialization, audio pumping, cleanup
- AUTO-GENERATED UI - Patches define their own interface via metadata. Zero manual UI coding required
- UNIVERSAL RESOURCE ACCESS - Patches load from res:// on ALL platforms, including web exports
- TOUCH-OPTIMIZED UI - Responsive controls that work great on desktop and touch devices
PLATFORM SUPPORT
Desktop: macOS (Universal arm64+x86_64), Linux (x86_64, arm64), Windows (x86_64) Web: Chrome, Firefox, Safari (with SharedArrayBuffer) Mobile: iOS and Android (experimental - not yet fully tested)
KEY FEATURES
AUTO-UI SYSTEM Add metadata to your Pure Data patch: #X text 20 20 @ui-param slider:Volume vol 0.0 1.0 0.5;
Set one property in Godot: pd.ui_auto_parent = "Parent"
Get: Modern responsive UI, inspector-editable parameters, automatic reset buttons, 7 control types, mobile-first design
DEAD SIMPLE CODE Traditional approach (30+ lines): var instance = PdInstance.new() instance.load_patch("res://patch.pd")
manual audio setup, UI creation, cleanup...
PdNode approach (3 lines): var pd = PdNode.new() pd.patch_path = "res://patch.pd" add_child(pd) # Done!
FULL PD VANILLA SUPPORT
All 200+ Pure Data objects, arrays/tables, MIDI I/O, audio file operations ([readsf], [writesf]), sample-accurate timing
TECHNICAL ACHIEVEMENTS
HYBRID ARCHITECTURE Native builds use libpd with direct C++ binding. Web builds use Pure Data compiled to WebAssembly via Emscripten. Result: Perfect behavioral parity everywhere.
WEBASSEMBLY BREAKTHROUGH Getting file I/O working in browsers was the hardest challenge:
- Threaded WASM builds with SharedArrayBuffer
- Automatic PCK extraction - files transparently copied to Emscripten filesystem
- Universal patch extraction works on ALL platforms
Result: [readsf] and [writesf] just work in browsers. No hacks.
MEMORY SAFETY Comprehensive lifecycle documentation prevents memory leaks and duplicate callbacks. See INSTANCE_LIFECYCLE.md for details.
TRY THE EXAMPLES
Interactive demo includes:
- Auto UI Synth - See the UI system in action
- MIDI Echo Test - Hardware MIDI integration
- Simple Synth - Basic parameter control
- Array Example - Wavetable synthesis
- Sampler - Audio file loading with [readsf~]
Play now: https://gllmar.itch.io/gd-empd-examples
gd-empd-examples
Pure-data patchs in godot
| Status | Released |
| Category | Tool |
| Author | gllmar |
| Tags | Audio, Experimental, Godot, Music, Music Production, Open Source, Soundtoy, sourcecode, synthesizer, tool |
Leave a comment
Log in with itch.io to leave a comment.