Skip to content
@Shipi18n

Shipi18n

Open-source i18n QA — a locale-file linter and MCP server that catches missing keys, dropped placeholders and mistranslations in CI. BYO LLM key.

Shipi18n

Catch broken translations before you ship

Open-source QA for your i18n locale files. No account, no server, no hosted API — bring your own LLM key, or use the structural checks with no key at all.

Website Docs License


The bug that ships

Your CI lints your JavaScript, typechecks your types, runs your tests — and then ships a de.json nobody has read, produced by a model nobody audited.

en: "This will permanently delete your account"
es: "Esto guardará tu cuenta de forma permanente"     ← "will save"

Every key present. Every placeholder intact. Build green. Key-diffing checkers pass that file. Only reading it catches it.

Found in the wild

We run the check on public repos, verify every finding by hand against the source language, and send the fix upstream. In the first week: Solidus merged 13 pt-BR strings the same day, Plane merged a Czech fix in three hours, a nocodb maintainer swept all 39 locales off one issue, and an Excalidraw contributor added a placeholder-parity test suite off another. 64 repos scanned, 21 shipping a verified broken string, one row per repo with links: shipi18n.com/oss.

Two layers

npx @shipi18n/cli check ./locales -s en

Structural — deterministic, offline, no API key. Missing keys, dropped placeholders ({{name}}, %s, %1$s, $t(...), HTML), collapsed plurals, empty values, coverage. Exit codes, SARIF for PR annotations, JUnit. JSON, YAML, gettext .po, XLIFF, Android strings.xml, Apple .xcstrings, Flutter .arb.

npx @shipi18n/cli check ./locales -s en --semantic

Semantic — an LLM reads each source/translation pair and reports mistranslations, omissions and additions. Your key, changed keys only, 3-pass majority vote. Advisory by default: it warns, it does not fail your build.

Measured on a 228-pair corpus committed before the judge was written, thresholds fixed first: 54/54 planted errors caught, 12/168 false positives on clean pairs (7.1%), glossary 6/6. Label accuracy reproduced as a range, 98.1%–100%, across two runs. The harness is in the repo — run it against your own model.

Packages

Everything lives in one monorepo: Shipi18n/shipi18n

Package npm What it does
@shipi18n/cli npm check your locale files, translate them, lock hand-edited strings
@shipi18n/core npm The engine — checks, LLM judge, translation. Use it as a library
@shipi18n/mcp npm MCP server — validators for Claude Code, Cursor and friends. No API key needed
vite-plugin-shipi18n npm Build-time translation for Vite
shipi18n-github-action check locale files in CI — SARIF PR annotations, no key; optionally translate what fails

The MCP server's four validator tools (check_locales, check_glossary, diff_locales, review_locales) make zero model callsreview_locales hands the pairs and the criteria back to your agent, which does the judging with its own inference.

More: WordPress .po ↔ JED sync (wp-sync), a secret/PII pre-flight before any string reaches an LLM, and a --baseline mode to adopt on a catalog that already has findings. Runs without Node, too — the ghcr.io/shipi18n/cli Docker image, a pre-commit hook, or GitLab / Bitbucket CI.

Examples

Runnable examples live in the monorepo — examples/: react (Vite + react-i18next), nextjs (App Router), vue (vue-i18n), nodejs (@shipi18n/core).

Retired

Shipi18n used to be a hosted translation API with accounts and paid tiers. That service is shut down. There is no key to get and no bill to pay; the current tools run entirely on your machine against a provider you choose.

These packages are deprecated on npm and their repos are archived: @shipi18n/api · i18next-shipi18n-backend · the standalone shipi18n-cli and vite-plugin-shipi18n repos (the packages live on in the monorepo).


Apache-2.0 · shipi18n.com · Report a bug

