Messagevisor
Introducing Messagevisor Read more →

Translations as codefor product teams

Git-native i18n and l10n management.

Declare messages, build datafiles, and consume with SDKs.

my-messagevisor-project
description: Greeting shown on home page
translations:
en: "Welcome {name}!"
ja: "ようこそ、{name}!"
nl: "Welkom {name}!"
# (optional) conditional overrides
overrides:
- segments: pro-subscribers
translations:
en: "Welcome pro subscriber {name}!"
ja: "プロサブスクライバー{name}さん、ようこそ!"
nl: "Welkom pro abonnee {name}!"
my-app
import { createMessagevisor } from '@messagevisor/sdk'
import { createICUModule } from '@messagevisor/module-icu'
const m = createMessagevisor({
datafile,
modules: [createICUModule()],
})
m.translate('ui.greeting', { name: 'Ada' })
// → 'Welcome Ada!'
m.setContext({ plan: 'pro' })
m.translate('ui.greeting', { name: 'Ada' })
// → 'Welcome pro subscriber Ada!'

Quick install

terminal
npx @messagevisor/cli init

Catalog

A visual layer over yourtranslation definitions

The catalog is a browsable view of your Messagevisor project. Run it locally or export a static build in CI for teammates who prefer a UI over definitions.

Messagevisor catalog showing the account.orderStatus message with translations across de-DE, en, en-GB, en-US, and nl-NL locales
Explore the catalog docs →

npx messagevisor catalog to run locally

GitOps philosophy

Treat translations like infrastructure

Messagevisor is a translation workflow system, not just a runtime library.
Author, review, test, and deploy copy the same way you ship code.

Author translation definitions in Git and connect to GitHub

Author in Git

Locales, messages, segments, and targets live as definitions. Every change is versioned and reviewable.

Learn more
Build datafiles and publish to your cloud or CDN

Build and upload to CDN

Run the CLI in CI to validate, test, and generate compact JSON datafiles, then upload them to your CDN or custom server.

Learn more
Evaluate translations at runtime with context and overrides

Consume with SDKs

Load datafiles in your app. Segment overrides, ICU formatting, and context resolve at runtime without redeploying.

Learn more

Namespaces

Scale to thousands of messages

A flat messages directory stops working once you have hundreds or thousands of strings. Nest files in directories and Messagevisor builds the key from the path.

Path
Message key1,247 messages
messages/
signin.ymlauth.signinsignup.ymlauth.signupcart.ymlcheckout.carttotal.ymlcheckout.totalheader.ymlapp.nav.headerfooter.ymlapp.nav.footerprofile.ymlapp.settings.profile

… 1,238 more files across 38 namespaces

Each folder name becomes part of the message key. Set the separator in namespaceCharacter.

Namespaces docs →

Locales

Translations and formatting

Ship in as many languages and regional variants as you need. Every locale gets its own copy, currency, dates, and reading direction.

checkout.summary

Locale

en-US

Translation

Add to cart

Total

$12.99

Mar 6, 2026

Locale

en-GB

Translation

Add to basket

Total

£12.99

6 March 2026

Locale

nl-NL

Translation

In winkelwagen

Totaal

€ 12,99

6 mrt 2026

Locale

ar-SArtl

Translation

أضف إلى السلة

المجموع

‏١٢٫٩٩ ر.س

٦ مارس ٢٠٢٦

Each locale carries its own strings, currency, dates, and direction.

Locales docs →

Linear promotion

Promoting through environments

Development, staging, and production each have their own set in Git. Use promote to move content between them. Preview the output first, then run again with --apply when you want to write the changes.

Write drafts

Development

New messages, placeholders, and overrides live here until you promote them.

devsets/dev/messages/…
nav.home: [TODO: nav.home]

QA and review

Staging

Promoted content lands here. Lint, test, and review it before anything goes live.

stagingsets/staging/messages/…
nav.home: Home

Live traffic

Production

Validated translations end up here. Env-only messages, like staging banners, never get copied in.

productionsets/production/messages/…
nav.home: Home
promote
$ messagevisor promote --from=dev --to=staging
  preview: 12 updated, 3 created, 148 unchanged
$ messagevisor promote --from=dev --to=staging --apply
devstaging✓ promoted
$ messagevisor promote --from=staging --to=production --apply
stagingproduction✓ promoted

Allowed directions are set in promotionFlows. Most teams run dev → staging, then staging → production.

Environment promotion docs →

Deploy anywhere

Cloud-native by design

Bring your own CI/CD pipeline and CDN, and translations ship to the edge alongside your app, with no extra infrastructure.

CI/CD Pipelines

GitHubGitHub
GitLabGitLab
BitBucketBitBucket
JenkinsJenkins

Cloud & CDN

CloudflareCloudflareAmazon Web ServicesAmazon Web Services
Google CloudGoogle Cloud
Microsoft AzureMicrosoft Azure

Beyond runtime libraries

The full translation workflow

react-intl, react-i18next, and next-intl render strings in your app. Everything upstream is on you. Messagevisor adds authoring in Git, lint and test in CI, a build step that compiles datafiles, and publishing to CDN or storage separate from app releases.

Runtime libraries

Covers runtime only

Author

Repo or TMS

Validate

Custom or none

Build

App bundler

Publish

With app release

Runtime

Library APIs

react-intlreact-i18nextnext-intl

Messagevisor

Author through publish

Author

Definitions in Git

Validate

Lint & test

Build

Compile datafiles

Publish

CDN / storage

Runtime

SDK

Libraries render at runtime. The upstream pipeline is yours to wire up. Messagevisor provides those layers with translation-native tooling.

Ready to ship?

Start managing translations like a team

Messagevisor is free, open source, and works with your existing Git workflow. No vendor accounts, no lock-in. Just bring your translations in as definitions.

  • Open source
  • MIT licensed
  • No vendor lock-in

Frequently asked questions

Everything you need to know about Messagevisor.