Skip to content

Namespaces

A namespace is a group of translation keys inside a project. Every key belongs to exactly one namespace. Namespaces are the deployment boundary on the CDN — each (language, namespace) pair becomes one JSON file — and they are the basic unit of ownership and code-splitting.

You do not need namespaces for a small project. Every project starts with a default namespace, and until you feel one of the problems below, everything can live there:

Problem you haveHow a namespace fixes it
Loading all translations on every page makes payloads largeLoad only the namespaces the current screen needs
Unrelated parts of the product are edited by different peoplePut each area in its own namespace, assign reviewers per area
Keys from totally different surfaces clash or make search noisySplit by surface (marketing, app, emails) so the editor stays navigable

If none of those pinch, stay on default. Introduce namespaces when one of them starts to matter — not preemptively.

  • Keys are unique within a namespace, not across a whole project. nav.home can exist in common and in emails; they are two different keys.
  • Each namespace ships as a separate JSON file per language on publish — e.g. cdn.comvi.io/<token>/checkout/fr.json. The default namespace is served at the project root: cdn.comvi.io/<token>/fr.json.
  • Imports, exports, and CDN publish settings all let you pick a subset of namespaces.
  • Permissions are project-scoped, not namespace-scoped. To restrict editing by area, use separate projects.

The right split depends on who owns what and how your app loads.

The most common choice. Namespace per top-level feature or route group:

common — shared UI (Save, Cancel, error banners)
auth — login, signup, password reset
dashboard — the main product surface
billing — plans, invoices, checkout
emails — transactional email templates

Fits SPAs that already code-split routes: each route loads its own namespace plus common.

If one project spans very different consumers, split by consumer:

marketing — landing pages, docs site copy
app — the product itself
mobile — strings only the mobile app uses
emails — transactional copy

If separate teams or external agencies own different areas:

core-product — in-house
legal — reviewed by legal team only
marketing — reviewed by marketing team
support-email — support team writes, legal reviews

You cannot enforce “team X only edits namespace Y” with permissions alone — permissions are project-wide — but the namespace boundary makes the hand-off obvious and keeps imports/exports clean.

  1. Open the project and go to the namespace selector on the Translations page
  2. Click Add Namespace
  3. Name it in lowercase, short, hyphen-separated if needed (user-settings, not UserSettings)
  4. Optionally add a description

You can rename and delete namespaces from the same place.

The default namespace cannot be deleted — if you want it renamed in URLs, create a new namespace, move keys into it, and stop using default.

Select keys in the Translations page → Move namespace → pick the target. Values, history, and comments move with them. If a key name collides with an existing key in the target namespace, the move fails and tells you which key to rename first.

  • Start at one, split when it hurts. Don’t design namespaces upfront.
  • Keep a common namespace for strings that appear everywhere — it’s the one every page loads.
  • Aim for 3–15 namespaces. Hundreds of namespaces recreates the problem you tried to solve.
  • Use stable, URL-safe names. They end up in CDN URLs and build pipelines — renaming is cheap but breaks consumers until they redeploy.
  • Keys are unique per namespace; the same key name can legitimately exist in multiple namespaces.
  • Permissions are not namespace-scoped — for strict editorial boundaries, split into separate projects.

Check that the consumer is loading the new namespace. Build-time pulls need a republish; runtime loaders need their namespace list updated.

They are in different namespaces. Use the namespace column in the Translations page to tell them apart.