Skip to main content

From an untranslated repository to translated locale files.

Start in the CLI. init needs no account; live translation does. Your files stay the source of truth.

  1. 1

    Look before you sign up

    init reads your repository and reports its layout, format and likely source language. It never assumes English and refuses to guess when the evidence is tied.

    npx @stringtide/cli init
    ./messages  {locale}.json  json · 412 keys
      source de — declared in i18n.config.ts
      fr 380/412 · es 412/412 · ja 41/412
  2. 2

    Sign in

    The CLI shows a short device code for you to confirm in the browser. Credentials are stored outside your repository.

    npx @stringtide/cli login
  3. 3

    Create the project and push the source strings

    The manifest sends hashes first, then uploads only new or changed source strings.

    npx @stringtide/cli projects create --from-config
  4. 4

    Fill the gaps and write files

    Live translation pushes sources, translates only gaps, validates placeholders and writes patches. Use --review for a human gate and --dry-run to see words before a run.

    npx @stringtide/cli translate --locale fr --dry-run
    npx @stringtide/cli translate --locale fr
    translate → fr (dry run)
      32 keys missing · 148 words
      Exact memory hits may reduce this further once the strings are in the cloud.
      dry run — nothing sent
    
    translate → web · fr
      32 translated, 0 failed · 6 from memory (no tokens spent)
      claude-haiku-4-5 · 18,204 tokens · $0.06 (byo)
      approved 32 suggestions
      pull ← web
        + fr checkout.pay → "…"
  5. 5

    Optional: review in the console

    For a human gate, translate with --review, approve in the console, then pull. Placeholders are checked again before files are written.

    npx @stringtide/cli translate --locale fr --review
    npx @stringtide/cli pull
  6. 6

    Put the check in CI

    status --check reads the filesystem without calling the API, so an outage cannot fail your build.

    - uses: stringtide/action@v1
      with:
        command: status
        token: ${{ secrets.STRINGTIDE_TOKEN }}

No repository to hand?

upload accepts a zip, folder or loose files and uses the same detection as push.

npx @stringtide/cli upload ./translations.zip --dry-run

Full CLI reference