Changelog

All notable changes to Epilogue are documented here.


[v 1.1.3+13] — 2026-05-07

Added

  • Drag-and-drop chapter reordering: You can now grab any heading in the outline sidebar and drag it up or down to reorder entire chapters. The full text of the chapter moves with it, and your document is updated instantly.
  • Starter templates for new books: New books now open with ready-to-use content — a two-chapter structure in your writing file and a full planning scaffold (premise, characters, chapter outline, themes, and notes) in your planning file, so you can start writing right away.
  • Classic books sample library: The in-app sample library now includes 50 public domain classics — Austen, Dickens, Dostoevsky, Hugo, Joyce, Kafka, Tolstoy, Twain, and many more giving you real-world, long-form view of how published book experience will feel like. Will open this up for authors shortly.

Changed

  • “Vault” is now called “Library”: The term “vault” has been replaced with “library” everywhere in the app for clearer, friendlier language.

Bug Fixes

  • Web: book list blank on first visit: Opening the web app for the first time would show an empty book list until you refreshed the page. Fixed a browser database issue that caused the loading step to hang silently.
  • macOS: “Operation not permitted” error on launch: On macOS, the app could fail to open your library folder after relaunch with a permissions error. Fixed a timing issue in how macOS security permissions are established at startup so your library opens reliably every time.

[v 1.1.2+12] — 2026-04-30

Added

  • Multi-book vault: A vault can now hold multiple books as top-level subfolders (e.g. MyVault/MyBook/). The file indexer and sync engine both understand the new layout, and the file watcher handles book-scoped events on macOS.
  • Public share links: Shared review links are now public by default — no password required for the reviewer. For E2EE documents the content is decrypted client-side before sending, so the viewer renders without a password step. Password protection remains available as an opt-in toggle; non-E2EE docs get a fresh document key generated on the fly when password protection is enabled.
  • Automatic vault linking: Removed the manual VaultLinkSheet. Devices now link automatically via PowerSync metadata — scanning the QR code is all that’s needed.

Bug Fixes

  • iOS sync after QR link: Scanning the Mac’s QR code on iOS was showing “Name your first book” instead of the user’s existing books. Fixed three root causes: the single-vault auto-link now fires correctly on iOS so the device adopts the server’s vault UUID; entities created locally before linking are migrated to the correct UUID; and the book list now re-scans live after each sync write without requiring an app restart.
  • Cross-device sync with multiple vault UUIDs: updateVaultIndexedTime was using INSERT OR REPLACE, which created a stale vault_config row synced to all devices, pushing the known-vault count above 1 and breaking the single-vault auto-link. Fixed to use UPDATE WHERE id so it silently no-ops when no server row exists yet.
  • Null-name vault rows breaking auto-link: Pre-fix installs could leave null-name vault_config rows that were incorrectly counted during vault resolution, preventing iOS from ever adopting the Mac’s vault UUID. Auto-link now only considers named rows.
  • Vault UUID resolution simplified: Replaced a two-level name-match + fallback with a single _soleNamedVault() helper — if there is exactly one named vault_config row, it is the user’s vault on every platform, eliminating iOS/Android path-name mismatches entirely.
  • Key suffix formatter: The WRITE-prefixed key formatter was clearing the suffix field on every keystroke whose first five characters spelled “WRITE”. Guard is now gated on full key length (13 chars) so it only strips on paste, not during typing.
  • Optical centering: Minor visual alignment fix in the UI.

Visual upgrades

  • Book selector pill: The book selector in the editor toolbar is now displayed as a pill-shaped control with improved layout and visual treatment.
  • Dismiss button on welcome screen: A close button (×) now appears on the welcome view when a book is already selected, allowing users to dismiss it without selecting a new book.
  • Margin icon visibility in dark mode: Hover and default states for margin icons were using a hardcoded dark color (darkBorderColor) that was nearly invisible on dark backgrounds. Colors now use colorScheme.onSurfaceVariant / onSurface so they respond correctly to the active theme.