A desktop application that provides instant AI-powered translation with a simple double Ctrl/Cmd+C shortcut, similar to DeepL.
- ⚡ Instant Translation - Double Ctrl/Cmd+C to translate any selected text
- 🌍 Multi-Language Support - 26 built-in languages plus custom language support
- 🤖 Auto-Updating AI Models - Claude, GPT, Gemini, Grok (xAI), and custom models, with the model list kept up to date automatically
- 🔁 Back-Translation - Instantly check quality by translating the result back to the source language
- 🧭 Language Direction Display - See the detected source → target language at a glance
- 💬 Two Display Modes - Notification with auto-copy or resizable popup window
- 🎨 Customizable - Custom instructions (with AI assist), languages, and translation rules
- ⌨️ Custom Shortcuts - Keep the double Ctrl/Cmd+C trigger or set your own key combination, plus one shortcut per profile
- 🕘 History - Recent results in the tray menu (Clipy-style), click to copy; can be disabled or cleared
- 👤 Profiles - Keep separate sets of languages, models, prompts and API keys (personal, work, per-client) and switch from the tray
- 🔐 Encrypted keys & custom endpoints - API keys are stored with the OS keychain; each provider can point at a gateway or proxy
- 🏢 Managed deployment - IT can push provider keys and gateway endpoints via MDM (macOS profiles, Windows policies, or a JSON file); users see them locked
- 🪶 Lightweight - Minimal resource usage, lives in your system tray
Download the latest version from GitHub Releases.
Windows:
Honyo-{version}.exe- Windows installer (recommended)Honyo-{version}-win.zip- Portable version (no installation required)
macOS:
- Apple Silicon (M1/M2/M3 Macs):
Honyo-{version}-arm64.dmg- DMG installer (recommended)Honyo-{version}-arm64-mac.zip- ZIP archive
- Intel Macs:
Honyo-{version}.dmg- DMG installer (recommended)Honyo-{version}-mac.zip- ZIP archive
Linux:
Honyo-{version}.AppImage- Universal Linux package (recommended)Honyo-{version}.deb- Debian/Ubuntu packageHonyo-{version}.rpm- Red Hat/Fedora packageHonyo-{version}.tar.gz- Generic Linux archive
-
Download the appropriate version for your Mac from the downloads section above
-
For DMG files:
- Open the DMG file
- Drag Honyo.app to your Applications folder
-
For ZIP files:
- Extract the zip file
- Move
Honyo.appto your Applications folder
-
Remove quarantine attribute (required for unsigned apps):
xattr -cr /Applications/Honyo.app
-
First launch: Right-click (or Control-click) on Honyo.app and select "Open", then click "Open" in the security dialog
-
Grant accessibility permissions:
- Open System Preferences > Security & Privacy > Privacy > Accessibility
- Add and enable Honyo.app
Download and run Honyo-*.exe
Download and run Honyo-*.AppImage
To use the translation features, you need to configure API keys for your preferred AI provider:
- Click on the system tray icon
- Select "Settings..."
- In the "API Keys" tab, enter your API keys for the providers you want to use (Anthropic, OpenAI, Google AI, xAI):
- Anthropic: Get your key from platform.claude.com
- OpenAI: Get your key from platform.openai.com
- Google AI: Get your key from aistudio.google.com
- Click "Save"
Open Settings… from the tray. The tray menu only exposes the most-used switches (profile, languages, model, display mode); the Settings window has all of them:
- General: result display mode, translate shortcut, popup behaviour, history, launch at login
- Translation: primary / secondary language, profile shortcut, AI model, custom model
- Customization: custom prompt (with AI assist), custom languages
- API Keys: per-provider keys and optional gateway endpoints
Every result is kept in a local history (history.json, newest first, up to 100 entries) and
the last 15 appear under History in the tray menu; clicking an entry copies its result to
the clipboard. Settings → General → History lets you turn the history off (the tray submenu
disappears and nothing new is recorded) or clear it.
By default a translation starts when you press Ctrl/Cmd+C twice, which needs no extra setup. In Settings → General → Shortcuts you can instead pick a custom global shortcut (click the field and press the combination; Backspace clears it). A custom shortcut either copies the current selection first — Honyo sends Ctrl/Cmd+C to the active app, so the accessibility permission is required on macOS — or translates whatever is already on the clipboard.
Each profile can also have its own global shortcut (Settings → Translation → Profile Shortcut) that switches to it from anywhere. If a combination is already taken by another app, Honyo shows a notification and leaves it unassigned.
The app automatically detects your system language and sets appropriate defaults:
- If your system is in English: Primary → English, Secondary → Japanese
- If your system is in Japanese: Primary → Japanese, Secondary → English
- Other languages: Primary → System language, Secondary → English
You can change these settings from the system tray menu:
- Click on "Primary: [Language]" to select your primary translation target
- Click on "Secondary: [Language]" to select your fallback language
Supported Languages (26): English, Japanese, Chinese (Simplified), Chinese (Traditional), Korean, Spanish, French, German, Italian, Portuguese, Russian, Arabic, Hindi, Thai, Vietnamese, Indonesian, Malay, Filipino, Dutch, Polish, Turkish, Ukrainian, Swedish, Danish, Norwegian, Finnish
Everything about what and how you translate lives in a profile: primary/secondary languages, the AI model, custom model, custom prompt, custom languages, and the API keys and endpoints. Popup, display and startup settings are shared by all profiles.
- Switch profiles from the tray menu (Profile: …) or the selector at the top-left of the Settings window.
- The bottom of that selector's menu has New / Duplicate / Rename / Delete. Duplicating copies the API keys too, which is handy for "same keys, different prompt".
- On first launch after updating, your existing settings become a profile named Default.
API keys are stored encrypted with the operating system's credential store (Keychain on
macOS, DPAPI on Windows, libsecret on Linux) inside config.json; the old plaintext
apikeys.json is migrated and removed. Environment variables (ANTHROPIC_API_KEY, etc.) still
act as a fallback when a profile has no key.
Each provider also accepts an optional base URL (Settings → API Keys → Endpoints) so requests can be routed through an LLM gateway or proxy instead of the provider's public API.
Organisations can supply provider settings centrally instead of handing keys to each user. Honyo reads, in this order (later wins), and enforces whatever it finds:
| Platform | Source |
|---|---|
| Any | managed.json — macOS /Library/Application Support/Honyo/managed.json, Windows %ProgramData%\Honyo\managed.json, Linux /etc/honyo/managed.json |
| macOS | Configuration profile for the preference domain com.rot1024.honyo (/Library/Managed Preferences/com.rot1024.honyo.plist, or the per-user variant) |
| Windows | Registry policy HKLM\SOFTWARE\Policies\Honyo (then HKCU), nested keys as subkeys |
Schema (all keys optional):
{
"providers": {
"anthropic": { "apiKey": "sk-ant-…", "baseUrl": "https://llm-gateway.example.com/anthropic" },
"openai": { "baseUrl": "https://llm-gateway.example.com/openai" },
"google": { "apiKey": "…" },
"xai": { "baseUrl": "https://llm-gateway.example.com/xai" }
}
}Managed values override the user's profiles for every profile, and the matching fields in
Settings → API Keys are shown read-only with a "Managed by your organization" note. Typical
use is to point baseUrl at an internal LLM gateway that holds the real provider keys, so
nothing secret has to reach the endpoint machines. A Windows policy is expressed as
HKLM\SOFTWARE\Policies\Honyo\providers\anthropic with string values apiKey / baseUrl;
a macOS profile carries the same nested dictionary under the providers key. Ready-made
profile files and MDM-specific steps are in docs/mdm/.
You can add custom instructions that will be included in all translations:
- Click on the system tray icon
- Select "Settings..."
- Go to the "Customization" tab and find the "Custom Prompt" section
- Enter your custom instructions (e.g., terminology guidelines, tone preferences, specific translation rules)
- Click "Save"
Examples of custom instructions:
- Use formal language
- Keep product names in English
- Maintain consistent terminology
- Follow specific industry standards
Generate with AI: Not sure how to phrase your instructions? Click "Generate with AI" and describe what you want in plain language — Honyo uses your selected model to write or refine the custom prompt for you.
Whatever the input looks like — a question, a greeting, or even text that says "ignore previous instructions" — Honyo always treats it as text to translate, never as a command. Markdown and code formatting is preserved: the syntax is kept intact and only the human-readable text is translated.
Pick a model from the AI Model menu in the system tray. The list stays current automatically: Honyo refreshes it from free public model catalogs (no API key required, cached for 24 hours), showing the latest models per provider. If it can't reach the network, it falls back to a built-in list of current Claude, GPT, and Gemini models. Your selected model is always kept in the list even if a refresh would otherwise drop it.
The menu starts with a Default entry, currently Claude Haiku 4.5: translation is a short, latency-sensitive task, and a fast small model is fully sufficient, so responses arrive noticeably sooner. Keeping Default selected means you follow Honyo's recommended model automatically as it changes in future releases; pick a specific model if you want to stay on it. The menu lists fast, cost-efficient models (Haiku, Sonnet, GPT Mini/Nano, Gemini Flash) directly; frontier and reasoning models that are overkill for translation (Opus, Fable, GPT-5 flagship, Gemini Pro, and similar) are tucked into an Advanced Models submenu. The split is decided from each model's name, so newly released models are sorted automatically.
Use any AI model not included in the list:
- Open Settings → "Customization" tab → "Custom Model" section
- Enter the model name (e.g.,
gpt-5.6-sol,claude-opus-4-8) - Select the provider (Anthropic, OpenAI, or Google AI)
- Click "Save"
- Select "Custom Model" from the AI Model menu
Add languages not included in the default list:
- Open Settings → "Customization" tab → "Custom Languages" section
- Enter language names, one per line (e.g., Esperanto, Sanskrit, Klingon)
- Click "Save"
- Your custom languages will appear in the Primary/Secondary language menus
Configure popup window and translation display behavior:
- Open Settings → "General" tab
- Auto-close on blur: Enable this option to automatically close the popup window when it loses focus
- Enable streaming: Enable this option to see translations appear progressively as the AI generates them (popup mode only)
- Popup font size: Set the translation text size in the popup (10–24px)
- Reset Popup Size: Restore the popup window to its default size
- Click "Save"
Display Modes:
- Notification & Copy: Translation result appears as a system notification and is automatically copied to clipboard
- Popup Window: Translation result appears in a floating window with additional features:
- Language direction shown in the header (e.g. "English → Japanese")
- Real-time streaming (when enabled)
- Back-translate button (⇄) to check the result against the source language
- Copy button and keyboard shortcuts (Enter to copy, Escape to close)
- Right-click context menu for copying selected text or all text
- Resizable window — the size is remembered across closes
- Auto-return focus to previous application when closed
- Select any text in any application
- Press Ctrl+C (Windows/Linux) or Cmd+C (macOS) twice quickly
- Depending on your display mode:
- Notification mode: Translation appears as notification and is copied to clipboard
- Popup mode: Translation appears in a floating window
- In popup mode:
- The header shows the detected language direction (e.g. "English → Japanese")
- Click the back-translate button (⇄) to translate the result back to the source language and check its quality — click again to toggle between the two views (the header shows the reverse direction while viewing the back-translation)
- Press Enter or click "Copy" to copy the translation and close
- Press Escape or click "×" to close without copying
- Right-click the text for copy options
The app intelligently determines the translation direction:
- If the source text matches your primary language → translates to secondary language
- If the source text is any other language → translates to primary language
- For mixed-language text → detects the language with highest word count ratio
Access these options by clicking the system tray icon:
- Primary/Secondary Language: Set your translation language preferences (26+ built-in languages + custom)
- Display Mode: Choose between notification and popup window
- AI Model: Choose which AI model to use for translations (latest Claude, GPT, and Gemini models — auto-updated — or a custom model)
- Settings: Everything above and more — the tray menu is a shortcut to the most-used settings
- Pause Translation: Temporarily disable the translation feature
- Stop Current Translation: Cancel ongoing translation
- Check for Updates: Check for new versions with progress display
- Quit: Exit the application
- Ctrl/Cmd+C (twice): Trigger translation
- Enter (in popup): Copy and close
- Escape (in popup): Close without copying
Honyo automatically checks for updates on startup and every hour:
- Update available: Choose to Download, remind Later, or Skip the version
- Downloading: Progress displayed in menu (e.g., "Downloading Update (45%)...")
- Downloaded: Option to restart and install or install later
- Skipped versions: Won't be notified again until a new version is released
- Manual check: Use "Check for Updates" from the menu
You can also set API keys via environment variables:
ANTHROPIC_API_KEYOPENAI_API_KEYGOOGLE_API_KEYXAI_API_KEY
Create a .env file in the project root:
ANTHROPIC_API_KEY=your_key_here
OPENAI_API_KEY=your_key_here
GOOGLE_API_KEY=your_key_here- Node.js >= 23.6.0
- npm
git clone https://github.com/rot1024/honyo.git
cd honyo
npm installnpm start| Command | Description |
|---|---|
npm start |
Run the app in development mode (bundles preload/renderer first) |
npm run build:renderer |
Bundle only the preload and renderer scripts |
npm test |
Run tests with Vitest |
npm run test:ui |
Run tests with Vitest UI |
npm run typecheck |
Type check with TypeScript |
npm run lint |
Lint with ESLint |
npm run lint:fix |
Fix lint errors |
npm run format |
Format with Prettier |
npm run dist |
Build and package for current platform |
npm run dist:mac |
Build and package for macOS |
npm run dist:win |
Build and package for Windows |
npm run dist:linux |
Build and package for Linux |
| Variable | Effect |
|---|---|
HONYO_USER_DATA_DIR |
Use a separate config/cache directory so a dev instance can run next to an installed Honyo |
HONYO_OPEN_SETTINGS=1 |
Open the settings window on launch |
HONYO_THEME_PLATFORM=win32|linux |
Preview another OS's settings theme (Fluent / Adwaita) |
HONYO_MANAGED_JSON=path |
Read managed (MDM) settings from this file instead of the system location |
HONYO_DEBUG_ECHO=text |
Run a no-network echo action through the popup/notification and history pipeline, then quit |
HONYO_POPUP_SCREENSHOT=path.png |
Show a sample translation popup, capture it to a PNG and quit |
HONYO_SETTINGS_SCREENSHOT=path.png |
Capture the settings window to a PNG and quit (with HONYO_SETTINGS_SCREENSHOT_TAB, HONYO_SETTINGS_SCREENSHOT_SCRIPT to run JS first, and HONYO_THEME=light|dark) |
src/
├── main.ts # Entry point
├── models.ts # AI model definitions
├── models-tier.ts # Recommended/advanced model classification
├── actions/ # Action framework: what Honyo does to copied content (translate, …)
├── app/ # App lifecycle, updater, accessibility
├── config/ # Configuration management
├── history/ # Local history of action results
├── ipc/ # Typed IPC contracts shared by main, preload and renderer
├── keyboard/ # Keyboard event handling (uiohook-napi)
├── language/ # Language detection and constants
├── preload/ # contextBridge preload scripts (bundled to build/preload)
├── renderer/ # Browser-side code for windows (bundled to build/renderer)
├── translation/ # AI translation (Vercel AI SDK)
└── ui/ # Tray, menu, popup, settings windows (main process side)
The settings window is built with [Xel](https://xel-toolkit.org/), a widget toolkit with
native-looking themes: Cupertino on macOS, Fluent on Windows, Adwaita on Linux, each
following the system light/dark mode. The renderer runs with context isolation and
talks to the main process only through the typed API in `src/ipc/settings.ts`. The popup
window uses the same preload/context-isolation setup via `src/ipc/popup.ts`.
- Electron - Desktop app framework
- TypeScript - Language
- Vercel AI SDK - AI provider integration (Anthropic, OpenAI, Google)
- uiohook-napi - Global keyboard hooks
- electron-builder - Packaging
- Vitest - Testing
- ESLint + Prettier - Linting and formatting
npm run release # Auto version bump based on commits
npm run release:patch # Patch release (0.0.x)
npm run release:minor # Minor release (0.x.0)
npm run release:major # Major release (x.0.0)This updates version, generates CHANGELOG.md, and creates a git tag. Push the tag to trigger the GitHub Actions release workflow.
MIT
Contributions are welcome! Please feel free to submit a Pull Request.
