Bug Fixes
- ODS currency symbols lost on round trip - Currency formats were bound to reserved XLSX format IDs via substring matching, causing locale-dependent built-in formats to replace the
explicit ODF symbol and layout. All currency formats now receive custom IDs, and the ODF writer recognises locale-free currency tokens like [$€] alongside the traditional [$€-407]
form. - PDF annotation dates displayed as "1/20/70" after save - Annotation dates were stored via 32-bit WriteLong, silently truncating millisecond-epoch timestamps. Switched to string
property storage and corrected the UTC timezone marker from the invalid = to Z per PDF spec. - Spreadsheet scroll broken on macOS in Chromium browsers - A legacy mousewheel listener conflicted with modern wheel listeners on the same element. Removed the macOS-specific feature detection bypass so all platforms use the standard wheel event.
- Page counter showed cursor position instead of visible page - The status bar page counter only updated on click or navigation, not on scroll. The visible-page event is now fired unconditionally during scroll, with correct handling for multi-page view layout and HiDPI displays.
- Chart/diagram insertion failed under subpath deployments - Resolved a path resolution error that prevented inserting charts when the editor was served from a subpath.
- Toolbar icons invisible in some views - Menu icons were drawn from a dead CSS sprite instead of the symbol sheet; fixed to use the inline SVG symbols.
- Plugin registration failed for background-only stores - Plugins configured for background-only operation were not registered or autostarted.
- Save-as-picture used data: URI blocked by CSP - Replaced the data: URI anchor-click download with a blob URL via URL.createObjectURL(), avoiding Content Security Policy restrictions.
- DOCX list numbering elements in wrong schema order - <w:lvl> elements are now emitted in ECMA-376 schema order.
- Backported upstream fixes - Embedded font use in pushbuttons, and five XLS/PDF rendering fixes from upstream.
Security
- TLS certificate verification enabled on Linux - The FileTransporter cURL wrapper on Linux previously disabled peer certificate verification entirely. Verification is now enforced,
with explicit comments discouraging re-introduction of the bypass. - 0-byte ZIP entries no longer dropped - Legitimate empty files (e.g., _xmlsignatures/origin.sigs) were skipped during in-memory ZIP parsing, making them invisible to signature
verification. Directory entries are still excluded.
New Features
- Per-editor desktop accent strip - Each editor type gets a themed colour accent in the desktop header bar.
- PostMessage: add mentions via WOPI - The WOPI integration now supports adding mentions through the PostMessage API.
Infrastructure / Developer Experience
- APT/DNF repository support - A reusable workflow downloads the current repository, merges new DocumentServer packages, prunes to two versions, re-signs indices, and publishes via rsync.
- macOS native build - Full build support for macOS (x2t, V8, ICU, OpenSSL, doctrenderer, PdfFile, IWorkFile, CEF, Qt) including notarization fixes and Wayland clipboard bridging.
- Rocky Linux 9 build - Build toolchain and CI workflow added for Rocky 9, including ARM64.
- E2E editor smoke tests - Playwright-based smoke tests verify typing, formulas, and slide creation across document, spreadsheet, and presentation editors, including a mobile variant.
- Error reporting with GlitchTip - Docker Compose profile added for self-hosted Sentry-compatible error reporting.
- Docker: service UID pinning - Service UIDs are now pinned and volume ownership is repaired on upgrade, preventing permission errors after image updates.
- Docker: supervisord under tini - Supervisord runs under tini to silently reap orphaned processes, eliminating noisy "reaped unknown pid" log messages.
- Build version parsing for pre-release tags - The VERSION file is now parsed the same way as git tags, splitting 9.3.5-rc.1 into version and build number.
- Dependency bumps: webpack-cli 7, copy-webpack-plugin 14, svgo 4, sharp 0.35, terser 5.51, mocha 12, chai 5.3, and others.
Translations
- Danish (da): comprehensive translation covering all editors (~200 commits), including mobile, keyboard shortcuts, equation gallery, chart types, cell styles, and quality review.
- Dutch (nl): added all missing translations for all editors.
- German (de): missing translations added.