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 API model while swapping backend/runtime packaging per platform.
- Generate and package bindings from
webgpu-base+ IDL/native sources.
It keeps one Java-facing API shape and generates target-specific glue/code for:
- JNI desktop runtime
- FFM desktop runtime
- TeaVM/WebAssembly web runtime
- Android JNI runtime
- Quick Start
- Project Structure
- Build Commands
- Run Examples
- CI Build Matrix
- Development Notes
- Installation
- License
Use ./gradlew on macOS/Linux and gradlew.bat on Windows.
Windows examples in this README use gradlew.bat.
Before local builds, ensure your environment is set up for your target:
- JNI/FFM Windows native builds: Visual Studio C++ tools.
- TeaVM web builds: emscripten.
- Android builds: Android NDK.
Canonical modules are defined in settings.gradle.kts.
:webgpu:webgpu-base- hand-authored Java templates and directive blocks.:webgpu:webgpu-build- generation and native build driver (WGPUBuild).:webgpu:webgpu-core- generated Java API layer.:webgpu:webgpu-jni- JNI runtime packaging.:webgpu:webgpu-ffm- FFM runtime packaging.:webgpu:webgpu-web- TeaVM/Web runtime packaging.:webgpu:webgpu-android- Android runtime packaging.:webgpu:webgpu-download- native dependency download tasks.
:demos:app:desktop-jni:demos:app:desktop-ffm:demos:app:web:demos:app:android
.\gradlew.bat :webgpu:webgpu-download:webgpu_download_glfw_windows
.\gradlew.bat :webgpu:webgpu-download:webgpu_download_windows_x86_64_wgpu
.\gradlew.bat :webgpu:webgpu-download:webgpu_download_windows_x86_64_dawn
.\gradlew.bat :webgpu:webgpu-build:webgpu_build_project_windows64_wgpu_jni
.\gradlew.bat :webgpu:webgpu-build:webgpu_build_project_windows64_dawn_jni./gradlew :webgpu:webgpu-download:webgpu_download_linux_x86_64_wgpu
./gradlew :webgpu:webgpu-download:webgpu_download_glfw_windows
./gradlew :webgpu:webgpu-build:webgpu_build_project_linux64_wgpu_jni./gradlew :webgpu:webgpu-download:webgpu_download_macos_x86_64_wgpu
./gradlew :webgpu:webgpu-download:webgpu_download_macos_aarch64_wgpu
./gradlew :webgpu:webgpu-download:webgpu_download_glfw_windows
./gradlew :webgpu:webgpu-build:webgpu_build_project_mac64_wgpu_jni
./gradlew :webgpu:webgpu-build:webgpu_build_project_macArm_wgpu_jni.\gradlew.bat :webgpu:webgpu-build:webgpu_build_project_windows64_wgpu_ffm
.\gradlew.bat :webgpu:webgpu-build:webgpu_build_project_windows64_dawn_ffm./gradlew :webgpu:webgpu-build:webgpu_build_project_linux64_wgpu_ffm./gradlew :webgpu:webgpu-build:webgpu_build_project_mac64_wgpu_ffm
./gradlew :webgpu:webgpu-build:webgpu_build_project_macArm_wgpu_ffm.\gradlew.bat :webgpu:webgpu-download:webgpu_download_emdawnwebgpu
.\gradlew.bat :webgpu:webgpu-build:webgpu_build_project_web_dawn_wasm.\gradlew.bat :webgpu:webgpu-download:webgpu_download_android_x86_64_wgpu
.\gradlew.bat :webgpu:webgpu-download:webgpu_download_android_i686_wgpu
.\gradlew.bat :webgpu:webgpu-download:webgpu_download_android_armv7_wgpu
.\gradlew.bat :webgpu:webgpu-download:webgpu_download_android_aarch64_wgpu
.\gradlew.bat :webgpu:webgpu-build:webgpu_build_project_android_wgpu_jniGenerated native outputs are placed under webgpu/webgpu-build/build/c++/libs/.
Desktop and web demo tasks are explicitly declared in demo module Gradle files.
.\gradlew.bat :demos:app:desktop-jni:webgpu_demo_app_run_desktop_jni
.\gradlew.bat :demos:app:desktop-ffm:webgpu_demo_app_run_desktop_ffm
.\gradlew.bat :demos:app:web:webgpu_demo_app_run_webAndroid demo install (provided by Android plugin tasking):
.\gradlew.bat :demos:app:android:installDebugFrom .github/workflows/build_and_upload.yml:
- Windows: JNI + FFM (
wgpuanddawn). - Linux: JNI + FFM (
wgpu). - macOS: JNI + FFM (
wgpu). - TeaVM: web build with
webgpu_build_project_web_dawn_wasm. - Android: JNI build with
webgpu_build_project_android_wgpu_jni.
- Primary edit locations:
webgpu/webgpu-base/src/main/java/**webgpu/webgpu-build/src/main/cpp/**
- Avoid manual edits in generated targets:
webgpu/webgpu-core/src/main/java/**webgpu/webgpu-ffm/src/main/java/**webgpu/webgpu-web/src/main/java/**
Use group ID com.github.xpenatan.jWebGPU.
dependencies {
implementation("com.github.xpenatan.jWebGPU:webgpu-core:<version>")
// Choose one runtime target
implementation("com.github.xpenatan.jWebGPU:webgpu-jni:<version>")
// implementation("com.github.xpenatan.jWebGPU:webgpu-ffm:<version>")
// implementation("com.github.xpenatan.jWebGPU:webgpu-web:<version>")
// implementation("com.github.xpenatan.jWebGPU:webgpu-android:<version>")
}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.