I built Messagevisor, a Git-native i18n management solution for product teams
If you've used Featurevisor before, you might recognize the approach. Same GitOps philosophy, different problem: this time it's translations.
The problem
Most i18n setups have a gap. Libraries like react-i18next or next-intl handle the runtime side well, but everything upstream, like authoring, reviewing, testing, and deploying translations are either duct-taped together or handed off to a SaaS TMS you don't fully control.
I wanted translations to go through the same workflow as code: pull requests, CI checks, and a proper audit trail in Git.
What Messagevisor does
You define messages as YAML files in a dedicated Git repo:
# messages/dashboard/greeting.yml
description: Greeting shown on home page
translations:
en: "Welcome {name}!"
nl: "Welkom {name}!"
ja: "ようこそ、{name}!"
overrides:
- segments: pro-subscribers
translations:
en: "Welcome pro subscriber {name}!"
From there, the CLI lints, tests, and compiles everything into compact JSON datafiles. You publish those to your CDN, independently of your app release, and consume them at runtime via a small (~5kB) SDK.
Key things it supports
- 📁 Namespaces: file paths become message keys, scales to thousands of strings
- 🌍 Locales: regional copy, currency, dates, RTL, and locale inheritance
- 🎯 Audience targeting: serve different copy to different user segments without redeploying
- 🧪 A/B copy variants: run copy experiments the same way you'd run feature experiments
- 🔁 Environment promotion:
messagevisor promote --from=dev --to=stagingwith a diff preview - 📤 Translator handoff: export a CSV for human translators or pipe it through an AI agent
It's open source
MIT licensed, no vendor lock-in, bring your own CI/CD and CDN.
It's clearly engineering focused, and you may struggle to get it adopted if you have non-technical folks in the workflow as well. But if they are into vibe coding, it might just fly.
Would love to hear what you think, especially if you've struggled with the translation workflow problem before.

Top comments (0)