Shipi18n vs i18n-check
@lingual/i18n-check is an actively maintained open-source CLI that validates locale files structurally — missing, invalid, unused and undefined keys — for ICU, i18next, react-intl and next-intl projects.
TL;DR
Choose i18n-check for fast, dependency-light key-diffing — it is good at it, actively maintained, and its unused/undefined-key detection scans your source code, which Shipi18n does not do today. Choose Shipi18n when you also want the semantic layer (an LLM reading each pair for mistranslations key-diffing cannot see), mobile formats (.arb, .xcstrings) and SARIF-annotated PRs. Running both is perfectly reasonable.
Pricing Comparison
Shipi18n
Open SourceNo subscription and no account. You pay your LLM provider directly, at their prices.
i18n-check
Open-source key checkerNo hosted service; runs locally and in CI.
Feature Comparison
| Feature | Shipi18n | i18n-check |
|---|---|---|
| Free Tier Keys | Unlimited | Unlimited (OSS) |
| Free Tier Languages | Unlimited | Unlimited (OSS) |
| AI Translation | Your own model (Anthropic, OpenAI, or custom) | None (checker only) |
| Semantic Translation QA | Yes — LLM judge, 3-pass vote, advisory by default | No — structural checks only |
| Placeholder Preservation | ✓ | ✓ |
| CLI Tool | ✓ | ✓ |
| Programmatic API | ✓ | ✓ |
| GitHub Action | ✓ | ✗ |
| Translation Cache | Build-time cache + incremental mode | — |
| Support | GitHub Issues + Discord | GitHub Issues |
i18n-check Pros & Cons
Pros
- +Actively maintained with frequent releases
- +Widely used (six-figure weekly npm downloads)
- +Unused/undefined key detection via source scanning
- +ICU, i18next, react-intl and next-intl support
- +Lightweight, no LLM or API key anywhere
Cons
- -Structural checks only — no semantic layer, so a fluent mistranslation passes
- -JSON/YAML focus — no Flutter .arb or Apple .xcstrings
- -No GitHub Action or editor extension shipped
- -No SARIF output for inline PR annotations
- -No glossary/terminology enforcement
Which Should You Choose?
Choose i18n-check if you...
- •Teams that want pure key-diffing with zero model involvement
- •react-intl and next-intl projects
- •Catching unused keys via source-code scanning
- •Minimal-dependency CI setups
Choose Shipi18n if you...
- •Want open-source tooling you can read, fork and vendor
- •Would rather pay your LLM provider directly than a middleman
- •Need your source strings to stay out of a third party's database
- •Want translation in CI, your editor, or your build — not another dashboard
- •Have no interest in seats, quotas or annual contracts
See How Simple Shipi18n Is
# Translate your en.json to 5 languages in seconds
$ export ANTHROPIC_API_KEY=your-key-here
$ npx @shipi18n/cli translate en.json --target es,fr,de,ja,zh
✓ Translated to 5 languages!
✓ Saved: ./locales/es.json
✓ Saved: ./locales/fr.json
✓ Saved: ./locales/de.json
✓ Saved: ./locales/ja.json
✓ Saved: ./locales/zh.json
Done in 3.2sNo account, no contract, no dashboard. Just translations.
Ready to Ship in Every Language?
Start with 100 free translation keys. No credit card required. Upgrade when you need more.