Wire format unchanged — v0.5.2 interoperates with 0.5.0 and 0.5.1 both ways. (0.4.x remains incompatible; see the v0.5.0 notes.) One floor moves: builds now target ES2022 — Chrome/Edge 89+, Firefox 89+, Safari 15+, all 2021.
Twelve languages
- English, Spanish, Brazilian Portuguese, French, German, Italian, Russian, Hindi, Simplified Chinese, Japanese, Korean, and Arabic — with full right-to-left layout. Asked for in #14.
- Every language is its own page tree (
/es/send/,/ar/receive/, …): translated titles, social cards, and hreflang alternates, so a Spanish search finds a Spanish page. The footer switcher navigates; nothing redirects on browser language, so a shared link always shows the page that was shared. The home page offers your language once, dismissibly. - Installing from a tree installs that language — per-locale PWA manifests, every tree precached, offline in all twelve.
- The standalone files embed all twelve catalogs and pick the reader's language when opened; the switcher swaps in place, no reload — localStorage is unreliable under
file://, and a reload that forgot the choice would put the old language back. - A localized sender shares its own language's receiver: the QR on
/es/send/hands the other device/es/receive/.
Unreviewed translations say so
- Every non-English catalog is machine-drafted and carries one quiet footer line in that language saying so, linked to the issue tracker. A native review is a PR that fixes the wording and flips that language's
reviewedflag — the note disappears on the next build. Reviews are the most useful small contribution this project can take.
Under the hood
- Protocol errors and wire-version verdicts travel as codes and localize at display time. The English wording stays the reference, pinned by test, so every client in a given language words the same failure the same way.
- A language missing a key, or the page copy drifting from the catalog, fails the build — the rule the
%TOKEN%s already lived under. Catalogs are code-split per language; the receive chunk stays under its tripwire. - Node is pinned:
.nvmrcis the single source, CI reads it, andengine-strictmakes the wrong Node fail an install instead of warning past it.