Popular repositories Loading

  1. shipi18n-react-example shipi18n-react-example Public archive

    Moved to the Shipi18n monorepo → examples/react. Archived.

    JavaScript

  2. vite-plugin-shipi18n vite-plugin-shipi18n Public archive

    Archived — moved to the Shipi18n monorepo. Vite plugin for build-time i18n translation, bring your own LLM key (no hosted API).

    JavaScript

  3. shipi18n-cli shipi18n-cli Public archive

    Archived — moved to the Shipi18n monorepo, published as @shipi18n/cli. Open-source i18n QA linter + bring-your-own-LLM translation (no hosted API).

    JavaScript

  4. shipi18n-nextjs-example shipi18n-nextjs-example Public archive

    Moved to the Shipi18n monorepo → examples/nextjs. Archived.

    JavaScript

  5. .github .github Public

    Shipi18n organization profile

  6. shipi18n-vue-example shipi18n-vue-example Public archive

    Moved to the Shipi18n monorepo → examples/vue. Archived.

    JavaScript

Repositories

Showing 10 of 12 repositories
  • shipi18n Public

    Catch broken translations before you ship: dropped placeholders, missing keys, collapsed plurals — and, with your own LLM key, the mistranslations structure checks cannot see. CLI, MCP server, GitHub Action. Apache-2.0, no account, no server.

    Shipi18n/shipi18n's past year of commit activity
    JavaScript 0 Apache-2.0 0 1 0 Updated Sep 18, 2026
  • .github Public

    Shipi18n organization profile

    Shipi18n/.github's past year of commit activity
    0 Apache-2.0 0 0 0 Updated Sep 18, 2026
  • shipi18n-nodejs-example Public archive

    Moved to the Shipi18n monorepo → examples/nodejs. Archived.

    Shipi18n/shipi18n-nodejs-example's past year of commit activity
    JavaScript 0 Apache-2.0 0 0 0 Updated Sep 13, 2026
  • shipi18n-vue-example Public archive

    Moved to the Shipi18n monorepo → examples/vue. Archived.

    Shipi18n/shipi18n-vue-example's past year of commit activity
    JavaScript 0 Apache-2.0 0 0 0 Updated Sep 13, 2026
  • shipi18n-nextjs-example Public archive

    Moved to the Shipi18n monorepo → examples/nextjs. Archived.

    Shipi18n/shipi18n-nextjs-example's past year of commit activity
    JavaScript 0 Apache-2.0 0 0 0 Updated Sep 13, 2026
  • shipi18n-react-example Public archive

    Moved to the Shipi18n monorepo → examples/react. Archived.

    Shipi18n/shipi18n-react-example's past year of commit activity
    JavaScript 0 Apache-2.0 0 0 0 Updated Sep 13, 2026
  • shipi18n-github-action Public

    Check i18n locale files in CI — missing keys, dropped placeholders, collapsed plurals — with SARIF PR annotations and no API key. Optionally retranslate what fails with your own LLM key.

    Shipi18n/shipi18n-github-action's past year of commit activity
    0 Apache-2.0 0 0 0 Updated Sep 13, 2026
  • shipi18n-demo Public archive

    DEPRECATED — demoed the hosted Shipi18n API, which is shut down. See github.com/Shipi18n/shipi18n for the current tools.

    Shipi18n/shipi18n-demo's past year of commit activity
    HTML 0 Apache-2.0 1 0 4 Updated Sep 12, 2026
  • i18next-shipi18n-backend Public archive

    DEPRECATED — calls the hosted Shipi18n API, which is shut down; there is no v2. Translate at build time with @shipi18n/cli: github.com/Shipi18n/shipi18n

    Shipi18n/i18next-shipi18n-backend's past year of commit activity
    TypeScript 0 Apache-2.0 0 0 0 Updated Sep 12, 2026
  • shipi18n-api Public archive

    DEPRECATED — a client for the hosted Shipi18n API, which is shut down. Use @shipi18n/core instead: github.com/Shipi18n/shipi18n

    Shipi18n/shipi18n-api's past year of commit activity
    TypeScript 0 Apache-2.0 0 0 0 Updated Sep 12, 2026

Top languages

Loading…

Most used topics

Loading…