
Company News
Free Business Plan Upgrades for Open Source Maintainers
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.
@verbumia/in-context
Advanced tools
In-context (on-device) translation editing for Verbumia — pair a live app to the editor and see edits apply in place. React (web) + React Native / Expo.
In-context (on-device) translation editing for Verbumia.
A plugin of your existing @verbumia/react-i18next provider: pair your
running app to the Verbumia editor, and translations the editor changes apply
live, in place — no redeploy, no page reload. The plugin also reports which
strings are on the current screen so the editor can highlight them.
@verbumia/in-context/react — the VerbumiaProvider plugin (web / React).@verbumia/in-context/native — the same plugin for React Native / Expo.@verbumia/in-context/core — the framework-agnostic client
(InContextClient, parseEvent, applyEdit) for advanced / other-framework use.In-context editing is headless: the SDK owns pairing, the live channel, applying edits, and reporting on-screen keys — your app owns the pairing UI (a short-code / paste box on web, a QR scan with your own camera on native).
MIT.
npm i @verbumia/in-context
# peer: @verbumia/react-i18next >= 1.0.6 (needed so live edits repaint the
# public useTranslation hooks in place — see "Apply edits" below)
# @verbumia/realtime (the Centrifugo transport) is pulled in automatically
import { VerbumiaProvider } from "@verbumia/react-i18next";
import { inContextPlugin, type InContextController } from "@verbumia/in-context/react";
let controller: InContextController | null = null;
<VerbumiaProvider
token="vrb_live_…"
projectUuid="…"
defaultLocale="fr"
plugins={[
inContextPlugin({
device: "Marketing site · Chrome",
onReady: (c) => (controller = c),
onStatus: (s) => console.log("in-context:", s),
}),
]}
>
<App />
</VerbumiaProvider>;
// When the user pastes the short code shown in the editor:
await controller?.pair(codeFromInput);
// Call this on route / screen change so the editor tracks what's visible:
router.afterEach(() => controller?.reportKeys());
Identical, importing from @verbumia/in-context/native. Scan the editor's QR
with your own camera component (e.g. expo-camera / react-native-vision-camera)
and hand the decoded pairing_token to controller.pair(token) — the SDK
bundles no camera. The client uses only JSON-body POSTs (no URLSearchParams),
so it is Hermes-safe.
import { inContextPlugin } from "@verbumia/in-context/native";
inContextPlugin({
device: "iPhone 15 · Expo",
onReady: (c) => setController(c),
});
// from your QR scanner's onScan handler:
await controller.pair(decodedPairingToken);
controller.pair(pairingToken) calls POST /v1/in-context/pair
with the single-use token and gets back a scoped, subscribe-only
Centrifugo sub-token, the session channel, and the realtime rtUrl
(server-provided — never hardcoded).@verbumia/realtime LiveClient
transport and listens for paired / edit / session_ended.edit becomes an in-memory i18next override
(addResource) followed by i18n.refresh() (react-i18next ≥1.0.6), which
repaints both the SDK's useTranslation hooks and react-i18next-native
consumers in place, without a CDN re-fetch (so the override isn't
clobbered). On a host pinned to react-i18next <1.0.6 the public hooks won't
repaint until the next render — bump to ≥1.0.6. Edits to a background
language are stored silently and surface when you switch to it.controller.reportKeys(), the keys rendered on the current view (read
from the i18n SDK's __verbumia_key_registry__) are POSTed to
/v1/in-context/sessions/{id}/keys so the editor can highlight them. Each
item is the canonical shape { namespace, key, values? }, where values
carries the value the device rendered on screen (the active locale's raw
template). The SDK omits sourceValue. The backend's /keys endpoint is
pass-through (it relays your items verbatim); the editor dashboard
resolves the authoritative sourceValue and the full per-locale values from
its own project data, so the device never has to know every locale. Reports
are capped at 500 items.session_ended or when the
sub-token expires (the pairing token is single-use and can't be re-authed).| Member | Description |
|---|---|
pair(pairingToken, device?) | Start a session from a pairing token. Re-pairing ends the previous session first. |
reportKeys() | Re-report the keys on screen now (call on navigation). Best-effort. |
end() | Locally tear down the session. |
status | idle | connecting | connected | disconnected | ended. |
sessionId | The server-minted session id once paired. |
FAQs
In-context (on-device) translation editing for Verbumia — pair a live app to the editor and see edits apply in place. React (web) + React Native / Expo.
The npm package @verbumia/in-context receives a total of 2 weekly downloads. As such, @verbumia/in-context popularity was classified as not popular.
We found that @verbumia/in-context demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.

Security News
During a UK cyber test, a Mythos 5 agent used sockpuppets, social engineering, and prompt injection to try to get a maintainer to merge malware.