sahilmahendrakar/chickadee

Reads any web page aloud, entirely on your machine. Kokoro-82M via WebGPU locally. No server, no account, no API key.

0

stars

45

commits

JavaScript

primary language

Sep 14, 2026

updated

usechickadee.com

README

Chickadee

Any page, read aloud, locally.

Add to Chrome  ·  usechickadee.com


Chickadee is a browser extension that reads web pages aloud in a natural, human-sounding voice. The speech model runs on your own computer, inside the browser, so there is no server, no account, no API key, and nothing to pay for. Nothing you read is ever uploaded.

What it does

  • Reads any article aloud in one of twelve voices, at a speed you choose.
  • Highlights each sentence on the real page as it's spoken, not in a separate reader view.
  • Starts wherever you like. Right-click any word and choose "Read aloud from here".
  • Works offline. The voice downloads once (about 310 MB) and then never touches the network again.
  • Keeps your reading private. The page never leaves your machine, because there's nowhere for it to go.

How to use it

  1. Open an article and press ⌥R (Alt+R), or click the Chickadee button in the toolbar.
  2. ⌥P (Alt+P) pauses and resumes. The small bar at the bottom of the page also has previous, next, speed, and stop.
  3. Right-click a sentence and pick Read aloud from here to start partway through.
  4. Click the toolbar button to change the voice or the default speed. Your choice is remembered.

The first time you read something, Chickadee downloads the voice model once. After that it starts in a couple of seconds.

What you need

  • A Chrome-based browser (Chrome, Edge, Arc, Brave, and friends) version 113 or newer.
  • A computer whose browser can use the graphics card through WebGPU. Any Apple Silicon Mac or a laptop with recent integrated graphics is comfortably enough. Chickadee checks on first run and tells you plainly if your machine can't do it.

Why it's different

Most read-aloud tools either use the operating system's robotic built-in voice, or send your text to a server where a large model produces good audio and sends it back. Chickadee gets the good audio without the server: it runs Kokoro-82M, a small open speech model, directly in the browser on your GPU.

A few things fall out of that:

  • The privacy story is an architecture, not a policy. There is no server in the system.
  • It works on a plane, in a tunnel, or in the wilderness.
  • It's free forever. The only cost is a one-time download.
  • It asks for almost nothing. The extension has no standing access to any website; it is loaded into a page only when you ask it to read one (the activeTab permission).

Under the hood

Three small pieces, and the model:

PieceRole
extension/ext/content.jsSplits the live page into sentences, highlights the current one with the CSS Custom Highlight API (no DOM changes), draws the control bar
extension/ext/engine.htmlA hidden frame that holds the model and the <audio> element
extension/ext/background.jsRoutes the toolbar button, keyboard shortcuts, and right-click menu to the page you're on

For each sentence: text → phonemes (espeak-ng compiled to WebAssembly) → tokens → Kokoro-82M (ONNX Runtime on WebGPU) → 24 kHz audio. A "voice" is a table of 510 style vectors indexed by sentence length, so delivery adapts to how long a sentence is. The next two sentences generate while the current one plays, so playback never waits.

Kokoro runs in full precision on the GPU only. The 8-bit build produces corrupt audio on WebGPU and every CPU-only configuration generates slower than it plays, so the extension requires WebGPU rather than falling back to something worse.

Developing

cd extension
npm install
node build.mjs        # bundles the engine and stages the ONNX runtime into ext/vendor
./package.sh          # produces chickadee-<version>.zip for the Chrome Web Store

Then load extension/ext unpacked at chrome://extensions with Developer mode on.

After changing manifest.json, remove the extension and load it unpacked again; the reload button doesn't re-read the manifest.

More detail, including things that were tried and reverted, lives in extension/README.md.

The website

web/ is a Next.js site. The landing page narrates its own copy with audio generated by the same model, under a soft bed of public-domain chickadee recordings that ducks while the voice speaks. It deploys to Vercel as-is.

Privacy

Chickadee collects nothing and sends nothing. The full policy is in PRIVACY.md and at usechickadee.com/privacy.

Built on

Kokoro-82M (Apache-2.0) · kokoro-js (Apache-2.0) · Transformers.js (Apache-2.0) · ONNX Runtime Web (MIT) · espeak-ng (GPL-3.0, via the phonemizer package)

License

Apache-2.0 — see LICENSE.

Contributors

claude

9 commits

sahilmahendrakar/chickadee

