Skip to content

Conversation

@willemkokke
Copy link
Owner

@willemkokke willemkokke commented Jan 5, 2026

Summary

  • Set up monorepo structure with uv workspace for unified WebGPU API
  • Add package skeletons: gpu-api, gpu-dawn, gpu-wgpu, gpu-pyodide, gpu-canvas, gpu-wesl
  • Configure CI/CD workflows for wheel building and testing across all platforms
  • Add development tooling (ruff, basedpyright, duties.py) and environment setup scripts

Platform Support

  • Native: Linux/Windows/macOS (x64/ARM64)
  • WASM: Pyodide for browser environments
  • Python: 3.10-3.14 including free-threaded builds

Test Plan

  • CI workflows pass on all platforms
  • Package imports work correctly
  • Type checking passes with basedpyright
  • Linting passes with ruff

GPU project providing WebGPU access across as wide of the Python ecosystem as possible:
- gpu-api: Pure Python unified API abstraction
- gpu-dawn: Dawn (Google) backend for native platforms
- gpu-wgpu: wgpu-native (Rust) backend for native platforms
- gpu-pyodide: Dawn Emscripten backend for browser/Pyodide
- gpu-canvas: Windowing system integration
- gpu-wesl: WESL for extended WGSL support

Platform support: Linux/Windows/macOS (x64/ARM64), Pyodide/WASM
Python versions: 3.10-3.14 including free-threaded builds

Includes:
- Package skeletons with nanobind/scikit-build-core setup
- CI/CD workflows for wheel building and testing
- Development tooling (uv, ruff, basedpyright, duties.py)
- Environment setup scripts and prerequisites documentation
- CLAUDE.md with development workflow instructions
- test.yml: Build native wheels within each test job for the specific
  Python version being tested (native wheels are ABI-specific)
- Remove build-frontend = "build[uv]" from cibuildwheel configs (requires
  pre-installed uv in containers which adds complexity)
- Add periods to docstrings in C++ source so generated stubs pass linting
- Use macos-15-intel (Intel) for x86_64 builds instead of cross-compiling on ARM64
- Revert CMake cross-compile detection (not needed with native runners)
- Use string format for repair-wheel-command to fix {package} expansion
- Fix gpu-pyodide cibuildwheel config (build selector goes in global section)
- Remove build_dawn_pyodide job (gpu-pyodide handles Pyodide builds)
- Upgrade cibuildwheel from v2.22 to v3.3.1 for {package} placeholder support
- Remove unused pyodide config from gpu-dawn/pyproject.toml
- Update dev dependency to cibuildwheel>=3.3.1 (Python 3.11+)
- Build sdists first, then build wheels from those sdists
- Add platform-specific repair-wheel-command configs:
  - Linux: auditwheel repair
  - macOS: delocate-wheel
  - Windows: delvewheel repair (with before-build pip install)
- Set macOS deployment targets: 10.15 for x86_64, 11.0 for arm64
- Consolidate workflow from 11 jobs to 7 jobs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants