Closer languages. A bigger world.
An open-source browser extension for bilingual translation.
Install · Website · User guide · Sponsorship · Privacy policy · 简体中文 · LINUX DO Community · GPL-3.0
FluentRead displays translations alongside the original webpage and provides selection translation, AI reading assistance, image and document translation, and bilingual video subtitles. Its reading card provides contextual explanations and follow-up questions.
▶ Watch the 56-second introduction
For a closer look, watch the full official introduction (4+ minutes, in Chinese on Bilibili).
| Feature | Description |
|---|---|
| Webpage translation | Bilingual page translation, hover and selection translation, original-text restoration, and automatic translation rules. |
| AI reading card | Meaning, sentence analysis, usage explanations, and practice, with paragraph context and follow-up questions. |
| Learning center | Save words, phrases, and sentences with their original context for study and review. |
| Image and area translation | Recognize text in webpage images or selected screen areas and display translations that can be copied. |
| Document translation | Read PDF, ePub, DOCX, and other supported formats in two languages, edit translations, and export files. |
| Video subtitles | Bilingual subtitles on YouTube and X; supported X videos can also use local AI transcription. |
| Services and settings | Free translation services, DeepL, AI providers, and local Ollama models, with glossaries, translation styles, shortcuts, and menu layout settings. |
See the user guide for instructions and supported formats. AI explanations require a configured AI service. Third-party pricing and availability depend on the provider.
Chrome · Edge · Firefox · Userscript
- Install the extension and refresh the webpage.
- Open FluentRead and select a target language. The source language defaults to automatic detection and can also be selected manually.
- Choose “Translate page.” Enable selection translation and other tools in settings as needed.
Store updates may arrive at different times. The userscript provides core webpage translation features. See the installation guide for browser and feature availability.
The project is currently funded mainly out of pocket, with tens of thousands of US dollars spent each month on API tokens for open-source development. We believe FluentRead can make the world a little better.
Requirements: Node.js 20 or later and pnpm 9.
Node.js 22.12 or later in the 22.x line is recommended, matching CI; .nvmrc selects Node 22. Check both node --version and pnpm exec node --version after switching. Older Node 20 releases can emit an experimental JSON-module warning from WXT's spinner dependency; using Node 22 avoids it without suppressing warnings. Type-check and userscript compression caches are described in testing.
pnpm install --frozen-lockfile
pnpm devUse pnpm build to build the Chrome extension and pnpm zip to generate one -chrome.zip, preserving its public key, fixed extension ID, and Google OAuth configuration. Use the same ZIP for manual installation and preparation for an update to the existing Chrome Web Store item. Packaging removes the obsolete -chrome-store.zip for the same version. See extension identity and packages for details.
Use pnpm build:firefox to build the Firefox extension, pnpm zip:firefox to generate its installation and review-source ZIPs, and pnpm zip:edge to generate the separate Microsoft Edge Add-ons ZIP without the Chrome key. The review-source ZIP includes the extension build inputs; website assets, test evidence, and other distribution targets are omitted. Use pnpm compile for type checking and pnpm docs:build to build the website. See architecture and testing for project conventions.
For Mozilla reviewers, the Firefox build uses Node.js 20 or later, pnpm 9 (the exact pnpm version is pinned in packageManager), and the checked-in pnpm-lock.yaml. From the source ZIP root, run pnpm install --frozen-lockfile followed by pnpm build:firefox; the generated extension is in .output/firefox-mv2. No private credentials or .env file are needed. The build keeps the upstream vendor files intact and applies source-hash-checked adaptations in scripts/testing/extension-csp-build.ts, scripts/testing/defuddle-entity-build.ts, and scripts/wasm/package-diagnostics.ts. Those transformations are part of the submitted sources and run on every build.
The AMO warning remediation build was checked on macOS ARM64 with Node.js 20.11.1 and pnpm 9.12.1; there are no OS-specific native compilation steps for the extension. Vendored OCR sources and licenses are listed in public/fluent-read-ocr/NOTICE.md. The other patched packages and exact versions come from package.json and pnpm-lock.yaml: Tesseract.js/regenerator-runtime, JSZip, PDF.js, fontkit, lodash-es, ONNX Runtime Web, and Defuddle. Their original files remain available through the official npm packages. The CSP adaptations replace global-object fallbacks with globalThis, reject unused string timer callbacks, keep PDF.js on its interpreter, and replace the ONNX Emscripten invoker with a static closure. Defuddle's entity-decoding call is adapted to the shared entities text decoder; its original package is not modified. WASM binaries are unchanged.
Before AMO submission, install Mozilla's validator separately, for example npm install --prefix /tmp/fluentread-amo-tools --ignore-scripts --no-audit --no-fund addons-linter@10.15.0, then run pnpm lint:firefox:amo --linter /tmp/fluentread-amo-tools/node_modules/.bin/addons-linter --report /tmp/fluentread-amo-report.json. The command checks the built Firefox directory by default; pass the installation ZIP as the first argument to check that exact upload. It preserves the complete report and fails on errors or validator failure. Warnings remain visible for review. Successful local validation does not confirm AMO signing or approval.
Run pnpm storybook to explore the real Vue components and interface themes locally. See the design system guide. Use pnpm docs:build:site to build the documentation with the component explorer.
Report bugs and propose changes through Issues. Pull requests for code, documentation, interface translations, and website adaptation are welcome.
FluentRead is an open-source project whose continued development is made possible by the generous support of its community. Voluntary contributions are welcome through either service.
| WeChat Support | Ko-fi · International |
|---|---|
![]() Scan with WeChat. Click the image to enlarge. |
Support thinkstu on Ko-fi ↗ ko-fi.com/thinkstu |
FluentRead grows alongside a vibrant open-source community. We are grateful to the following projects and their contributors for their openness and generosity:
- Read Frog
- KISS Translator
- Duo Translator
- InfoLens — Smart Highlighting is inspired by its surprisal heatmap idea (Apache-2.0)
|
|
|---|
Thank you to everyone who has contributed to FluentRead, including the many we couldn't name here, and to every user for embracing a product that is still far from perfect. We hope to keep building together with you, and to bring a little more good into the world.
FluentRead is released under GPL-3.0. See third-party notices for component attribution and licenses.
Settings and learning records stay local by default; cloud translation uses your selected provider. Optional cloud configuration backup supports Google Drive and WebDAV, including service credentials while excluding wordbooks, conversations, and usage statistics. See the privacy policy for permissions, encryption, and deletion details.