Reads any web page aloud, entirely on your machine. Kokoro-82M via WebGPU locally. No server, no account, no API key.

0

stars

45

commits

JavaScript

primary language

Sep 14, 2026

updated

usechickadee.com

README

Chickadee

Any page, read aloud, locally.

Add to Chrome  ·  usechickadee.com


Chickadee is a browser extension that reads web pages aloud in a natural, human-sounding voice. The speech model runs on your own computer, inside the browser, so there is no server, no account, no API key, and nothing to pay for. Nothing you read is ever uploaded.

What it does

  • Reads any article aloud in one of twelve voices, at a speed you choose.
  • Highlights each sentence on the real page as it's spoken, not in a separate reader view.
  • Starts wherever you like. Right-click any word and choose "Read aloud from here".
  • Works offline. The voice downloads once (about 310 MB) and then never touches the network again.
  • Keeps your reading private. The page never leaves your machine, because there's nowhere for it to go.

How to use it

  1. Open an article and press ⌥R (Alt+R), or click the Chickadee button in the toolbar.
  2. ⌥P (Alt+P) pauses and resumes. The small bar at the bottom of the page also has previous, next, speed, and stop.
  3. Right-click a sentence and pick Read aloud from here to start partway through.
  4. Click the toolbar button to change the voice or the default speed. Your choice is remembered.

The first time you read something, Chickadee downloads the voice model once. After that it starts in a couple of seconds.

What you need

  • A Chrome-based browser (Chrome, Edge, Arc, Brave, and friends) version 113 or newer.
  • A computer whose browser can use the graphics card through WebGPU. Any Apple Silicon Mac or a laptop with recent integrated graphics is comfortably enough. Chickadee checks on first run and tells you plainly if your machine can't do it.

Why it's different

Most read-aloud tools either use the operating system's robotic built-in voice, or send your text to a server where a large model produces good audio and sends it back. Chickadee gets the good audio without the server: it runs Kokoro-82M, a small open speech model, directly in the browser on your GPU.

A few things fall out of that:

  • The privacy story is an architecture, not a policy. There is no server in the system.
  • It works on a plane, in a tunnel, or in the wilderness.
  • It's free forever. The only cost is a one-time download.
  • It asks for almost nothing. The extension has no standing access to any website; it is loaded into a page only when you ask it to read one (the activeTab permission).

Under the hood

Three small pieces, and the model:

PieceRole
extension/ext/content.jsSplits the live page into sentences, highlights the current one with the CSS Custom Highlight API (no DOM changes), draws the control bar
extension/ext/engine.htmlA hidden frame that holds the model and the <audio> element
extension/ext/background.jsRoutes the toolbar button, keyboard shortcuts, and right-click menu to the page you're on

For each sentence: text → phonemes (espeak-ng compiled to WebAssembly) → tokens → Kokoro-82M (ONNX Runtime on WebGPU) → 24 kHz audio. A "voice" is a table of 510 style vectors indexed by sentence length, so delivery adapts to how long a sentence is. The next two sentences generate while the current one plays, so playback never waits.

Kokoro runs in full precision on the GPU only. The 8-bit build produces corrupt audio on WebGPU and every CPU-only configuration generates slower than it plays, so the extension requires WebGPU rather than falling back to something worse.

Developing

cd extension
npm install
node build.mjs        # bundles the engine and stages the ONNX runtime into ext/vendor
./package.sh          # produces chickadee-<version>.zip for the Chrome Web Store

Then load extension/ext unpacked at chrome://extensions with Developer mode on.

After changing manifest.json, remove the extension and load it unpacked again; the reload button doesn't re-read the manifest.

More detail, including things that were tried and reverted, lives in extension/README.md.

The website

web/ is a Next.js site. The landing page narrates its own copy with audio generated by the same model, under a soft bed of public-domain chickadee recordings that ducks while the voice speaks. It deploys to Vercel as-is.

Privacy

Chickadee collects nothing and sends nothing. The full policy is in PRIVACY.md and at usechickadee.com/privacy.

Built on

Kokoro-82M (Apache-2.0) · kokoro-js (Apache-2.0) · Transformers.js (Apache-2.0) · ONNX Runtime Web (MIT) · espeak-ng (GPL-3.0, via the phonemizer package)

License

Apache-2.0 — see LICENSE.

Contributors

claude

9 commits

Languages

JavaScript

69.1%

CSS

24.9%

HTML

5.5%