<a href='https://inlang.com/c/apps' target="_blank">🕹️ Apps</a>
·
<a href='https://inlang.com/documentation' target="_blank">📄 Docs</a>
·
<a href='https://discord.gg/gdMPPWy57R' target="_blank">💙 Discord</a>
·
<a href='https://twitter.com/inlangHQ' target="_blank">𝕏 Twitter</a>
1.9k+ GitHub stars · 395k+ weekly npm downloads · 110+ contributors
Used across the inlang ecosystem by teams at
Inlang is the open format TMS (translation management system).
Store localization as a vendor-neutral .inlang project that can be read and written by TMS workflows, editors, CI, runtimes, plugins, and AI agents.
.inlang can be a packed project.inlang file or an unpacked project.inlang/ directory. @inlang/sdk is the reference implementation for reading and writing both representations. Inlang is the ecosystem around that format: plugins, editor workflows, CI checks, runtime integrations, and versioning via Lix.
Inlang is a fit when engineering, localization, design, CI, and automation need to work on the same localization data. If you need a fully managed enterprise localization suite with built-in vendor management, translation memory, glossary workflows, assignments, and procurement features, evaluate inlang as an open localization format rather than a full replacement for every enterprise TMS function.
| Layer | What it is |
|---|---|
| inlang | Open localization format and ecosystem |
.inlang |
Canonical project file or directory format |
@inlang/sdk |
Read/write API for editors, CLIs, CI checks, runtimes, plugins, and agents |
| Plugins | Compatibility layer for JSON, ICU MessageFormat, i18next, XLIFF, and other file formats |
| Lix | Versioning, history, review, change proposals, rollback, and merging |
| Tools | Fink, Sherlock, Parrot, CLI, and Paraglide workflows that read/write .inlang |
.inlang..inlang without requiring Git.@inlang/sdk instead of inventing another i18n schema..inlang remains the shared project model.If you are building localization tooling or generating localization code, target the .inlang project with @inlang/sdk. Your output will work with the same data model used by editors, CI checks, runtimes, plugins, and translation workflows.
For coding agents:
project.inlang file or project.inlang/ directory before creating new locale files.@inlang/sdk.locales/en.json schema when a .inlang project already exists.Messages, variants, and locale data live in the .inlang database. External translation files such as messages/en.json are compatibility files connected through plugins.
There are two representations:
project.inlang # canonical packed file
project.inlang/ # Git-friendly unpacked representation
├── settings.json # locales, plugins, file patterns; kept in Git
├── .gitignore # generated; ignores everything except settings.json
├── README.md # generated; explains this folder to coding agents
├── .meta.json # generated SDK metadata
└── cache/ # plugin cache, created when plugins are loaded
project.inlang is the canonical packed file and portable representation. project.inlang/ is the Git-friendly unpacked representation used for review and repository workflows. Both represent the same localization project; the SDK handles reading and writing them.
Traditional TMSs make a vendor database the localization source of truth. Translation files become exports.
Common translation files like JSON, YAML, ICU, or XLIFF are good at storing messages. But they do not describe the whole localization project.
Once multiple tools need to read and write the same project, plain translation files start to miss important information:
Without one shared format, every tool invents its own file structure, sync logic, and collaboration workflow.
Even basic import/export for translation file formats gets duplicated across tools instead of being shared.
The result is fragmented tooling:
┌──────────┐ ┌───────────┐ ┌──────────┐
│ i18n lib │───✗────│Translation│────✗────│ CI/CD │
│ │ │ Tool │ │Automation│
└──────────┘ └───────────┘ └──────────┘
Every tool has its own format, its own sync, its own collaboration layer. Cross-team work? Manual exports and hand-offs.
Inlang makes the localization file the source of truth. The TMS becomes a layer around the format, not the owner of the data.
It provides:
Core data model:
┌──────────┐ ┌───────────┐ ┌────────────┐
│ i18n lib │ │Translation│ │ CI/CD │
│ │ │ Tool │ │ Automation │
└────┬─────┘ └─────┬─────┘ └─────┬──────┘
│ │ │
└─────────┐ │ ┌──────────┘
▼ ▼ ▼
┌──────────────────────────────────┐
│ .inlang file │
└──────────────────────────────────┘
The result:
.inlang-compatible tools with less migration workTranslators do not need to work directly with files or Git. Editor-friendly apps and workflows operate on the same open localization data.
If you only need an app runtime and a couple of translation files, JSON or your current i18n setup may already be enough. Use inlang when localization becomes shared work: multiple tools, teams, automations, or agents need to use the same localization data.
Inlang is an open-format TMS for software teams: localization data lives in a portable .inlang file or directory, with TMS workflows layered around it.
| Approach | Source of truth | Best for | Tradeoff |
|---|---|---|---|
| Traditional TMS | Vendor database | Managed translation workflows, vendors, assignments, and enterprise localization ops | Translation files become synced exports; migration, automation, and CI depend on the vendor |
| Runtime i18n libraries | App dictionaries or compiled catalogs | Rendering translations in the app | Runtime lookup is solved, but localization workflow data is still scattered |
| Translation files only | JSON, YAML, ICU, i18next, XLIFF, etc. | Small apps and simple runtime lookup | Teams maintain their own schema, validation, sync logic, and collaboration workflows |
| inlang | .inlang file or directory |
Software teams that want portable localization data with TMS workflows | Requires adopting the .inlang model; existing JSON, ICU, i18next, and XLIFF files connect through plugins |
Inlang gives tools, CI, translators, and automation one open format to work on instead of syncing separate exports.
A typical software localization workflow looks like this:
.inlang tooling..inlang project becomes the shared localization source of truth..inlang, such as Fink, without working directly in Git..inlang source when the app ships.| Layer | What it provides |
|---|---|
.inlang |
Open localization format and source of truth |
@inlang/sdk |
Read/write API for editors, CI, agents, and automations |
| Plugins | Compatibility with JSON, ICU, i18next, XLIFF, and other existing message formats |
| Lix | History, review, change proposals, rollback, and merging |
| CLI / CI | Checks for missing translations, placeholders, and message-format issues |
| Editor tools | Translation and review workflows without requiring translators to use Git |
| Runtime tools | App integration from the same localization source, for example through Paraglide |
This is different from a traditional TMS where the vendor database owns the localization state and translation files are exports. In inlang, the localization project remains portable; TMS workflows operate around the open format.
These tools read and write .inlang for different parts of the localization lifecycle.
$ claude mcp add inlang \
-- python -m otcore.mcp_server <graph>