English spellcheck suggestions with Add-to-dictionary in the native context menu plus a Settings toggle. Typewriter caret-centering mode. OS file associations for .md/.txt and Open File wording. Updater: release URL surfaced, single progress listener, two-byte tarball check, installer wait guard. Search/installer test suites registered; chapter-list layout polish; ignore KDE .directory files.
Markdown:
- File > Open Markdown File... and welcome-screen 'Open .md' import
one or more .md files as new books (named after first H1 or the
filename; originals never modified, collision-safe folder names).
- Book dirs and .md files passed on the command line or via desktop
file associations now open directly; single-instance lock forwards
second launches to the running window.
Updates:
- File > Check for Updates... and welcome-screen 'Update' button:
queries the Gitea releases API, one-click installs a newer release
into ~/.local/share/Folio via a detached swap script that waits for
app exit, keeps the old tree until the swap succeeds, and relaunches.
Download is gzip-verified and restricted to the trusted release host.
No root, no reinstall.
Tests: 19 new assertions in tests/run-update-import-test.mjs (wired
into npm test); full suite green, tsc clean.
- Migrate renderer from md-editor/md-format to a Tiptap-based native editor
(native-doc pipeline: native-doc, markdown-to-native, native-to-markdown,
native-assembly, migration, backup)
- Use pointer-event-based chapter reordering with grab/grabbing cursors to
avoid the Wayland prohibited-drop cursor while preserving reordering
- Add a persistent Home button that closes the open book and returns to the
Folio library/welcome screen
- Update app icons, package deps, theme styles, and tests
The main process now assembles the manuscript from the chapter files and
renders it to a Word document with the docx library, using the same
markdown-it plugin set as the on-screen renderer (highlight, callouts,
wikilinks). ODT is converted from that DOCX with LibreOffice running
headless, keeping the two formats consistent; a clear error is returned
when LibreOffice is missing. The Full Book header's single Export PDF
button becomes an Export menu (PDF/DOCX/ODT) wired to the File menu.
Tests: new run-office-export-test.mjs verifies DOCX/ODT structure,
chapter order and formatting; the e2e scenario exports through the real
IPC chain and checks magic bytes, extensions and the status notices.