Kokoro-82M is an open-weight text-to-speech model that is small enough to run on consumer devices. That size is the unlock: instead of sending every paragraph to a cloud API, the browser (or phone) can synthesize audio locally after you download the weights once.
Junco uses Kokoro in two places on purpose.
Junco Reader (browser)
Junco Reader loads Kokoro through kokoro-js / Transformers.js. On capable machines it prefers WebGPU for faster inference; otherwise it falls back to WASM. Synthesis runs in a Web Worker so the page stays responsive, and audio is scheduled for gapless playback.
You opt in to the model download. Weights can be cached in the browser so the next visit skips the network. Your PDFs and pasted text are not part of that download — they never leave the device for narration.
Junco iOS (newsletter podcast)
The Junco iOS app turns newsletters into a daily podcast. Premium voices can render on-device with the same Kokoro family, so the listening experience stays consistent when you move from a one-off PDF in Reader to tomorrow morning’s inbox episode.
Why open weights matter for a funnel tool
A free browser tool that depended on a metered cloud TTS API would either go broke or put a usage gate in front of the listen button. On-device open weights keep Reader honest: free to try, private by default, and aligned with the iOS product’s privacy story.
Limits to know
- First download is tens to hundreds of megabytes depending on precision / device path
- Very old browsers without WASM will not work
- Image-only scanned PDFs still need OCR elsewhere first
Try Kokoro without an account
Free PDF out loud in Junco Reader →
Curious about the newsletter side? Start at tryjunco.com or the App Store listing.