Skip to content
frealcatPublic

About

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

 

History

49 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

TextDuet

Your key. Two languages. One page.

中文 | License | Privacy | Support | Security

TextDuet is a local-first, open-source Chrome extension for reading webpages in two languages. You choose an OpenAI-compatible model provider, supply your own API key, and start a translation from the extension. Page text goes directly from Chrome to the provider you selected; TextDuet does not operate a translation proxy or an account service.

Release status: TextDuet 0.2.0 is being prepared for its first public release. Chrome Web Store availability and the matching GitHub Release link will be added when the review and release gates are complete. Do not treat a source checkout or an unpublished build as a final release.

What It Does

  • Translates user-selected, visible reading text in the current tab and renders bilingual, source-only, or translation-only reading modes.
  • Supports OpenAI-compatible APIs and provider presets for OpenAI, Qwen, DeepSeek, OpenRouter, SiliconFlow, and custom HTTPS endpoints.
  • Keeps model configuration and usage data local to the extension. API keys are handled only in trusted extension contexts and never inserted into the webpage.
  • Uses opt-in runtime access to the configured HTTPS provider origin. It does not register a permanent content script or install-wide website permission.
  • Provides translation cache controls, local token usage history, budget reminders, selection translation, and an export-only compatibility diagnostic.

TextDuet has no extension subscription fee. Your model provider may charge for API requests. Review the provider's terms, pricing, and data practices before translating sensitive material.

Install And Update

Channel Intended for Installation and updates Support boundary
Chrome Web Store Most users Store installation and automatic updates Recommended, supported distribution
GitHub Releases Advanced users and testers Download the versioned ZIP, unpack it, then load the unpacked folder in chrome://extensions; updates are manual Supported best effort; ZIP files cannot be loaded directly
Source build Contributors and developers Build from a checked-out source tree and load .output/chrome-mv3 Development and troubleshooting workflow

The Store and manually loaded builds can have different extension IDs and separate Chrome storage. Do not assume that API keys, local caches, or usage records migrate between them.

Detailed installation and update instructions: English | 中文

Build From Source

Requirements: Node.js 22 LTS or later, npm, and a current stable Chrome release.

npm ci
npm run typecheck
npm test
npm run build

Open chrome://extensions, enable Developer mode, select Load unpacked, and choose .output/chrome-mv3. Rebuild and click Chrome's reload button after code changes.

For a release-candidate package and its local checks:

npm run release:check

The command creates .output/textduet-<version>-chrome.zip. Unpack the ZIP before loading it into Chrome. See development documentation for test commands, browser requirements, and local-provider safeguards.

Privacy And Security

  • Translation is user initiated. Text from eligible visible reading areas is sent directly to the model provider you configure; it does not pass through a TextDuet server.
  • TextDuet has no account system, telemetry, ads, cloud sync, or automatic issue upload.
  • API keys, passwords, request headers, and page text are never written to issue templates, diagnostics, or repository examples.
  • 0.2.0 supports session-only keys and a password-unlocked local Vault. Session keys clear when Chrome restarts. Local-mode keys and the persistent translation cache are encrypted at rest with AES-GCM; the password is never stored, and a restart leaves the Vault locked until the user unlocks it. While locked, persistent cache is unavailable, though a current page may reuse its in-memory translations.
  • Model output is treated as untrusted text and is rendered as text, not HTML or executable code.

Read the full policy before installing: Privacy Policy | 隐私政策 | Chrome permissions.

To report a vulnerability, do not open a public issue. Use GitHub private vulnerability reporting or email frealcat@gmail.com. See SECURITY.md.

Documentation

Topic English 中文
Installation and updates Installation 安装与更新
Development and local build Development 开发
Privacy policy Privacy 隐私
Permissions Chrome permissions Chrome 权限
Compatibility Compatibility 兼容性
Frequently asked questions FAQ 常见问题
0.2.0 release notes Release notes 发布说明
Contributing Contributing 贡献指南
Community governance Governance 治理规则

The public documentation above is sufficient to install, evaluate, build, and contribute to TextDuet.

Get Help And Contribute

Use GitHub Discussions for setup help, provider questions, costs, and ideas. Use the issue forms for reproducible bugs, documentation fixes, feature requests, and website compatibility reports. Never include API keys, private URLs, account information, unpublished text, or screenshots containing sensitive content.

Contributions are welcome. Read CONTRIBUTING.md, CODE_OF_CONDUCT.md, and GOVERNANCE.md. No CLA or DCO is required; by submitting a contribution, you license it under Apache-2.0 and represent that you have the right to do so.

License

TextDuet is licensed under Apache License 2.0. Keep the accompanying NOTICE and third-party notices with redistributed copies.

About

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages