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.
When to use them
Section titled “When to use them”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 have | How a namespace fixes it |
|---|---|
| Loading all translations on every page makes payloads large | Load only the namespaces the current screen needs |
| Unrelated parts of the product are edited by different people | Put each area in its own namespace, assign reviewers per area |
| Keys from totally different surfaces clash or make search noisy | Split 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.
How it works
Section titled “How it works”- Keys are unique within a namespace, not across a whole project.
nav.homecan exist incommonand inemails; 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. Thedefaultnamespace 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.
Strategy guides
Section titled “Strategy guides”The right split depends on who owns what and how your app loads.
By feature / route
Section titled “By feature / route”The most common choice. Namespace per top-level feature or route group:
common — shared UI (Save, Cancel, error banners)auth — login, signup, password resetdashboard — the main product surfacebilling — plans, invoices, checkoutemails — transactional email templatesFits SPAs that already code-split routes: each route loads its own namespace plus common.
By surface
Section titled “By surface”If one project spans very different consumers, split by consumer:
marketing — landing pages, docs site copyapp — the product itselfmobile — strings only the mobile app usesemails — transactional copyBy team or workflow
Section titled “By team or workflow”If separate teams or external agencies own different areas:
core-product — in-houselegal — reviewed by legal team onlymarketing — reviewed by marketing teamsupport-email — support team writes, legal reviewsYou 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.
Creating and managing namespaces
Section titled “Creating and managing namespaces”- Open the project and go to the namespace selector on the Translations page
- Click Add Namespace
- Name it in lowercase, short, hyphen-separated if needed (
user-settings, notUserSettings) - 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.
Moving keys between namespaces
Section titled “Moving keys between namespaces”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.
Best practices
Section titled “Best practices”- Start at one, split when it hurts. Don’t design namespaces upfront.
- Keep a
commonnamespace 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.
Limits
Section titled “Limits”- 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.
Troubleshooting
Section titled “Troubleshooting”An app is missing keys after I moved them
Section titled “An app is missing keys after I moved them”Check that the consumer is loading the new namespace. Build-time pulls need a republish; runtime loaders need their namespace list updated.
I see two keys with the same name
Section titled “I see two keys with the same name”They are in different namespaces. Use the namespace column in the Translations page to tell them apart.