Docs

What's new in 0.10.0.

The Console look, formality per language, repeats that follow the first approval, locked editable prompts, imports that never stall the install, and a round of security and privacy work.

Release date: October 8, 2026. Previous release: 0.9.5, September 15, 2026. Localization OS 0.10.0 is the first official release since 0.9.5. It brings a new look, faster ways to find and fix work, finer control over how machine translation speaks to your audience, much stronger sign-in and access controls, and a long list of fidelity, reliability and security fixes. Every new feature is available on the web UI, the API, the CLI and the MCP server.

Highlights#

  • The Console look. One calm design in light and dark, with a theme choice that follows you between browsers.
  • Formality per language. Tell machine translation to use Sie or du, vous or tu, polite or honorific, per customer, project or single document, for each target language.
  • Repeated segments follow the first approval. Approve a sentence once and its open repeats in the same document take the same translation.
  • Locked, editable prompts. Workflow prompts are read-only until you unlock them, saved deliberately with Apply, and restorable to the default.
  • Global search. One search box across projects, customers, documents, translation memory, glossaries, workflows and connections.
  • Large imports without stalls. Big TMX and glossary files load in short chunks, so everyone else keeps working.
  • Stronger sign-in and access. Two-step sign-in with an authenticator app and recovery codes, a password policy, real account lockout, API keys with optional expiry, and verified single sign-on account linking.
  • AI opt-out per project and per customer, and better file fidelity for Word documents, with translated files that declare their language.

Look and accessibility#

  • Console is the only look. Neutral grays, one blue accent for actions, links and focus, hairline borders, and Public Sans for the interface with a monospace face for data. List pages share one pattern: a header, a search row, and a clean table with status shown as a dot and a word, and row actions in a "..." menu. The earlier per-user skins are retired.
  • Appearance: Light, Dark, or Match my computer, chosen in the account menu or Account settings and stored with your account, so it applies on every browser before the page first paints. The Get started guide moved into the account menu too, and can be switched back on from Account settings after you dismiss it.
  • Broad accessibility work toward WCAG 2.2 AA, in both themes: contrast and 24 px targets, reflow at 320 px, landmarks and labels, an error summary on forms, language of parts on source and target text, keyboard alternatives to dragging, screen reader announcements in the editor and run view, and a session timeout warning. Automated browser checks run the axe rules on the main pages and fail if anything gets worse. An accessibility contact can be set and is shown in Help.
  • In-app confirmation dialogs. Confirmations such as "You will lose your changes" open an accessible dialog with focus on the safe choice, instead of the browser's own pop-up. A few page-specific confirmations still use the browser's dialog.
  • Busy indicators on every action that does work, with an elapsed counter on slow AI actions; themed "not found" pages; upload errors shown on the form; and export refusals explained in a dialog with next steps.
  • Editable page layouts. Arrange the cards on hub pages, one to three per row, saved per person. The edit mode works from the keyboard.
  • Ctrl+K or Cmd+K opens a navigation palette from anywhere outside a text field.
  • Translated files are accessible too. Exports declare the target language (HTML, DOCX, PDF, XLSX, XLIFF and PO), image alt text is translated as its own segment, and a source image with no alt text gets a gentle warning in the editor.

Translation and review#

  • MT formality, granular and language-aware. Set a register per target language as a customer default, on a project, or as an override on one document; the most specific wins, and auto at any level means "no instruction here". Every language takes formal, informal or auto, and German, French, Spanish, Italian, Dutch, Portuguese, Russian, Polish, Turkish, Swedish, Hindi, Japanese and Korean also take their own registers. The register reaches every translation path as one sentence in the prompt, is recorded on the run, and is shown to the quality checks so a deliberate choice is never reported as an error. Admins and managers set customer defaults; linguists can also set project and document values. Nothing changes until someone sets a value. See Documents.
  • Repeat propagation. Approving a segment applies its target to the other open repeats of the same source in the same document and language. Each copy is checked against its own source for broken tags and placeholders, shows a Propagated badge, and is never approved automatically. Approved, person-edited and TM-locked copies are never touched. You can unlink a segment from its repeats, and undo the last propagation.
  • Review holds. While a run is paused on a human review step, the editor shows the pending machine translation read-only under "Waiting for review on run N", and other writes to that document and language wait until the run resumes.
  • TM changed since fill. A segment filled and locked from translation memory shows a badge when that memory entry is edited later. Running the TM match step again refreshes unreviewed segments from the edited entry.
  • Failures are failures. A translation run where some segments failed, for example during an engine outage, now ends failed with the count and the first error, keeps what did translate, and holds that language's export until the failed segments are retried. Image jobs follow the same rule.
  • Highlight differences on the run view: a word-level comparison of any two steps' output for each segment.
  • AI opt-out per project and per customer. A manager can switch machine translation off for content that must never reach a model; every engine call checks it.
  • Document status is derived from the segments of every language: new, in translation, in review, or done.
  • Duplicate customer names are refused on create and rename, and names that already collide show their id in every picker.
  • Better file fidelity. Word documents keep pictures, charts, fields and links, and now translate headers, footers, footnotes, comments, text boxes, tracked insertions, nested tables and content controls. Legacy-encoded text uploads, for example Windows-1252, are converted automatically and export as UTF-8.
  • Translation memory and terminology details. Fuzzy scores of 99.5 and above no longer round up to an exact match; an empty glossary exports as a valid TBX file; re-importing a glossary keeps Do-Not-Translate flags when the cell is blank; and the glossary page is reorganized with Terms first and a clear path from draft to approved.
  • Learned memory needs real agreement. A learned term needs the same correction from at least two people across two segments, and a style rule learned from LQA needs findings from at least two documents, before it is used.

