Release v0.12.0
[0.12.0] — 2026-07-09
verbaly init + the TypeScript 7 toolchain. One command scaffolds a working setup (config, catalogs, bundler detection) — the zero-config pillar now starts at minute zero. Under the hood the whole monorepo moved to tsdown (rolldown) and TypeScript 7 (native compiler, GA 2026-07-08): typecheck of all 7 packages runs in ~3s. Ready to publish. No breaking changes; published dist/ layout, exports and sizes are identical.
Added
verbaly init(@verbaly/compilerCLI): scaffolds a project in one command. Writesverbaly.config.ts(satisfies VerbalyConfig) when atsconfig.jsonexists, elseverbaly.config.mjs(JSDoc-typed); createslocales/<sourceLocale>.jsonplus one{}catalog per--localesentry; detects the bundler from package.json (vite→ suggests@verbaly/vite; webpack/rollup/rspack/esbuild →@verbaly/unplugin; none → CLI flow) and prints numbered next steps. Never overwrites: an existing config or catalog is reported as "kept (already there)" and left byte-identical. Honors--root,--dir,--source,--locales; source locale deduped from--locales. Exported API:init(options),detectBundler(root), typesInitOptions/InitResult.
Changed
- Build tool: tsup → tsdown (all 7 packages). tsup has been unpublished-stale since Nov 2025 and its dts step injected
baseUrl(removed in TS 7). tsdown (rolldown) builds the same ESM+CJS+dts matrix;fixedExtension: falsekeeps the published filenames (index.js/index.cjs/.d.ts/.d.cts) byte-compatible with everyexportsmap — no consumer-visible change. CLI shebang preserved; the lazy Claude provider now code-splits into its own chunk (ESM dynamic import, same behavior). - TypeScript 7 (repo toolchain):
tscis now the native Go compiler (@typescript/native=typescript@^7.0.2alias) — typecheck of the whole monorepo dropped to ~3s. Thetypescriptpackage name resolves to@typescript/typescript6(bintsc6) — Microsoft's official side-by-side package — because typescript-eslint (peer<6.1.0) and tsdown's dts emit still need the JS compiler API (stable native API lands in TS 7.1). Collapse tracked in PLAN → Deuda técnica. ignoreDeprecations: "6.0"removed fromtsconfig.base.json— it only existed to silence thebaseUrlthat tsup's dts injected; tsdown doesn't. Debt closed.- Patch bumps: vitest 4.1.10, typescript-eslint 8.63.0, i18next 26.3.5 (bench devDep). New root devDeps:
tsdown,unrun(tsdown's TS-config loader).
Notes
- 274 tests (core 105 · compiler 112 · svelte 20 · vue 12 · react 10 · unplugin 8 · vite 7) — was 266; +8 for
init. - Bench re-run (ritual, on the rolldown-built dist): lookup 33.5×, interpolation 9.7×, plural 4.0×, currency 5.8× vs i18next 26 — no regression from the bundler swap.
- Bundle check: tree-shaken
createVerbalyruntime 3.24KB min+gzip, full core surface 4.61KB — both at or under the 0.11.0 numbers. - publint All good + arethetypeswrong no problems (node16 CJS/ESM 🟢) on all packages; tarballs verified (
workspace:*→0.12.0, onlydist/+LICENSE+ README). - New public API — compiler:
init,detectBundler,InitOptions,InitResult. All additive. Runtime packages untouched in behavior. - CI unchanged (script-driven); lockfile carries the TS7 native binaries per platform.