0.70.0
A text never stops your build
A missing or broken translation, or a key no catalog has, is now listed at the end of every build, and the build finishes: verbaly check in your CI is what stops a release. To test the way in, we moved Memos, an open source app with 46 languages, from react-i18next to Verbaly and fixed everything it ran into. Breaking: the build no longer stops on its own, and a key written in backticks that no catalog has now fails check.
- A text never stops your build. Every build lists what is missing or broken, broken translations first, and finishes.
npx verbaly checkis the gate, in your CI. Breaking: to keep a build that fails, setfailOnMissing: truein the plugin options. - Tested on a real migration. We moved Memos (46 languages, 879 keys) from react-i18next to Verbaly: 20 files changed by hand, the same build and the same tests passing, and about 11 KB less for every visitor.
initnow keeps the catalogs you already have, andmigrateleaves text like{timestamp}as text and never converts a language twice. - Faster builds with Vite. The Vite plugin was slowing large builds down: Memos took 37 seconds to build, and now takes 17 (13 without Verbaly).
- No provider needed in the browser. In a single-page app and in component tests,
useT()works without<VerbalyProvider>, the Vue plugin orprovideVerbaly, as it does in react-i18next. - Fewer type errors when you migrate. A key kept in a variable typed as a set of keys passes with its params, and the generated types no longer trip Biome or Prettier.
- Small things:
doctorsays "setup works, with 1 warning to read" instead of "healthy" after a warning, and the MCP server rereads a CommonJS config. Breaking: a key written in backticks, or as{'…'}in JSX, is checked like a quoted one.
- A missing, broken or unknown key is listed by every build, which finishes; failOnMissing: true stops it instead
- A key written in backticks, as {'key'} in JSX or through a renamed t is checked like a quoted one
- A variable typed as a union of keys passes, with its params left open
- init keeps the catalogs a project already has and points the config at them
- migrate doubles the braces i18next showed as text and remembers which languages it converted
- useT() and useLocale() read the app instance when no provider is above them, in the browser
- The generated verbaly.d.ts is left alone by Biome and Prettier
- doctor counts the warnings instead of calling the setup healthy
- The Vite plugin slowed large builds: its hooks now filter the modules they receive
- A CommonJS verbaly.config.js stayed cached in long-lived processes like the MCP server