A lightweight macOS menu-bar translator built on the OS Translation framework (on-device). Open a panel from the menu bar, translate, copy — no tens-of-gigabyte model to load.
It is deliberately small: it does one thing — get a translation quickly (type or paste, read, copy). Features beyond that are left out on purpose, even where other translators have them. To hear the translation read aloud, select it and use the right-click menu › Speech › Start Speaking, which macOS provides.
The successor to quick-translate
(local LLM, now archived): the same menu-bar UX on a different backend. macOS 26+
(Apple silicon). Signed with Developer ID and notarized.
- Menu bar: click to open the translation panel.
- Type or paste source text → it auto-translates shortly after you stop typing (toggle in Settings), or translate immediately with ⌘↩ → copy the result. Auto-translate waits for your input method: while an IME is composing (kana-kanji conversion, pinyin, hangul…) nothing is translated until you commit the text.
- Smart language routing: the input language is auto-detected; output goes to your system language. When you type in your own language, the output is auto-swapped to a configured secondary language (e.g. English) — toggle in Settings. In short: foreign → native, native → your chosen foreign. When detection is a close call (kanji-only text reads as Japanese or Chinese), your own languages — system + secondary — win the tie, and the chosen language is told to the translator explicitly, so macOS doesn't interrupt you with its "which language is this?" picker. Your own languages are also favoured for short input — a few words that would otherwise be taken for a neighbouring language ("under" for Swedish, say). If detection still guesses wrong, pin the input language with the source picker.
- Pin the input language: a source picker in the panel ("Auto" + languages) skips detection entirely and always translates as the pinned language — for when you know what you're pasting. Resets to Auto on restart.
- Manual target: a picker in the panel lets you temporarily send the translation to a specific language instead of Auto (resets to Auto on restart). While a picker is on Auto, the line under it shows in parentheses what Auto detected or resolves to — a hint, not a selection.
- Text size: in the panel, ⌘+ / ⌘− make the input and translation text bigger or smaller, and ⌘0 returns to the system size (the keypad + / − work too). Only the text grows — controls keep their sizes — and the size is remembered across launches.
- Global hotkey: press ⌥⌘T (rebindable in Settings, or removed with the × beside it — then open the panel from the menu bar) to open the panel from anywhere. On open it can seed the source from your clipboard and translate it.
- Only OS-supported languages: the pickers list exactly the languages your Mac's Translation framework supports; unsupported pairs are reported clearly.
- Always says what it's doing: a status line under the pickers reports every state — waiting for you to pause typing, waiting for your input method to commit, can't identify the language yet, downloading the language model, translating, done. The states where the app is deliberately not translating say so, instead of looking like a hang.
- Failures you can act on: when a translation fails, the panel names the cause ("macOS can't translate Japanese → Korean."), what to do about it ("Choose a different target language with the right picker."), and the exact technical cause, selectable, so you can paste it into a bug report.
- Launch at login: optional (Settings → General).
- Version: shown next to the title in the panel header, and at the foot of Settings.
- Volatile history: the most recent translation is kept in memory only (never written to disk); it clears when you quit.
No special permissions: instant-translate needs no Accessibility or other TCC grant — only the OS's own one-time language-model download consent.
The app is single-instance: starting a second copy (for example, a notification click resolving to a different copy of the .app) logs to stderr and exits, leaving the running instance alone.
Translation is performed entirely on-device by macOS's Translation framework. The first time you use a language pair, macOS downloads its (small, OS-managed) model with your consent — the panel announces this ("Preparing the Japanese → English language model…") so the one-off wait has a visible reason. The app itself needs no network, no API key, no credentials.
make run # build + run (debug)
make build # release binary → .build/release/
make build-app # signed .app → dist/
make package # build-app + notarize + staple + zip (release)
make testRequires the macOS 26 SDK (recent Xcode / Command Line Tools).
Its predecessor, quick-translate, loaded a local LLM (tens of GB) for
high-quality/customizable translation, at the cost of slow start and heavy memory.
instant-translate trades that for the OS's on-device models: near-instant, light, and
good enough for quick day-to-day translations. It replaced quick-translate, which is
archived.
MIT — see LICENSE.