FreeTTS

Privacy

What FreeTTS sends over the network — and, more importantly, what it never sends. Each statement below describes the app as built; the code is the proof.

Your text never leaves your device

With the Kokoro engine, speech is synthesized inside a Web Worker on your own machine, using the Kokoro-82M neural model running in your browser. The text you type is processed locally — it is never uploaded, logged, or sent to any TTS API, analytics service, or third party.

There is no account system, no analytics, no tracking, and no cookies in this app — none of the code exists to make any of those possible.

The only network traffic: a one-time model download

To synthesize speech, your browser needs the AI model itself. On first use, the Kokoro engine downloads:

  • The Kokoro-82M speech model from Hugging Face (the public onnx-community/Kokoro-82M-v1.0-ONNX release) — about 92 MB quantized for CPU, about 326 MB full-precision for WebGPU.
  • The voice file you select (~0.5 MB each) from the same source.
  • The WebAssembly inference runtime (~30 MB) — from a public CDN (jsDelivr, the transformers.js default) on most devices; served with the app itself on the compatibility path.

These are identical public files for every user — they contain no personal data and reveal nothing about you or your text. After download they are cached in your browser's Cache Storage (transformers-cache and kokoro-voices), and you can inspect and delete them anytime in Settings → Downloaded models.

System voices: on-device only

The optional “System voices” engine uses your device's built-in speech synthesizer. FreeTTS deliberately uses only on-device voices — it filters out browser “network” voices (such as Chrome's Google voices), which would send your text to the vendor's servers. If your device has no local voices, this engine simply has nothing to offer.

What is stored on your device
  • Generation history: the full text and settings (voice, engine, speed, date) of your generations — up to 50 entries, newest first. Generated audio is never saved; only what is needed to regenerate it. View it on the History page and delete entries there, or clear everything from the Settings page.
  • Your theme choice (light or dark).
  • Your Studio draft text, so it survives navigation — it is overwritten as you type.

All of this lives in your browser's localStorage, on your device only. Nothing is synced anywhere.

Offline

In the production build, a service worker caches the app shell, so the app loads without a connection. Once the model is downloaded and cached, synthesis needs no network at all.

Honest limits: browsers may evict cached files under storage pressure — the app will simply re-download them when needed, which is an inconvenience, not a privacy event. Downloading a file necessarily reveals your IP address to the file host, exactly like downloading any file from the internet. And this page describes the app as built: if you deploy or modify it, audit your own changes — adding analytics or a backend would break these guarantees.