Workflows and prompts#

  • Workflows are written once, for every language. The project a workflow runs on decides the source and target languages. Per-language variants remain as an advanced option, for the rare language that needs a different prompt.
  • A tabbed workflow page: Steps, System prompt, Add a step, and the prompt-authoring assistant, with the open tab kept in the address.
  • Locked, editable prompts. Prompt text is read-only until you unlock that section. Apply saves it and locks it again, Restore default prompt goes back to the built-in text after asking, an unapplied edit is discarded after 30 minutes, and leaving with unapplied changes asks first. Managers can now change step prompts as well as admins and linguists. Every change is audited.
  • See the built-in system prompts. A read-only catalogue shows the exact instructions the pipeline sends around every step. With the System prompt overrides feature on, an admin can edit the two editable parts for the whole organization, and an admin or manager can give one workflow its own text; every save is a new version you can restore.
  • Starting shapes. Correction-loop, Triage and Gated starting shapes draft working workflows.
  • Runs stay in their lane. A workflow that belongs to a different customer than the document is refused before any run starts; a second run of a different workflow on the same document and language is refused while the first is still going; re-running a batch refuses an archived workflow or project.

Scale and speed#

  • Chunked imports. TMX imports write in chunks of 2,500 units, and glossary CSV and TBX imports in similar short transactions. The longest wait another writer sees during a 100,000-unit TMX import dropped from about 4.5 seconds to about 0.2 seconds. A file that fits one chunk is still all-or-nothing; a bigger one that fails part way keeps what it stored, and importing the same file again finishes it with no duplicates.
  • Faster audit. Audit log writes are about 1.8 times faster, with the chain, its tamper evidence and its durability unchanged, and verifying the chain and searching the log are faster too.
  • Parallel jobs per engine. A local engine can run several translate jobs at once, up to its own limit, without slowing other engines.
  • Local models warm up when a run starts, so a later step does not wait for its model to load.
  • Global search answers from the top bar with live results in groups, each with a count, and opens a full results page. It never reads inside documents or connection credentials, and it never lists or counts what you cannot open.
  • Translation memory exports stream, so a large memory exports without holding it all in memory.

Engines and AI safety#

  • Refusals are quarantined. When Claude, an OpenAI model or a self-hosted engine signals a refusal or a content filter, the output is held for review as a suspected refusal, never stored as a translation, and a quality judge that receives one reports itself unavailable instead of passing it. Gemini refusals are not detected this way yet.
  • Output guard. After machine translation, echoes of a short source and runaway answers are held for review, and dropped or changed numbers are flagged.
  • Untrusted text is fenced. Segment text and recalled memory reach the model inside clearly marked content blocks, with an instruction that they are content or reference data, never instructions.
  • Outages fail clearly. A local engine that restarts mid-run is retried for about 78 seconds; a cut stream is a failed attempt, never a finished translation. A rate-limited Claude call now waits as long as Anthropic asks, up to a minute per retry.
  • Repeatable local output. Self-hosted engines send an explicit temperature and seed, and judges run at temperature 0.
  • Traditional Chinese. Google, Amazon and DeepL now return Traditional Chinese for zh-TW and zh-HK targets.
  • Exact cost. Each job stores the exact cost booked while it ran, and reports use it. Self-hosted engines on your own network are priced at zero, and the pricing table was refreshed against current price pages.
  • Keys stay with their server. Moving an engine to another server clears its saved key unless you enter a new one, and an answer that echoes an engine's own key fails the call.

Security and privacy#

