Node.js SDK
Node.js uses the same @messagevisor/sdk package as browser JavaScript, but is often paired with file-system loaded datafiles and server-side context.
Install#
Command
$ npm install @messagevisor/sdkBasic example#
Node.js
const { readFileSync } = require("fs");const { createMessagevisor } = require("@messagevisor/sdk");const datafile = JSON.parse( readFileSync("./datafiles/messagevisor-web-en-US.json", "utf8"));const m = createMessagevisor({ datafile, locale: "en-US", context: { platform: "web" },});console.log(m.translate("auth.signin"));Per-request context#
For server applications, you typically create one SDK instance per datafile and pass per-request context at evaluation time rather than storing it on the instance:
Node.js
const translation = m.translate("dashboard.welcome", { name: "Ada" }, { context: { plan: "pro" },});This avoids shared mutable state when handling concurrent requests.
Multiple locales#
For services that need to serve multiple locales, create one SDK instance per locale:
Node.js
const path = require("path");const { readFileSync } = require("fs");const { createMessagevisor } = require("@messagevisor/sdk");function loadMessagevisor(locale) { const datafile = JSON.parse( readFileSync( path.join("datafiles", `messagevisor-web-${locale}.json`), "utf8" ) ); return createMessagevisor({ datafile, locale });}const ms = { "en-US": loadMessagevisor("en-US"), "nl-NL": loadMessagevisor("nl-NL"),};function translate(locale, key, values) { return ms[locale]?.translate(key, values) ?? key;}With modules#
Node.js
const { createMessagevisor } = require("@messagevisor/sdk");const { createICUModule } = require("@messagevisor/module-icu");const m = createMessagevisor({ datafile, locale: "en-US", modules: [createICUModule()],});Good fits#
- API servers that render translated content server-side
- server-rendered apps (Next.js server components, Express, etc.)
- scripts that validate built datafiles
- email rendering services that need locale-aware formatting

