Open source · MIT · Bring your own LLM key

Your agent localizes. Code guarantees.

Your coding agent moves hardcoded strings to keys and translates them. Deterministic code checks every LLM output (placeholders, CLDR plurals, glossary, pixel width) and refuses anything broken or too long, with the exact reason, until the retry is valid. Nothing invalid reaches your catalogs.

Real glot binary. The LLM in this recording is scripted to get three strings wrong on the first pass; the refusals and their messages are glot's.

From prompt to pull request, without breaking a placeholder

  1. 1Agent

    > Add a checkout page, in every locale

    "checkout.items": "{count, plural,
      one {# item} other {# items}}"

    Your agent adds a feature and new keys.

  2. 2MCP
    glot.translate({
      keys: ["checkout.items"],
      locales: ["fr", "ja", "ar"]
    })

    glot gives it live context: glossary, refs, neighbours.

  3. 3Validation
    • Placeholders preserved
    • CLDR plural categories
    • Glossary terms respected
    • Fits its button: 96 of 120 px

    Every string is checked by code, not by vibes.

  4. 4Pull request
    messages/fr.json
    + "items": "{count, plural, one {# article} other {# articles}}"
    + "pay": "Payer {amount}"
    ~ glot.lock 2 entries

    Only the delta, with an updated lockfile.

Four commands, the whole lifecycle

Each step is a CLI command your coding agent can run too, through the MCP server.

  1. 1

    Extract

    Finds hardcoded UI strings, proposes keys from context and rewrites the code for next-intl or react-i18next.

    glot i18nize --yes
  2. 2

    Translate

    Only the delta, with your glossary, file:line context and UI role. Every string validated, retried, then escalated.

    glot translate
  3. 3

    Check

    Validates every catalog in CI: syntax, placeholders, plural categories, glossary and pixel width. Exit 1 on any error, annotations on the PR.

    glot check --format github
  4. 4

    Fit

    Renders the running app per locale, shortens what overflows its box, re-renders until it fits.

    glot fit --locales de

The guarantees

The LLM proposes. Code decides what gets written.

Deterministic validator

ICU, i18next and MessageFormat 2 parsing. Placeholders, tags and plural categories checked for every locale. Failures are retried, then escalated to a stronger model.

Lockfile

glot.lock hashes every source and target. Only the delta gets translated, and hand edits are never overwritten.

Glossary as code

glossary.toml lives next to your code. Required translations, forbidden terms and do-not-translate words are enforced, not suggested.

MCP, live context

Claude Code, Cursor and friends query keys, glossary and issues directly, and translate with file:line references and UI role.

Visual QA

Playwright renders every locale and flags overflow, truncation and RTL layout breaks before your users see them.

Bring your own key

Anthropic, OpenAI or any OpenAI-compatible endpoint, including local models. Costs are shown per job and capped by a budget.

Open source

MIT licensed. CLI, MCP server, API and this dashboard. Self-host it, fork it, audit it.

Pixel budget

Translations that fit the button

German is often a third longer than English. glot fit captures your running app in every locale, measures each text against its container, asks the LLM for a shorter variant that keeps the meaning and the placeholders, then renders again.

  • Measured in the browser, not guessed from a character count
  • Shortened variants still pass the validator and glossary
  • Stops after a fixed number of passes, never loops on cost
Before
German button label cut off with an ellipsis
After glot fit
Shorter German label that fits the button
$ glot fit --locales de

Real captures from the demo app, German locale.

In-app editing

Alt+click any text in your app

The dev overlay finds the key behind the text you clicked, shows it in every locale with live validator issues, and saves to your catalog files. Hot reload does the rest.

  • AI actions: suggest, shorten, more formal, translate all
  • Flags text that overflows its container
  • Dev only, about 6 kB gzipped, no runtime dependencies
glot overlay popover showing a key, its source and its translations in five languages
Labs (experimental)

Labs: younger features on the same guardrails

They work and are tested, but they are newer than the core loop and may change. Some need the experimental self-hosted server.

Back-translation review

The LLM translates the target back into your language literally, explains its choices and gives a verdict. Cached until the source or the target changes.

Source
Send reminder
fr
Envoyer une relance
Back-translation
Send a follow-upNuance

“Relance” is the usual French term for a payment reminder; the tone is slightly firmer.

Locale matrix

Every locale of a page side by side, with overflow, truncation and RTL issues from visual QA pinned to the screen they break.

  • en
    Send reminder
  • de
    Erinnerung senden
  • fr
    Envoyer une relance
  • ja
    リマインダーを送信
  • ar
    إرسال تذكير
  • es
    Enviar recordatorio

Insights per language

An anonymous beacon counts visitors by preferred language and the locale you served them, then compares conversion. No cookie, no visitor id.

Example data

  • GermanServed
  • FrenchServed
  • Brazilian PortugueseNot translated yet
  • JapaneseServed
  • ItalianNot translated yet

On-device fallback

For languages you don't ship yet, @glot/runtime translates in the browser with the built-in Translator API, then runs glot's validator compiled to WebAssembly.

  1. 1Browser translates, placeholders masked
  2. 2Validator checks plurals, tags, glossary
  3. 3Anything that fails stays in the source language

Compare

Where glot differs from hosted translation platforms and other developer-first tools.

FeatureglotLokaliseCrowdinLingo.devTolgee
PriceFree (MIT) + your LLM usageFrom $149/mo, 14-day trialPaid plans after a 14-day trial, free for open sourceFree CLI with your own key, hosted engine $0 base + usageFree tier and free self-host, cloud from €58/mo
Open source
Bring your own LLM key
Deterministic validation of every string
Git as source of truth (lockfile)
MCP server for coding agents
In-context editing in your app
Rendered pixel-budget fitting

Checked against each vendor's public website and docs on October 18, 2026. Partial means limited, plan-dependent or through an integration. No means we found no such feature in public docs. Plans change: every cell is linked to its source.

Sources and dates for every cell

Install in seconds

Run it locally with your agent, or connect it to a glot server for your team.

With Cargo
cargo install glot
With npx
npx glot init
Convert an existing app
glot i18nize --yes
Add to your agent
{
  "mcpServers": {
    "glot": {
      "command": "glot",
      "args": [
        "mcp"
      ],
      "env": {
        "GLOT_SERVER": "http://localhost:8790",
        "GLOT_TOKEN": "<your-token>"
      }
    }
  }
}

Ship every language with every release.

Create your workspace