Detect · translate gaps · validate · write
Keep your translations in sync
Find what’s missing, draft into your locale files, review, then ship.
Or find the gaps in your repo now:
npx @stringtide/cli init
English → French example · French
1 AI draft to checknav.home
Accueil
checkout.button
Passer la commande
cart.empty
Votre panier est vide
signup.title
Not translated yet
French
2 of 4 strings
Works with the files you have
- next-intl
- i18next
- vue-i18n
- Rails
- Flutter
- CSV
How it works
One string, every language
Follow checkout.button from your repo into French.
01
Write it, push it
Add the string to a locale file you already commit. stringtide push sends only new or edited source strings.
{
"checkout.button": "Proceed to checkout",
"cart.title": "Your cart"
}02
AI drafts, a person approves
Each target language gets a suggestion, never an approval. Reviewers fix the wording; placeholders are checked before anything is approved.
checkout.button · en → fr
« Passer à la caisse »
claude-sonnet-4-511 reused · 1 sent to the model
Placeholder {count} is missing — placeholders have to match the source exactly.
source: Added {count} items to your cart
me: « Passer à la caisse » → « Passer la commande ».
03
Pull it back
stringtide pull writes approved text into your files as a diff.
{
"app.title": "Mon Appli",
- "checkout.button": "Passer à la caisse"+ "checkout.button": "Passer la commande" }Coverage you can trust
See what is ready and what needs review
Track missing text, AI drafts and approved translations by language. Use --review in the CLI when a person should review before files are written.
AI drafts wait for review
Unapproved drafts still count as missing.
Source edits need re-review
Change English and translations go back to waiting.
You see the cost
Each AI run shows model and price. Reused strings are free.
Same rules in the app, API, and CLI.
The loop
Four commands. The last one writes.
Detect files, push changes, draft gaps, pull approvals back.
Quickstart$ stringtide initfound ./locales · {locale}.json · json · source en$ stringtide push35 keys announced · sent 2 changed source strings$ stringtide translate --locale fr --review12 translated, 0 failed · 6 from memory (no tokens)$0.02 (byo) — suggestions ready for review$ stringtide pullapplied 12 translations → locales/fr.json
Start with the files you already have
Free in beta: one project, unlimited languages and people, and 25,000 source words translated each month with managed AI or your own provider key.