Glossaries, rulesets, and brand voices now live at the organization level and attach to engines.
Until now each of these belonged to a single engine: to reuse a glossary across three engines you built it three times, and every copy drifted on its own. They are now organization assets. Build a glossary, a ruleset of linguistic rules, or a brand voice once, then attach it to any engine that needs it. Editing a shared asset updates every engine it is attached to. Creating a new engine no longer starts from an empty configuration: attach the assets you already have and it inherits them.
Take over a translation waiting on external review#
The human review stage can route a translation to an external professional translator, and the job parks until that translator responds. Now an authorized member of your own team can step in: open the pending review in the dashboard and submit the decision, and the job continues immediately instead of waiting on the external round trip. Useful when someone in-house speaks the language and can clear the review faster.
Framework-correct output paths in the CLI#
The CLI now writes each translation to the path its framework actually loads it from, including the layouts where the locale is a suffix rather than its own folder: Rails config/locales (a new yaml-root-key format), and Android, Xcode, and Flutter (res/values-de/, app_de.arb, Android qualifiers like values-pt-rBR/). Before, these files landed where the framework never looks, so the translation existed but the app still ran in the source language.
Each framework has a runnable example repo with config and translations committed: iOS, Android, Flutter, React + Vite, Next.js, Rails, Laravel, Markdown, Markdoc, OpenAPI, and TypeScript modules. Clone one, run lingo link, and push. The same config runs unchanged in the GitHub App.
