StringLane

    Type to search titles, sections and body text across all 58 pages.

    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 into your repository that 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 (detected)
    4 locales · 10 keys · 73% of strings filled
     
      de      8/8        complete
      en      10/10      complete
      fr      7/8        1 missing
      uk      1/8        7 missing
     
    7 errors · 4 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 scanFinds keys your code no longer calls, and keys it calls that do not existNo
    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 pluralizeGives an i18next key that shows a count its plural forms, in the base locale onlyYes, 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, except stale and unconfirmed translations, so an unclean project can adopt the gateYes, asks first
    stringlane acceptConfirms translations against today's base text, so check stops reporting them as stale or unconfirmedYes, 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 setup rulesShows, or writes, the localization rules in your AGENTS.mdOnly with --apply
    stringlane setup skillsShows, or writes, the agent plugin's skills into .agents/skills, for agents with no StringLane pluginOnly with --apply
    stringlane setup guardPrints the permission block that makes Zed or OpenCode ask before an agent edits a locale fileNo, it prints
    stringlane hookAnswers an agent host's pre-write hook. Your agent host runs it, not youNo
    stringlane upgradeChecks whether a newer version is published, and prints the command to install itNo
    stringlane telemetryReports or changes whether usage data is sent, and shows the random install ID it carriesLocal 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 inspect, check, plan and validate do write goes to StringLane's own state directory, never into your repository: a random install ID, created on the first run unless DO_NOT_TRACK=1, STRINGLANE_TELEMETRY=0 or a CI runner turns usage data off; the date and result of the daily update check, unless that check is switched off; and, from check and scan, a cache that records every key name and line number found in each source file they scanned. Install and update lists everything that directory holds.

    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.

    Free · In your coding agent

    Run the same checks from your coding agent

    Paste this into Claude Code, Cursor, Codex or five other agents. It sets up the CLI and MCP server for this project, proposing each command and waiting for your yes.

    Read https://stringlane.app/docs/cli/agent-setup.md and set up StringLane for this project.

    Or install it yourself:

    npm install -g @stringlane/cli