This release closes the findings of two internal security reviews (September and October 2026) and an internal penetration test. These are engineering controls; this release does not claim any third-party certification.

  • Sign-in. Two-step sign-in with an authenticator app (TOTP) and recovery codes for password accounts, which admins can require for admins or for everyone; a password policy for local accounts (length, character classes, a common-password block, history, optional maximum age); account lockout after repeated failures, with admin unlock and an email to the user; a session timeout warning, an absolute session limit (24 hours by default), and sign-out everywhere on logout or password change.
  • API keys are per user, with optional expiry and an organization-wide maximum age, and per-key rate limits on spend and read routes.
  • Single sign-on. OIDC accounts are linked to the provider's subject id after a verified email; SCIM deprovisioning and re-enabling are handled correctly. LDAP validates the directory server's certificate and refuses cleartext binds.
  • Access control. Organization, customer and project boundaries are checked first on every web, API, CLI and MCP route, so a hidden item answers exactly like a missing one.
  • Audit log. Audit writes fail closed, the hash chain detects deleted or edited rows, writes are about 1.8 times faster, and verification is faster too. The signing key lives outside the database and can be rotated on the host; history signed by the old key still verifies.
  • Agent transcripts store fingerprints only. Customer text and model reasoning in an Advanced Workflows transcript are kept as a SHA-256 hash and a length, never as readable text.
  • Privacy. AI opt-out, PII redaction on more AI paths, and erasure that reaches learned memories, TM rows, exports and evaluation snapshots. Erasing a person anonymizes them in every field that attributes work; hash-chained audit entries written before the erasure keep what they recorded, visible to administrators only, because rewriting them would break the chain. See Security.
  • Browser and network. An enforced script Content Security Policy with per-request nonces, no inline event handlers, and fixes for stored cross-site scripting findings. Every outbound client resolves a host once, checks every address and connects only to the checked one.
  • Abuse resistance. Request body caps, per-document segment, character and row caps, decompression and pixel limits, and linear-time text checks, so a single hostile input cannot stall the server.
  • Supply chain. Hash-pinned dependency locks, base images pinned by digest, no pip in the runtime image, and a CycloneDX SBOM of the locked Python packages. Every change passes a pre-merge gate that scans every locked dependency and the native libraries bundled inside packages, and release images for installs Patois Labs hosts are scanned before they serve traffic.

API, CLI and MCP#

  • The MCP server now has 84 tools, including manage_formality, search_workspace, and system prompt actions on edit_workflow; approve_segment reports and controls repeat propagation.
  • New CLI commands include formality registers, show, set and clear; search; account set-theme; and doc segment-propagation. Each also works over --remote. See CLI.
  • New API routes include /api/formality, /api/search, /api/account/theme and /api/segments/{id}/propagation.

Changed or removed#

  • Skins removed. The earlier skins are replaced by one look with Light, Dark or Match my computer per account. Removed: the skin picker, POST /api/account/skin, the skin field of GET /api/account, and account set-skin. New: ui_theme on GET /api/account, POST /api/account/theme, and account set-theme.
  • Back-office console and super-admin account removed. Organization lifecycle is done from the command line on the host with the operator key.
  • Shared connector token removed. Integrations use per-user API keys.
  • /health is minimal. It returns only the status and the major.minor version; use the authenticated release endpoint or the CLI for the exact release.
  • Failures are reported as failures, and hidden and missing items look the same: both answer 404.
  • Workflows without a group carry no language pair. An inert pair stored on such workflows is cleared once during the upgrade.

Upgrade notes#

Follow the upgrade steps in the deployment guide: stop writers, take and verify a full checkpoint with the old image, build from the release tag, then migrate. Downgrade is by restoring the checkpoint; never run an old image against the new schema. Twenty new database migrations apply to a single head; one is data-only and not reversible (it clears the inert language pair above).

First boot after the upgrade

Everyone signs in again once.

A server install with no accounts asks for a one-time setup token on its setup page. It is printed in the startup log and stored in the data folder, or you can set one yourself. There are no default credentials on a server install.

The session secret must be at least 16 characters; an empty or short secret stops startup.

A legacy install with the old encrypt_db=1 setting and no SQLCipher refuses to start. Turn the setting off to continue in plaintext, or convert to SQLCipher as the secrets guide describes. Check this before you upgrade.

LDAP: the server certificate must validate. Use ldaps:// or StartTLS with a DNS name, and set a CA certificate for an internal CA.

OIDC: an existing account links to the provider on its next sign-in with a verified email. A provider that never sends a verified-email claim is refused until an admin trusts its email addresses on the Security page; use that only with a single-tenant provider.

Python 3.13 is the supported version for host installs. Dependency locks are hash-pinned; install with --require-hashes. The container runs as a non-root user with read-only application code.

LOC_TMS_JOB_WORKERS (default 2) is the global cap on background jobs; a per-engine parallel-job limit only lowers it.

Prompt fields start locked: press Unlock, edit, then Apply.

Known limitations#

  • Times are shown in UTC. Per-user time zones are planned.
  • Running several organizations on one install (multi-org) stays off and is not supported for production use in this release.
  • An OIDC account link cannot yet be removed by an admin from the app.
  • A few page-specific confirmations still use the browser's own dialog.
  • Imports larger than 2,500 rows commit in chunks: if one fails part way, the rows already written stay, and running the same import again completes it without duplicates. Concept-preserving glossary JSON import still runs as one transaction.
  • Gemini refusals are not yet detected by the refusal quarantine.
  • The container image bundles Tailscale binaries that carry upstream advisories; they are updated when a fixed upstream release ships. The Tailscale sidecar runs only when you configure a tailnet.