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
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
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
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
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 frtranslate → 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
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
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