Skip to content

xpenatan/jWebGPU

Repository files navigation

jWebGPU

Build Maven Central Version Snapshot

jWebGPU is a Java binding stack for WebGPU APIs across desktop, Android, and web targets.

image

What This Project Is For

  • 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/base templates plus webgpu/builder IDL/native sources using the jParser Gradle plugin.

Targets:

  • JNI desktop runtime
  • FFM desktop runtime
  • TeaVM C desktop runtime bootstrap (Windows x64 WGPU)
  • TeaVM/WebAssembly web runtime
  • Android JNI runtime

Project Structure

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:shared:c - generated TeaVM C implementations and portable native resources.
  • :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

Build Commands

Download tasks are manual prerequisites for native builds. jParser_build_* tasks do not run them automatically.

Generate Java bindings:

.\gradlew.bat :webgpu:builder:jParser_generate

Windows 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_dawn

Windows TeaVM C bootstrap:

.\gradlew.bat :webgpu:download:webgpu_download_glfw_windows
.\gradlew.bat :webgpu:download:webgpu_download_windows_x86_64_wgpu
.\gradlew.bat :webgpu:builder:jParser_build_windows64_teavm_c_wgpu
.\gradlew.bat :webgpu:shared:c:jar

Linux 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_dawn

macOS 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_dawn

TeaVM/WebAssembly:

.\gradlew.bat :webgpu:download:webgpu_download_emdawnwebgpu
.\gradlew.bat :webgpu:builder:jParser_build_web_wasm

Android 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_dawn

Generated native outputs are placed under webgpu/builder/build/c++/libs/.

Run Demos

.\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

Development Notes

  • 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, or webgpu/web/wasm.

Installation

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.

Ecosystem

For LibGDX projects, gdx-webgpu is a higher-level backend extension built on top of jWebGPU.

Support

If you find this project valuable and want to fuel its continued growth, please consider sponsoring.

License

jWebGPU is licensed under the Apache License 2.0.

About

WebGPU Java Bindings for wgpu-native and Dawn

Topics

Resources

License

Stars

10 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors