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

Table of Contents

Quick Start

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.

Project Structure

Canonical modules are defined in settings.gradle.kts.

Core library modules

  • :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.

Example app modules

  • :demos:app:desktop-jni
  • :demos:app:desktop-ffm
  • :demos:app:web
  • :demos:app:android

Build Commands

JNI

Windows (wgpu + dawn)

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

Linux (wgpu)

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

macOS (wgpu x86_64 + arm64)

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

FFM

Windows (wgpu + dawn)

.\gradlew.bat :webgpu:webgpu-build:webgpu_build_project_windows64_wgpu_ffm
.\gradlew.bat :webgpu:webgpu-build:webgpu_build_project_windows64_dawn_ffm

Linux (wgpu)

./gradlew :webgpu:webgpu-build:webgpu_build_project_linux64_wgpu_ffm

macOS (wgpu x86_64 + arm64)

./gradlew :webgpu:webgpu-build:webgpu_build_project_mac64_wgpu_ffm
./gradlew :webgpu:webgpu-build:webgpu_build_project_macArm_wgpu_ffm

TeaVM Web

.\gradlew.bat :webgpu:webgpu-download:webgpu_download_emdawnwebgpu
.\gradlew.bat :webgpu:webgpu-build:webgpu_build_project_web_dawn_wasm

Android JNI

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

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

Run Examples

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_web

Android demo install (provided by Android plugin tasking):

.\gradlew.bat :demos:app:android:installDebug

CI Build Matrix

From .github/workflows/build_and_upload.yml:

  • Windows: JNI + FFM (wgpu and dawn).
  • 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.

Development Notes

  • 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/**

Installation

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>")
}

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

Watchers

Forks

Packages

 
 
 

Contributors