Lingo.dev CLI

CLI

Lingo.dev's official CLI: lingo push sends JSON, YAML, Markdown, PO, XLIFF, Android/Xcode strings and other files from your repo to its LLM localization engine, and lingo pull brings translations back; CI-ready. Needs a Lingo.dev account; usage-based pricing with a free sandbox.

lingodotdev/lingo.dev5.4k
Открыть на GitHub
README

Lingo.dev – localization engineering platform

Lingo.dev is the localization engineering platform: the best way to measure translation quality, translate with LLMs, and proofread with native speakers.

Docs • Platform • Discord

Product Hunt #1 DevTool of the Month License Last commit


Teams build localization engines on Lingo.dev

A localization engine is a stateful translation API your team configures and Lingo.dev runs. Build one per product, per content type, or per brand. Every request through an engine applies everything you configured in it, in a fixed order of precedence:

LayerWhat you configureFrom the docs
LLM modelsWhich model handles each language pair, with ranked fallbacks400+ models; the response names the model that ran
Brand voiceHow your product speaks in each language, one text per localeTone and formality per market
RulesThe linguistic conventions a generic model missesAdjective position in Spanish, a space before percentage signs
GlossaryExact term mappings per locale, matched by meaning"911" becomes "112" for European markets; product names pass through
AI reviewersScoring that runs after every translationGEMBA scores, BERTScore, glossary compliance

Glossaries, rulesets, and brand voices belong to your organization, and an engine applies them by attachment. One glossary governs five engines, and one edit reaches all five. Test a change in the Playground before it goes live: compare an engine against a raw model, or two engines side by side. The engines are configured on the platform, where the localization team runs the localization infrastructure.

Reach your engines from code

Translate the content in a repository. lingo push sends the files to the engine named in .lingo/config.json, and lingo pull writes the translations back from any machine:

npm install -g @lingo.dev/cli
lingo init && lingo link
lingo push

Or call an engine directly, naming it by ID:

const res = await fetch("https://api.lingo.dev/process/localize", {
  method: "POST",
  headers: { "X-API-Key": process.env.LINGO_API_KEY, "Content-Type": "application/json" },
  body: JSON.stringify({
    engineId: "eng_abc123",
    sourceLocale: "en",
    targetLocale: "de",
    data: { greeting: "Hello, world!", cta: "Get started" },
  }),
});

const { data, model, usage } = await res.json();
// data:  { greeting: "Hallo, Welt!", cta: "Jetzt starten" }
// model: "anthropic/claude-sonnet-4.5"
// usage: { inputTokens: 2789, outputTokens: 861, cost: 0.023012 }
Lingo.dev MCPYour coding agent creates an engine, adds glossary terms, tunes rules, and compares two engines, from the conversation where the problem surfaced
Lingo.dev CLIPush source files, pull translations, from a terminal or from CI. Eighteen formats: JSON, YAML, Markdown, MDX, PO, XLIFF, Flutter ARB, Android and Xcode strings, SubRip, PHP
Lingo.dev in CI/CDInstall the CLI and run lingo push as a step in GitHub Actions, GitLab CI/CD, Bitbucket Pipelines, or any runner with Node.js 22+
Lingo.dev GitHub AppInstall once and every push to the default branch opens or updates a translation pull request, or translations land as a commit in the pull request that changed the source. No runner, no API key secret, no lockfile to manage
Lingo.dev APIOne synchronous call per language pair, or an async job that fans one request out to many locales and delivers results as they land

Build your first localization engine →