April 23, 2026
Release v0.3.3 & v0.4.0 updates
Chalie v0
Chalie v0.3.3 has been released following the merge of rc-0.3.3 to main.
The voice synthesis system has reverted to a streaming design, returning {ok, total} immediately and pushing WAV chunks via output:events (tts_chunk / tts_done).
This streaming architecture replaces the previous single-blob approach, addressing timeouts on CPU-only hosts for long text synthesis.
Synth thread failures now correctly release the TTS_CONCURRENCY semaphore, preventing persistent 503 “TTS busy” errors.
The frontend voice player was rewritten using AudioContext and chained AudioBufferSource, supporting Play, Pause, skip 10s, and close functions on the cumulative chunk timeline.
The speaker button on the renderer no longer relies on synchronous Audio() unlock; AudioContext.resume() is sufficient for iOS autoplay.
The TTS logic now forwards tts_chunk/tts_done to the document via chalie:tts-chunk / chalie:tts-done CustomEvents.
In performance updates, chunk size was widened from 400 to 800, and Kokoro now automatically detects EP, utilizing GPU/CoreML when available for synthesis.
-
Restores pub/sub chunk streaming for voice synthesis.
-
Fixes persistent 503 “TTS busy” errors by improving semaphore release logic.
-
Refactors voice player using AudioContext for streaming chunk playback.
-
Increases chunk size to 800 and enables auto-detection of execution providers (GPU/CoreML) in Kokoro.
-
Fixes UI scroll behavior by changing history.scrollRestoration to ‘manual’ and implementing double-rAF scrolls.
-
Updates documentation to reflect the new pub/sub streaming contract for speaker playback.