issue: choosing Kokoro.js (Browser) on an iPhone reloads the page once the model finishes loading
Before Submitting
- I searched open and closed issues and discussions for an existing report.
- I reproduced this bug on the latest release AND on the current
devbranch, right before submitting this report. I did not just check an old version or rely on a check from days ago. - I understand that maintainers want a well-written issue before any code pull request.
- This is not a security vulnerability.
Installation Method
Git Clone
Open WebUI Version
dev at 015dbc8
Operating System
iOS 26.4 (iPhone 13 Pro)
Browser
Safari
Ollama Version
Not involved.
Summary
On an iPhone, choosing Kokoro.js (Browser) as the text-to-speech engine downloads the model to 100%, then the page freezes for a few seconds and reloads on its own. It happens with every dtype I tried. With Safari's WebGPU feature flag turned off, the same model loads and works. Open WebUI runs Kokoro on WebGPU whenever the browser offers it, and Safari has WebGPU on by default from iOS 26, so on an iPhone with default settings Kokoro.js cannot be used.
Expected Behavior
The model finishes loading and the voice list appears, as it does with Safari's WebGPU flag off, or on a desktop browser with WebGPU.
Actual Behavior
The page freezes for a few seconds after the download reaches 100% and then reloads. Kokoro.js never becomes usable.
Steps to Reproduce
- On an iPhone with iOS 26 or later and Safari's default settings, open Open WebUI.
- Open Settings > Audio (the personal one) and set Text-to-Speech Engine to Kokoro.js (Browser).
- Choose a dtype. I tried
q4andfp32. - Wait for the model to load. At 100%, the page freezes for a few seconds and then reloads.
To compare:
- In the iPhone's Settings > Apps > Safari > Advanced > Feature Flags, turn off WebGPU and repeat with
q4. The model loads and the page stays. - On a desktop, Firefox on Linux with WebGPU working loads Kokoro.js on WebGPU and speaks normally.
| Device | WebGPU | Result |
|---|---|---|
iPhone 13 Pro, iOS 26.4, q4 |
On | Page reloads after 100% |
iPhone 13 Pro, iOS 26.4, fp32 |
On | Page reloads after 100% |
iPhone 13 Pro, iOS 26.4, q4 |
Off | Loads |
| PC, Firefox on Linux | On | Loads and speaks |
Logs, Screenshots, and Config
No console output is available on the iPhone, since the page reloads. No errors in the server log.
Additional Information
The settings page and the Kokoro worker both choose the device with !!navigator?.gpu ? 'webgpu' : 'wasm' (src/lib/components/chat/Settings/Audio.svelte, src/lib/workers/kokoro.worker.ts), so there is no way to use the WASM backend while Safari offers WebGPU. The kokoro-js README notes: "If using "webgpu", we recommend using dtype="fp32"", but fp32 reloads the page on the iPhone too.
#21816 handled browsers where navigator.gpu exists but no adapter is available. Here, Safari's WebGPU provides an adapter, and the page reloads after loading. Possibly related: #16618, Kokoro.js stuck loading in Safari on macOS 26 with WebGPU.
Source: open-webui/open-webui