jWebGPU is a Java binding stack for WebGPU APIs across desktop, Android, and web targets.
- Browser example: Studio demo
- Android app: Google Play
- Build and ship WebGPU-capable Java apps across multiple runtimes.
- Reuse the same Java-facing API while swapping backend/runtime packaging per platform.
- Generate bindings from
webgpu/basetemplates pluswebgpu/builderIDL/native sources using the jParser Gradle plugin.
Targets:
- JNI desktop runtime
- FFM desktop runtime
- TeaVM/WebAssembly web runtime
- Android JNI runtime
Canonical modules are defined in settings.gradle.kts.
Library modules:
:webgpu:download- native dependency download tasks.:webgpu:builder- jParser plugin configuration and native build driver.:webgpu:base- hand-authored Java templates and directive blocks.:webgpu:core- generated Java API layer.:webgpu:shared:jni- generated JNI Java runtime.:webgpu:desktop:jni- desktop JNI native packaging.:webgpu:desktop:ffm- generated FFM Java runtime and desktop native packaging.:webgpu:web:wasm- TeaVM/WebAssembly runtime packaging.:webgpu:android:jni- WGPU/Dawn Android JNI runtime packaging.
Demo modules:
:demos:app:desktop-jni:demos:app:desktop-ffm:demos:app:web:demos:app:android
Download tasks are manual prerequisites for native builds. jParser_build_* tasks do not run them automatically.
Generate Java bindings:
.\gradlew.bat :webgpu:builder:jParser_generateWindows JNI/FFM:
.\gradlew.bat :webgpu:download:webgpu_download_glfw_windows
.\gradlew.bat :webgpu:download:webgpu_download_windows_x86_64_wgpu
.\gradlew.bat :webgpu:download:webgpu_download_windows_x86_64_dawn
.\gradlew.bat :webgpu:builder:jParser_build_windows64_jni_wgpu :webgpu:builder:jParser_build_windows64_jni_dawn
.\gradlew.bat :webgpu:builder:jParser_build_windows64_ffm_wgpu :webgpu:builder:jParser_build_windows64_ffm_dawnLinux JNI/FFM:
./gradlew :webgpu:download:webgpu_download_linux_x86_64_wgpu
./gradlew :webgpu:download:webgpu_download_linux_x86_64_dawn
./gradlew :webgpu:download:webgpu_download_glfw_windows
./gradlew :webgpu:builder:jParser_build_linux64_jni_wgpu :webgpu:builder:jParser_build_linux64_jni_dawn
./gradlew :webgpu:builder:jParser_build_linux64_ffm_wgpu :webgpu:builder:jParser_build_linux64_ffm_dawnmacOS JNI/FFM:
./gradlew :webgpu:download:webgpu_download_macos_x86_64_wgpu
./gradlew :webgpu:download:webgpu_download_macos_aarch64_wgpu
./gradlew :webgpu:download:webgpu_download_macos_x86_64_dawn
./gradlew :webgpu:download:webgpu_download_macos_aarch64_dawn
./gradlew :webgpu:download:webgpu_download_glfw_windows
./gradlew :webgpu:builder:jParser_build_mac64_jni_wgpu :webgpu:builder:jParser_build_mac64_jni_dawn :webgpu:builder:jParser_build_macArm_jni_wgpu :webgpu:builder:jParser_build_macArm_jni_dawn
./gradlew :webgpu:builder:jParser_build_mac64_ffm_wgpu :webgpu:builder:jParser_build_mac64_ffm_dawn :webgpu:builder:jParser_build_macArm_ffm_wgpu :webgpu:builder:jParser_build_macArm_ffm_dawnTeaVM/WebAssembly:
.\gradlew.bat :webgpu:download:webgpu_download_emdawnwebgpu
.\gradlew.bat :webgpu:builder:jParser_build_web_wasmAndroid JNI:
.\gradlew.bat :webgpu:download:webgpu_download_android_x86_64_wgpu
.\gradlew.bat :webgpu:download:webgpu_download_android_i686_wgpu
.\gradlew.bat :webgpu:download:webgpu_download_android_armv7_wgpu
.\gradlew.bat :webgpu:download:webgpu_download_android_aarch64_wgpu
.\gradlew.bat :webgpu:download:webgpu_download_android_x86_64_dawn
.\gradlew.bat :webgpu:download:webgpu_download_android_i686_dawn
.\gradlew.bat :webgpu:download:webgpu_download_android_armv7_dawn
.\gradlew.bat :webgpu:download:webgpu_download_android_aarch64_dawn
.\gradlew.bat :webgpu:builder:jParser_build_android_jni_wgpu :webgpu:builder:jParser_build_android_jni_dawnGenerated native outputs are placed under webgpu/builder/build/c++/libs/.
.\gradlew.bat :demos:app:desktop-jni:webgpu_demo_app_desktop_jni_wgpu_run
.\gradlew.bat :demos:app:desktop-jni:webgpu_demo_app_desktop_jni_dawn_run
.\gradlew.bat :demos:app:desktop-ffm:webgpu_demo_app_desktop_ffm_wgpu_run
.\gradlew.bat :demos:app:desktop-ffm:webgpu_demo_app_desktop_ffm_dawn_run
.\gradlew.bat :demos:app:web:webgpu_demo_app_web_run
.\gradlew.bat :demos:app:android:installWgpuDebug
.\gradlew.bat :demos:app:android:installDawnDebug- Edit binding templates in
webgpu/base/src/main/java/**. - Edit IDL and native glue in
webgpu/builder/src/main/cpp/**. - Do not hand-edit generated Java under
webgpu/core,webgpu/shared/jni,webgpu/desktop/ffm, orwebgpu/web/wasm.
Use group ID com.github.xpenatan.jWebGPU.
dependencies {
implementation("com.github.xpenatan.jWebGPU:webgpu-core:<version>")
// Desktop JNI: choose one backend native artifact for your platform.
implementation("com.github.xpenatan.jWebGPU:webgpu-desktop-jni:<version>")
runtimeOnly("com.github.xpenatan.jWebGPU:webgpu-desktop-jni-wgpu_windows_x64:<version>")
// runtimeOnly("com.github.xpenatan.jWebGPU:webgpu-desktop-jni-dawn_windows_x64:<version>")
// implementation("com.github.xpenatan.jWebGPU:webgpu-desktop-ffm:<version>")
// implementation("com.github.xpenatan.jWebGPU:webgpu-web:<version>")
// Android: choose exactly one backend AAR.
// implementation("com.github.xpenatan.jWebGPU:webgpu-android-wgpu:<version>")
// implementation("com.github.xpenatan.jWebGPU:webgpu-android-dawn:<version>")
// `webgpu-android` remains a compatibility alias for the WGPU AAR.
}Android backend AARs are mutually exclusive because both package libjWebGPU.so. Applications using webgpu-android-dawn must initialize with JWebGPULoader.init(JWebGPUBackend.DAWN, listener); the overload without a backend keeps WGPU as its default.
For LibGDX projects, gdx-webgpu is a higher-level backend extension built on top of jWebGPU.
If you find this project valuable and want to fuel its continued growth, please consider sponsoring.
jWebGPU is licensed under the Apache License 2.0.