Skip to main content
The CLI reads a .nt3.yml file from your project root (the directory where you run nt3 commands). This file defines which Entri project to sync with and where your translation files are located.

Minimal example

Full reference

project_id

Required. The ID of your Entri project. Found in the Entri dashboard under Project Settings.

source_language

Required. The language code for your source strings — the language your developers write in. Common values: en, de, fr, ja.

update_translations (optional)

Controls whether nt3 push overwrites existing translations. Mirrors the --overwrite CLI flag, but lets you set a per-project default in the config file.
The --overwrite flag always takes precedence over this setting when both are present.

file_patterns

Required. A list of file pattern objects. Each entry defines one set of translation files to sync.
Each file pattern has the following fields:

path

Required. The file path pattern with a {lang} placeholder. The CLI replaces {lang} with the language code at runtime.
The path is resolved relative to the directory where you run nt3 commands (typically your project root).

format

Required. The file format. Must be one of the supported format identifiers:

namespace (optional)

A namespace string to scope this file’s keys within the project. Useful when multiple file patterns share the same project but represent different parts of the app.

Multiple file patterns

Projects that split translations across multiple files — by feature, by library, or by format — can define multiple patterns:
All patterns are processed in order when you run nt3 push or nt3 pull.

Mobile app example

For Android XML, the source language file path should use the base values directory convention. When using the CLI, make sure the path pattern resolves correctly for both the source and target languages.

Flutter example

GNU gettext example

Generating the config file

Rather than writing .nt3.yml by hand, use nt3 init to create it interactively or non-interactively:
Use --force to overwrite an existing config: