Browser Compatibility
SiliconGhetto targets modern browsers with WebAssembly and WebGPU support. This document details compatibility requirements, fallback behavior, and known limitations.
Minimum Requirements
| Feature | Required | Fallback |
|---|---|---|
| WebAssembly | Yes (no fallback) | — |
| WebGPU | Preferred | WebGL2 |
| Web Workers | Yes | Main thread mode |
| OffscreenCanvas | Preferred | Main thread rendering |
| SharedArrayBuffer | Optional | Single-threaded |
Browser Support Matrix
Tier 1: Full Support (WebGPU)
| Browser | Version | Platform |
|---|---|---|
| Chrome | 113+ | Windows, macOS, Linux, Android, ChromeOS |
| Edge | 113+ | Windows, macOS |
| Firefox | 121+ | Windows, macOS, Linux (behind flag until 139) |
| Safari | 18+ | macOS, iOS/iPadOS |
Tier 2: WebGL2 Fallback
| Browser | Version | Platform |
|---|---|---|
| Chrome | 56-112 | All |
| Firefox | 51-120 | All |
| Safari | 15-17 | macOS, iOS |
| Samsung Internet | 7.0+ | Android |
Not Supported
- Internet Explorer (any version)
- Browsers without WebAssembly support
- Browsers without WebGL2 support
Feature Detection
The engine detects GPU capabilities at initialization:
1. Request WebGPU adapter
├─ Success → Use WebGPU backend
└─ Failure → Fall back to WebGL2
2. Query device limits and features
3. Configure rendering pipeline based on available capabilities
WebGPU-Only Features
These features require WebGPU and are unavailable on WebGL2:
- Compute shaders
- Storage textures
- Timestamp queries (GPU profiling)
- Indirect draw calls
WebGL2 Limitations
When running on WebGL2:
- No compute shader support
- Limited texture format support
- No storage buffers
- Some shader features restricted
Cross-Origin Isolation
SiliconGhetto requires cross-origin isolation headers for full functionality:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Without these headers:
SharedArrayBufferis unavailable (no WASM threading)- High-resolution timers may be restricted
- Memory measurement APIs are unavailable
All deployment configurations include these headers. See ADR-003.
Mobile Support
Mobile-Specific Considerations
- Touch input: Handled via the
sg_inputcrate’s touch abstraction - Screen orientation: Games should handle both portrait and landscape
- GPU thermal throttling:
stress-labdemo detects and adapts to throttling - Memory constraints: Mobile devices have less GPU memory; asset quality may be reduced
iOS/iPadOS
- WebGPU available in Safari 18+ (Metal backend)
- OffscreenCanvas supported in Safari 16.4+
- SharedArrayBuffer requires cross-origin isolation
Android
- WebGPU in Chrome 113+ (Vulkan backend)
- OffscreenCanvas in Chrome 69+
- Some Android WebView versions have limited WebGPU support
Testing Compatibility
# Build a demo
wasm-pack build demos/stress-lab --target web --out-dir www/pkg
# Serve with isolation headers
# Open in target browser and check console for backend info
The stress-lab demo reports:
- GPU backend (WebGPU or WebGL2)
- Device capabilities
- Frame rate and performance metrics
- Quality tier selection
Known Issues
- Firefox WebGPU support requires
dom.webgpu.enabledflag in versions before 139 - Safari on older iOS may have WebGL2 performance issues with large draw calls
- Chrome on Linux with NVIDIA drivers may require
--enable-unsafe-webgpufor some features