How resilience works
ResilientLang has two planes that share only static files.
CONTROL PLANE (can go down) DELIVERY PLANE (must not go down)
dashboard, REST API, API keys, static, immutable, versioned files
extraction, translation engines, published to three places:
translation memory, jobs, publisher ---> 1. your own site (plugin local copy)
2. primary CDN
3. secondary CDN (independent provider)
|
loader.js in the visitor's browser:
manifest -> language file -> DOM, cached locally,
falls back to the source language
Nothing in the visitor's request path calls the control plane.
What happens when something is down#
| Failure | What the visitor sees | What stops working for you |
|---|---|---|
| Our control plane (dashboard, API) is down | Translated pages as normal | Editing, translating and publishing new content until it returns |
| Your own site's copy of the bundles is unreachable | The loader tries the next origin (CDN A, then CDN B) | Nothing |
| All bundle origins are unreachable | The cached manifest and language file from an earlier visit, if the browser has them | Nothing for returning visitors |
| Nothing at all can be loaded | The page in your original language, never a broken page | Translations for first-time visitors |
| A manifest is tampered with or unsigned | The loader refuses it and keeps what it had | Nothing |
Every network call in the loader has a timeout (2.5 seconds per origin by default), a fallback and a test. A failure at any step leaves the page in the source language.
What the promise does not cover#
- The promise is about delivery of already-published translations. Publishing new ones needs the control plane.
- Browsers that cannot do Ed25519 signature checks stay on the untranslated page, because signatures are mandatory. Browser support for Ed25519 in Web Crypto is verify.
- The loader script itself must come from somewhere. On WordPress it ships inside the plugin; on Shopify it can ship as a theme extension asset; with the plain snippet it comes from our CDN, so choose an immutable versioned URL and keep your own copy if you need independence from our CDN.
You keep your translations#
GET /v1/sites/{siteId}/export returns everything in JSON, XLIFF, PO or CSV. A lapsed licence is designed so that published bundles keep serving; the retention period for bundles after a lapse is still an open decision.