Dragomand

2 min read Original article ↗

Dragomand is a per-user Linux daemon that gives desktop applications fully offline machine translation over D-Bus. It runs Mozilla's Bergamot/Marian translation models locally, the ones behind Firefox Translations, and manages which models are installed and which stay loaded in memory.

$ dragomanctl translate -f bg -t en "Добро утро. Как си днес?"
Good morning. How are you today?

The first call downloads the model from Mozilla (verified by SHA-256) and starts the daemon through D-Bus activation. Everything afterwards is fully offline, and the daemon exits again when idle.

The Daemon

The existing Linux options are either standalone applications or translation tied to a single host such as Firefox. Dragomand is one shared service instead:

  • One API for every app. Editors, browsers, clipboard tools, KRunner, GNOME Shell, LibreOffice and accessibility software all call the same D-Bus interface: dev.l10n_bg.dragomand.Translator1.
  • One copy of every model. The Bergamot engine keeps models in private memory, so every application embedding it would pay for its own copy. A shared daemon loads each model once.
  • Current models. Models come from Firefox Remote Settings, exactly what Firefox Translations installs, in every language pair Mozilla publishes.
  • Private by design. Text never leaves the machine. The network is used only to download models, and updates are checked only when you ask.
  • No idle cost. The daemon is D-Bus activated and exits after an idle period; nothing runs permanently.

Currently implemented

Version 0.2.0: the daemon with D-Bus API v1, including whole documents, language detection, sentence alignment, model quality and live settings; the dragomanctl command-line client, install-on-demand model downloads, LRU keep-warm with memory-pressure eviction, KRunner and GNOME Shell search integration, a LibreOffice extension and a KTextEditor (Kate) plugin. For KDE there are also Krakoman, a graphical translator, a KDE System Settings module and a Plasma widget. Bulgarian and English form the first pair working end to end; every pair Mozilla publishes is in scope.

Get started: Install · Integrations · Documentation