> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nt3.io/llms.txt
> Use this file to discover all available pages before exploring further.

# nt3 push

> Push local translation files to Entri.

Upload translation files from your local project to Entri. By default, all language files matching your configured file patterns are discovered and pushed. Any non-source languages found are automatically enabled as target languages in the project. Existing translations are skipped unless `--overwrite` is specified.

## Usage

```bash theme={null}
nt3 push [options]
# alias: nt3 up
```

## Examples

```bash theme={null}
# Push all discovered language files (default)
nt3 push

# Push and replace existing translations
nt3 push --overwrite

# Push a specific language only
nt3 push -l fr

# JSON output for CI/CD
nt3 push --json
```

## Options

| Flag                    | Description                                              |
| ----------------------- | -------------------------------------------------------- |
| `-o, --overwrite`       | Overwrite existing translations (default: skip existing) |
| `-l, --language <lang>` | Push a specific language only (e.g., `-l fr`)            |
| `--json`                | Output results as JSON                                   |

## How push works

`nt3 push` reads your `.nt3.yml` to determine which files to upload. It scans the filesystem for all files matching your configured patterns (replacing `{lang}` with actual language codes found on disk), reads each file, and sends it to the Entri import API. Any discovered non-source languages are automatically added as target languages to the project.

The import merges incoming keys with the existing project:

* **New keys** are created
* **Existing keys** are skipped (unless `--overwrite` is set)
* **Keys not in the file** are left untouched

## Overwrite behavior

Without `--overwrite`, pushing a file that contains keys already in Entri leaves those translations unchanged. This is safe for incremental pushes — only new strings are added.

With `--overwrite`, incoming translations replace any existing values. Use this when you want Entri to reflect your local files exactly, for example after a bulk find-and-replace or when seeding from an external source.

You can also set a per-project default in `.nt3.yml` using `update_translations: true`, which has the same effect as always passing `--overwrite`. The CLI flag takes precedence when both are set.

```yaml theme={null}
# .nt3.yml
update_translations: true   # overwrite existing on every push
```

## JSON output

The `--json` flag suppresses all progress output and prints a structured result instead. This is useful for parsing results in scripts or CI pipelines:

```json theme={null}
{
  "success": true,
  "files": [
    {
      "path": "src/locales/en.json",
      "language": "en",
      "format": "json-nested",
      "created": 12,
      "updated": 0,
      "skipped": 45
    }
  ],
  "totals": {
    "created": 12,
    "updated": 0,
    "skipped": 45
  },
  "errors": []
}
```

The process exits with code `1` if any file fails to push, making it easy to fail CI builds on errors.

## Multi-pattern projects

If your `.nt3.yml` defines multiple file patterns, all patterns are pushed for each target language. See the [configuration reference](/developers/cli/configuration) for multi-pattern setup.
