---
source: https://cli.eloqnt.dev/docs/changelog/cli
docs_index: https://cli.eloqnt.dev/llms.txt
---

# @eloqnt/cli changelog

## 0.6.14

- `studio.eloqnt.dev` was renamed to `engine.eloqnt.dev`, with CLI docs remaining at `cli.eloqnt.dev`.

## 0.6.12

- Improve `eloqnt crowdin` errors
- Support `dest` in `crowdin.yml`.

## 0.6.10

- Pin `@swc/core` minor range to avoid incompatibility with latest `@swc/core` version (a full upgrade will ship later).

## 0.6.9

- Added the `lint` config: set a rule's severity or turn it off via `lint.rules` (`'error'`, `'warn'`, `'off'`), and scope settings to matching message keys via `lint.overrides`.

## 0.6.8

- Support `languages_mapping` and `content_segmentation` in `crowdin.yml`.
- A `translate` run now runs in local batches and reports how far along it is while it works.

## 0.6.7

- Add a `styleguides` config option that sets the directory styleguides are loaded from, e.g. to share one set across multiple projects.

## 0.6.6

- `messages.format` can now reference a codec from an installed package by its name (e.g. `'@eloqnt/format-apple-xcstrings'`).
- `defineCodec` now accepts a shared-file variant for formats that keep every locale in one file.
- `messages.path` entries can now split into `{source, targets}` for when source and target files need a different path structure.

## 0.6.5

- `eloqnt lint` now links the docs for the rules it reports (also for `--json` and GitHub Actions annotations)

## 0.6.2

- Add a `missing-other-case` lint rule for a `plural`, `selectordinal`, or `select` statement without an `other` case, which throws where the message is formatted. Messages like these were previously skipped by every rule, so their ICU arguments now get checked too.
- A translation no longer has to spell out every plural category its locale can select on ([ref](https://x.com/jamannnnnn/status/2082746902219559208)). The rule is replaced by two, since its halves answer to different authorities: `unreachable-plural-case` for a case the target locale never selects, and `inconsistent-exact-plurals` for `=0`-style cases that don't match the source.

## 0.6.0

- Add an `inconsistent-plurals` lint rule that reports plural cases which don't match the target locale's CLDR categories.
- Locales that aren't recognised now fail loudly instead of being silently treated as the default locale. A new `invalid-locale` lint rule reports them, and `eloqnt translate` stops before spending inference on one.
- `eloqnt translate` now reads CLDR data so `plural` and `selectordinal` statements are guaranteed to be adjusted for target locales.

## 0.5.4

- Add `eloqnt crowdin` commands for syncing messages with a Crowdin project via `crowdin.yml`: `upload sources`, `upload translations`, and `download translations`.

## 0.5.3

- Link each command's docs page from `--help` output, with command descriptions kept to one line.

## 0.5.1

- Print the installed CLI version with `eloqnt --version` (or `-v`).

## 0.5.0

- Inside GitHub Actions, `eloqnt lint` now surfaces issues as file annotations on the pull request, including the call site's line for `undefined-key`.
- `eloqnt lint` now distinguishes errors from warnings. Missing translations are warnings and no longer fail the run, so lint can gate CI without requiring translations on every commit. Pass `--strict` to treat warnings as errors.
- `eloqnt review` now notes in the diff when a fix was also synced to your source code (for `useExtracted`)

## 0.4.2

- Normalize the spacing above the `eloqnt translate` hint in `eloqnt lint` output to a single blank line, matching `eloqnt review`.

## 0.4.1

- The source review now runs as `eloqnt review` (the explicit `eloqnt review source` form keeps working).

## 0.4.0

- Added `eloqnt review source`: Reviews source strings for typos and grammatical errors and fixes them in place.

## 0.3.2

- Note in `eloqnt lint` when source code analysis is skipped due to an absent `srcPath`, and reword the equivalent note in `eloqnt translate`.
- `eloqnt whoami` now notes that a trial includes 1/4 of the regular monthly usage.

## 0.3.1

- Support path templates for `messages.path` to support non-next-intl consumers (e.g. i18next)

## 0.3.0

- Drop internal exports from `@eloqnt/sdk`'s public entry. The main entry now surfaces only what's intended for external use (`lint`, `defineConfig`, `defineCodec`, `translate`, and their return types); everything else moved to `@eloqnt/sdk/_internal` for workspace-only consumption.
- `eloqnt translate` now confirms whether your styleguides were picked up before the engine runs.
- Drop the engine API's backward-compat fields for pre-split CLIs. The older clients weren't actually picking them up in practice, so the fallback wasn't doing anything anyway.
- Merge `@eloqnt/inference` into `@eloqnt/sdk`.
- Add support for messages extracted by experimental `useExtracted` in `next-intl@<4.13`.

## 0.2.0

- BYOM projects pinning `@ai-sdk/*` provider packages should update them to versions that target AI SDK 7. Also drop `providerOptions` from `defineConfig`.
- Upgrade to AI SDK 7.

## 0.1.1

- Identifies itself with a custom user agent so the studio's "Logged-in CLIs" list can show your device name and OS. CLI sessions logged in before this version still appear in the list — as "Unknown device" — and you can run `eloqnt logout && eloqnt login` to refresh the entry with the new metadata.

## 0.1.0

- Split plans into "Hosted model" and "Bring your own model"

## 0.0.9

- Run static post-translation checks (ICU placeholder parity) on every received translation, with up to two automatic re-translations on failure.

## 0.0.8

- Consume AST context for `.json` formats, output file reference for `undefined-key` rule

## 0.0.7

- `eloqnt whoami` now shows included usage and when it resets.

## 0.0.4

- Refine CLI UX and align account commands with the shared error contract.
- Handle messages split across several `messages.path` folders correctly, including a new `duplicate-id` lint rule for ids repeated across folders.

## 0.0.3

- The `inconsistent-args` lint rule now catches rich tags (`<b>…</b>`) a translation drops or invents, not just `{argument}` placeholders. Placeholders are compared by their literal token, so a `<name>` tag never stands in for a `{name}` argument, and the reporter underlines the stray tag in the value.

## 0.0.2

- Make CLI errors friendlier.

## 0.0.1

- Exercise the automated release pipeline. No functional changes since the initial 0.0.0 publish.

---

For an index of every eloqnt/cli documentation page, see [https://cli.eloqnt.dev/llms.txt](https://cli.eloqnt.dev/llms.txt).
