Skip to content

Release v0.13.0

Choose a tag to compare

@AronSoto AronSoto released this 10 Jul 04:56
f1696a1

[0.13.0] — 2026-07-09

verbaly doctor + adoption & trust. Setup diagnostics with the exact fix per finding, the i18next migration guide on the docs site, a coverage push (274→335 tests), and releases now publish from GitHub Actions with npm provenance (OIDC). Ready to publish. No breaking changes; runtime packages untouched in behavior.

Added

  • verbaly doctor (@verbaly/compiler CLI): diagnoses the whole setup in one command — config file found, catalogs dir + every locale file (present, valid JSON, flat key→string), bundler plugin wiring (detectBundler + @verbaly/vite/@verbaly/unplugin in deps), verbaly.d.ts freshness (regenerates and byte-compares), orphan keys (in catalog, not referenced) and translation completeness (reuses check). Every warn/error carries the exact fix command (pillar 3: actionable errors); ok/warn/error levels, exit 1 only on errors. Exported API: doctor(cfg), types DoctorEntry/DoctorResult; also new findConfigFile(root) (config, dedupes the search list init used).
  • Release workflow with npm provenance (repo): .github/workflows/release.yml, workflow_dispatch-only (Aron triggers with the version as input; guard against packages/core/package.json). Runs the full suite and publishes all 7 with pnpm -r publish --provenance via OIDC — packages get registry attestations (Socket supply-chain score lever). Requires one-time Trusted Publisher setup per package on npmjs.com. Local pnpm release stays as fallback (no provenance).
  • codecov.yml (repo): project target 90% (threshold 1%), patch informational — stable badge.

Changed

  • Coverage push (all packages): claude translate provider 31→100% (mocked SDK; loadSdk gained an injectable loader seam — internal, not re-exported), @verbaly/vite 57→98% (fake dev server: watcher events, HMR invalidation, self-write dedupe, unlink), plus branch-edge tests in core (parse/ICU/format/locale/instance), compiler (registry/extract/catalog/check) and adapters (react provider-throw, svelte context hooks via new test fixtures, unplugin id branches). Project: 81.9%→91% branches, 91%→98% lines.
  • Comparison table re-sealed (pillar 5, README + web landing): i18next 26.3.6 core is ~13.5KB gzip (+9.4KB react-i18next) — the old "~25KB" overstated the core; typesafe-i18n is "sporadic maintenance" (one release in 2½ years: 2023-08 → 2026-02), not "unmaintained"; Lingui 6.5 / Paraglide 2.21 / next-intl 4.13 verified active.
  • Drift fixes: root README (tsup→tsdown, test count), verbaly-package-dev skill (per-version changelog files → single CHANGELOG.md).

Notes

  • 335 tests (core 130 · compiler 136 · svelte 22 · vue 12 · react 11 · unplugin 9 · vite 15) — was 274; +50 coverage push, +11 doctor.
  • Bench re-run (ritual): lookup 34.7×, interpolation 16.5×, plural 5.2×, currency 5.5× vs i18next 26 — no regression.
  • Bundle check: tree-shaken createVerbaly runtime 3.26KB min+gzip, full core surface 4.63KB — flat vs 0.12.0 (runtime untouched).
  • publint All good ×7 + arethetypeswrong no problems (core/react/vue, node16 CJS/ESM 🟢); tarballs verified (compiler + core: workspace:*0.13.0, only dist/ + LICENSE + README).
  • New public API — compiler: doctor, DoctorEntry, DoctorResult, findConfigFile. All additive. No new dependencies.
  • E2E verified: verbaly doctor exercised against a broken scratch project (missing plugin, stale types, orphan, unknown key, missing translations → exit 1 with fixes) and a healthy one (all ✓, exit 0).