StringLane

Browse docsThe stringlane CLI
Concept

The stringlane CLI

Check, plan, translate, add keys and locales, and write back through the same checks the desktop app runs, from your terminal, in CI, and inside a coding agent. Free, local, and it writes nothing you did not ask for.

Last updated

The desktop app tells you what is wrong with your translations while you are looking at them. The CLI tells your build.

It is the same engine underneath: the same parsers, the same validation rules, the same completion figures — one implementation, called from both surfaces rather than two copies that drift apart.

stringlane check .

What you get#

Point it at a project folder and it reports which locales are behind, which keys are missing, which translations are structurally broken, and sets an exit code your pipeline can branch on.

xcstrings · single-origin · base en
4 locales · 10 keys · 64% complete

  de      9/11       2 missing
  en      11/11      complete
  fr      9/12       3 missing
  uk      1/13       12 missing

8 errors · 3 warnings · 0 info

Beyond that report, the CLI is also how a coding agent gets safe access to your localization files. stringlane mcp serves the project over the Model Context Protocol, so your agent can find exactly what needs translating and write it back through the same validation gate, instead of hand-editing files whose escaping it will get subtly wrong.

The commands#

CommandWhat it doesWrites?
stringlane initDetects the project and writes stringlane.yamlYes, asks first
stringlane inspectEvery locale, how complete it is, and which files were readNo
stringlane checkThe same report plus validation, and an exit codeNo
stringlane planThe exact list of what needs translating, for an agent to work fromNo
stringlane validateChecks an agent's translations without touching a fileNo
stringlane applyWrites them, all or nothing, and only if nothing movedYes, asks first
stringlane updateTranslates the missing strings itself using your own provider keyYes, asks first
stringlane describeWrites key descriptions, so translations are made with contextYes, asks first
stringlane add-localeCreates the file for a locale the project does not have yetYes, asks first
stringlane add-keyAdds a key and its source string to the base locale, so every other locale reports it missingYes, asks first
stringlane contextShows or sets product, branding, locale and terminology contextYes, asks first
stringlane mcpServes the project to a coding agent over MCP (stdio)Through its tools
stringlane baseline writeRecords today's issues, so an unclean project can adopt the gateYes, asks first
stringlane setup mcpShows, or writes, your agent's MCP configurationOnly with --apply
stringlane setup hooksShows, or writes, the write guard in your agent's settingsOnly with --apply
stringlane telemetryReports or changes whether anonymous usage data is sentLocal state only

Full flags and behaviour per command are in the CLI reference.

What it will not do#

The four read-only commands are read-only with respect to your repository. inspect, check, plan and validate write nothing inside your project: not a lock file, not a re-saved locale file, not a byte. The test suite snapshots every file's contents, size and modification time before and after, on Linux, macOS and Windows. What check and scan keep between runs is a cache of which source files they have already scanned, and it lives in StringLane's own state directory, never in your repository.

The commands that do write ask before they do, and refuse outright when there is no terminal to ask at unless you passed --yes. A CI job cannot accidentally commit a decision nobody made.

Nothing follows a symbolic link out of your project root: not the config, not the baseline, not --output, and not a path named inside a plan file. A repository that ships a redirect does not get to choose where an agent's translations land.

Where to go next#

Frequently asked questions

Is the stringlane CLI free?
Yes. There is no licence key and no activation, and it does not read one: use it on as many machines, projects and CI runners as you like, including at work. It is versioned and licensed separately from the desktop app, and buying the app grants nothing on the CLI in either direction.
Does the CLI need the desktop app installed?
No. It is a standalone package with no dependency on the app, and the two never talk to each other. They agree because they run the same engine over the same files and the same stringlane.yaml, not because one is driving the other.
Which file formats does the CLI support?
The same five as the app: iOS .strings with its companion .stringsdict, Xcode .xcstrings String Catalogs, Flutter ARB, Android XML, and i18next JSON.