Changelog
Stay updated with the latest additions and improvements we've made to Localess Version 4.
v4.1.0 - Visual Editor Upgrades
New Features
Edit blocks from the page preview When you select a block in the Visual Editor preview, a small toolbar now appears on it. You can move the block up or down, duplicate it or delete it (delete asks you to click twice) without going back to the form. The form uses the same rules and keeps the changes as unsaved edits until you save.
Flexible preview URLs Environment URLs now accept placeholders:
{fullSlug},{slug},{parentSlug},{documentId},{locale}and{locale/}. The locale can even go in the host, as inhttps://{locale}.site.com/{slug}. Each URL field shows an example of the page it will open, and unknown placeholders are rejected. URLs without placeholders work as before.Clearer preview connection The preview tells you what's going on instead of failing silently:
If the page doesn't connect within a few seconds, a hint lists what to check.
The status tooltip shows which SDK version connected.
A warning appears when the page loads content from a different Localess deployment.
A notice appears when the page shows a different document than the one you're editing, with a button to go back.
Reloads and in-page navigation reconnect automatically.
Raw translation export A new endpoint,
GET /api/v1/spaces/:spaceId/translations/:locale/values, returns only the values actually stored for a locale, without fallback filling. You can pull a file, edit it and push it back without the fallback language's text being saved as translations. The CLI uses it forlocaless translation pull --raw.Choose whether to overwrite when translating a locale Translating a whole locale can now replace existing values instead of only filling the empty ones.
Improvements
Sync script for multi-document pages and debugging
Editor events (
save,publish,unpublish,input,change) now includedocumentId, so a page that renders several documents (for example a shared header plus the page) updates only the matching one.on()andonChange()now return an unsubscribe function, and there is a newoff().Console logs and snackbar messages now only show when debug mode is on (
data-debugon the script tag).
Shareable space links The URL now decides which space is open. A link to another space opens that space instead of whatever was selected last. Links to deleted or unknown spaces redirect cleanly with a warning.
More reliable live data The schema and document listeners now follow the selected space, retry with exponential backoff after an error and show a notification when something goes wrong.
Correct translatable flags Reference, References, Schema and Schemas fields can no longer be marked translatable. Their value is the same in every locale, and nested blocks translate their own fields. Schemas pushed through the API have the flag removed, and old flags already stored are ignored. Fields that aren't translatable are read-only outside the default locale.
Safer schema push Schema push (
POST /api/v1/spaces/:spaceId/schemas) rejects Schema/Schemas fields that have no allowed schemas, because the editor couldn't add any block to them. The schema editor now requires this list too. Imports still accept such fields.
⚠️ Breaking Changes
Translation push:
delete-missingwas split in two Thetypefield ofPOST /api/v1/spaces/:spaceId/translations/:localeno longer acceptsdelete-missing. Use one of:delete-missing-keydeletes the whole translation, in every locale, for each ID not invalues. Run it with a complete file, normally the source locale.delete-missing-valueremoves only the pushed locale's value. Other locales keep theirs.
Translation push response is simpler The
countsobject is gone, andidsis now a flatstring[]with only the IDs that the request'stypewrote (or would write, on a dry run).update-existingskips values that didn't change.schemais no longer a reserved field name in content A block's schema is now stored only in_schema, and the API no longer returns the legacyschemakey. Blocks saved under the old key are still read, and they move to_schemathe next time they're saved. If your frontend readsblock.schema, switch it toblock._schema.
Please upgrade
@localess/cliand your Localess SDKs together with this release.
Bug fixes
CDN cache redirects now URL-encode the path and query values they copy into the redirect URL, so a crafted value (for example
en&token=x) can no longer add parameters to the redirect.Unsaved changes in the document editor are no longer lost or overwritten during quick edits or while the preview is connected.
Cloud Build now enables all the Firebase APIs it needs (Hosting, Firestore, Rules, Identity Toolkit) and no longer needs the Billing API.
The Docker image now uses Java 21 for the Firebase emulators.
Updated Firebase and AngularFire.
v4.0.0 - Refreshed interface
New Features
Automated setup and deployment Provision and run your own Localess from the command line.
npm run localess:setupcreates the Firebase infrastructure,localess:deploybuilds and ships it, andlocaless:check --fixreports and repairs anything a project is missing. The in-app setup wizard is gone - the first admin is created by the CLI instead.AI-assisted translations Translate a value into every locale in one step. Each locale defines whether it can be translated from or into, rich text and Markdown keep their formatting through the translation, and you choose whether existing translations are overwritten or left alone.
Spaces from templates Create a space from a ready-made structure instead of an empty shell. The Marketing Site template comes with schemas for flexible page assembly, so a new space is usable immediately.
Improvements
Refreshed interface Navigation, dialogs and tables have been rebuilt on the new Spartan UI components. Lists share one filter toolbar with search and multi-select filters, tables keep their sorting and paging consistent everywhere, and light and dark themes are applied across the whole app.
Smaller, faster assets Image delivery was reworked: JPEGs are encoded with mozjpeg for smaller files at the same quality, transformations never upscale beyond the original, new fit modes control cropping, and animated images are handled properly. A new /original route serves the untouched file, and JSON API responses are compressed.
Safer API tokens Tokens can be regenerated without being deleted and recreated, and the token list now shows what each token is actually allowed to do, so an over-privileged token is visible at a glance.
Faster, leaner API Referenced documents are returned without storage-only fields, caching and concurrent request handling were reworked to cut duplicate reads, and heavy modules load on demand so cold starts are noticeably shorter.
Bug fixes
A lot of them