Theorem v1.5.5
Pre-release
Pre-release
Fixed
- P2P Device Sync PDF On-Demand Downloads (Issue #89) — Fixed on-demand book download failures from paired devices for books imported on desktop. Enhanced
FileTransferHandler::locate_bookinsrc-tauri/src/file_transfer.rsto locate books across all local storage targets: materializedbook-cache/{id}.bookandbook-cache/{id}, SQLitebooks.dataBLOBs,book_metadatatable entries (filePath,file_path,storagePath,storage_path), and the Zustand library state stored in SQLitekv_store(persist:theorem-library). Replaced in-memory whole-file buffering with zero-RAM-spike streaming from filesystemFilehandles to QUIC send streams viatokio::io::copy. - Cross-Page Text Highlighting in PDF and EPUB Readers (Issue #90) — In
PDFAnnotationLayer.tsx, implemented sub-range clipping totextLayerNodewith boundary point comparison so selections spanning across pages isolate text belonging strictly to each respective page. Filtered client rects to the page layer's physical bounding box (layerRect), preventing inverted coordinates on previous pages. Replaced immediateselection.removeAllRanges()with a deferred cleanup (80ms) to allow multiple intersecting page layers to capture their segment of a multi-page selection. InReader.tsx, updatedresolvePickerPosition()to anchor using the last client rect fromRange.getClientRects()rather thangetBoundingClientRect(), preventing popover menu offset across CSS multi-column paginated layouts. - Mobile Immersion Reading and Text-to-Speech on Android (Issue #91) — Handled
nullvoice lists returned by Android'sTextToSpeech.getVoices()inTtsAudioPlugin.kt(doSpeak,getVoices,synthesizeToFile) withcurrentTts.voices?.let { ... }, eliminating unhandled KotlinNullPointerExceptioncrashes whendefaultTtsSettings.voiceis set. Enabled TTS by default insettingsStore.ts(defaultTtsSettings.enabled: true) and ensuredonToggleImmersionis always available for non-PDF books inReader.tsx, automatically enabling TTS when toggled. Allowed mobile users to access the voice and speed settings popup inReaderNavbar.tsxon Android ((neuralReady || isAndroid())) to adjust narration speed (0.75×–1.5×). - Sync Gossip and Reading Progress Propagation (Issue #92) — Fixed a premature bailout in
provisionToIrohDocs()(src/core/lib/sync-orchestrator.ts) whereneedsProvisionevaluated tofalseafter the first application launch, causing subsequent reading progress mutations and last read timestamps to skipdocsSetEntry(). Removed the premature bailout so that per-key diffing against_provisionedValuesruns on every sync round, correctly pushing modifiedprogress,currentLocation, andlastReadAttimestamps toiroh-docsand triggeringiroh-gossippropagation across connected peers. UpdateddefaultDeviceSyncSettingsinsettingsStore.tsto defaultautoSyncEnabled: trueandsyncOnConnect: true, migrating legacy configurations to schema version 12.
Download & install
| Platform | Download |
|---|---|
| Windows (x64) | Theorem_v1.5.5_x64-setup.exe |
| macOS (Apple Silicon) | Theorem_v1.5.5_aarch64.dmg |
| macOS (Intel) | Theorem_v1.5.5_x64.dmg |
| Linux (Debian/Ubuntu) | Theorem_v1.5.5_amd64.deb |
| Linux (any) | Theorem_v1.5.5_amd64.AppImage |
| Android (arm64) | app-arm64-release.apk |
Linux one-liner: curl -fsSL https://raw.githubusercontent.com/Fundaments-Work/Theorem/main/scripts/install-linux.sh | bash
Desktop builds auto-update in place (Settings → About → Check for Updates). Android updates are manual unless installed via F-Droid.