Project
Continuity
Maintainer count, release cadence, versioning, and what happens if this stalls.
A compiler that can fail your CI is a higher-trust dependency than a runtime that reads JSON. This page says in advance how it is run, and changes in the same commit as anything it describes.
What is published
Section titled “What is published”Version 0.1.2 is on npm and the repository is public.
| Topic | Today |
|---|---|
| Maintainers | One person holds commit and publish rights. Whether anyone is paid is not decided. |
| Cadence | None promised, for patches or minors. |
| Succession | No successor named. If that holds when the maintainer stops, the last release is marked as such on npm and the repository is archived, not left to look alive. |
| Where to look | Open issues and their age, the last release date, and distinct committers in the last year, all public on the repository. Read them before you depend on this, and again a year in. |
What keeps working if the project stops
Section titled “What keeps working if the project stops”Everything but the checks: a missing translation is again something a person must notice.
| You keep | Why |
|---|---|
| Catalogs | Plain JSON in ICU MessageFormat, or the i18next form you already had. Nothing in them refers to loclizr. An i18next catalog only converted in memory was never touched. |
| Converted catalogs | ICU loads into i18next through i18next-icu, into FormatJS as is, and into any TMS that speaks ICU. |
| The generated tree | Plain ESM with hand-printed .d.ts, importing only the locale store and the plural and Intl helpers from loclizr. Delete the self-ignoring .gitignore in outDir, commit the tree, pin the last version, and the app builds and typechecks with no compiler, as long as your runtime has Intl. |
| The context record | JSON with a schema field and no tool version. A translator or a script can keep reading it. |
Versions and upgrades
Section titled “Versions and upgrades”Three surfaces carry a version, and each breaks visibly:
| Surface | Versioned by | How a break shows |
|---|---|---|
| The CLI contract and the rule codes | The package version. A rule’s code never changes. | A severity entry naming a rule the tool no longer knows is LZ1001, not a silent no-op. |
The four $ helpers the generated code imports |
The trailing digit, abi=1 in every generated header. A renamed helper keeps its old name exported for one minor. |
After that minor, a stale tree fails at link time on the missing $...1 export, in Vite dev, Rollup, esbuild and Node ESM alike. |
| The record | Its schema field, 1 today. |
An older schema differs from what the tool would write, so check reports LZ5003 and the next build rewrites it. Every app’s check fails until that app rebuilds and commits. |
A 0.x minor may add rules, or change the generated bytes, the abi digit or a rule’s default
severity. It may also break an invariant, with a changelog entry for it. At 1.0 the
specification’s invariants become the semver contract.
To upgrade a fleet, repeat per app:
-
Bump
Section titled “Bump loclizr”loclizr -
Run
Section titled “Run loclizr build”loclizr buildIt regenerates the tree and the record.
-
Commit the record
Section titled “Commit the record”And the tree, if you commit it. Until this commit, the app’s CI fails
LZ5003: that is the gate working. -
Run
Section titled “Run loclizr check”loclizr checkIt passes once the committed record matches.
The changelog ships in the package. Security has its own page.
Licence and money
Section titled “Licence and money”The compiler, the runtime and the catalog format are MIT and stay MIT. Closed source has no precedent in this category, and a licence change would delete the one advantage that holds here, distribution.
A paid layer, if one ever exists, sits at seats, governance, or a hosted place for non-engineers to read the context record. Never at the install, the CLI or the console: no build-time notice asking for money.