brightSay hi
← The whole shelf

llm-translator

2026

Highlight text anywhere on Linux and a popup streams the translation — bring your own key, no proxy, Qt 6.

Year
2026
Stack
  • C++
  • Qt 6
  • Rust
Select text in any app — Translate / Improve bar and streaming popup
Select text in any app — Translate / Improve bar and streaming popup
Settings — provider, API key, and supported backends
Settings — provider, API key, and supported backends

A select-text popup translator (and writing improver) for modern Linux, on both Wayland and X11. Highlight text anywhere — a browser, a PDF, a chat window — and a small bar appears: Translate or Improve. Results stream into a popup next to the pointer.

Bring your own key

No proxy, no bundled key: your API key goes straight from your machine to the provider you configured. DeepSeek by default; OpenAI, Gemini, Anthropic, Grok, OpenRouter, MiMo, and custom OpenAI-compatible endpoints also work. Conventional env vars (DEEPSEEK_API_KEY, OPENAI_API_KEY, …) override stored keys and are never written to disk.

How it fits the desktop

  • X11 — monitors the PRIMARY selection via QClipboard and positions its own popup.
  • Wayland / GNOME 45+ — a Shell extension forwards selection + sentence context over D-Bus (background clients cannot read other apps’ selections otherwise). The action bar and panel can render inside GNOME Shell so they sit on the pointer.
  • Chrome companion — exact webpage and PDF sentence context via native messaging; the extension never holds provider keys.

Build

Needs Qt 6, CMake ≥ 3.21, Ninja, a C++20 compiler, and Rust (cargo) for the backend crate.

cmake -G Ninja -B build -DCMAKE_PREFIX_PATH="$HOME/Qt/6.x/gcc_64"
cmake --build build
./build/clients/linux-qt/translator

Wayland selection bridge:

sh clients/linux-qt/extension/install.sh
# log out / in, then:
gnome-extensions enable translator@translator

Under the hood

C++20 on Qt 6 (Widgets, Network, DBus) for the Linux client; a Rust crate owns provider traffic and streaming. Chrome + native host only pass selected text and sentence context locally. Spec notes and packaging live in the repo under spec/, docs/, and packaging/.