Changelog¶
All notable changes are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased¶
Changes on main not yet in a tagged release.
1.3.1 - 2026-05-19¶
Fixed¶
- Regex export no longer capped at 100 000 records; replaced with cursor pagination for complete large exports.
- UI no longer freezes during regex history search; scan moved to a background thread.
- Monthly time range calculations no longer skew around DST transitions.
- Hidden-domain filter now correctly escapes LIKE wildcard characters in domain names.
- URL prefix record counts no longer double-count overlapping prefixes.
- WebDAV cleanup failures now surfaced instead of silently swallowed; manifest timestamp aligned with upload time.
- HTML export now raises an error when the template is missing the injection marker instead of producing corrupt output.
- Config saves suppressed on shutdown to prevent corruption; failed config promotes now roll back cleanly.
- Config backup rotation fixed; migration false-positive detection guard added.
- Badge data loading now handles DB errors gracefully instead of crashing.
- Extractor backup thread no longer implicitly blocks the main process on shutdown.
- Potential deadlock during FTS-stripped database export resolved.
Build¶
- WebDAV hidden import corrected from
webdav4towebdav3in PyInstaller spec, fixing missing-module errors in packaged builds.
1.3.0 - 2026-05-14¶
Added¶
- Default theme changed from Dark to System, so the app now follows OS appearance out of the box.
- Record count preview in blacklist and hidden-domain management dialogs, showing impact before confirming changes.
- Isolated recent search history for regex mode, keeping advanced search workflows cleaner.
- Redesigned app icon with an animated SVG-based tray renderer replacing static tray assets.
- Added a multilingual MkDocs documentation site.
Fixed¶
- FTS triggers silently lost after a process crash are now recovered before all history write paths.
title:andurl:search tokens no longer overwrite each other; multi-word field queries now split into AND terms correctly.- Hidden domains are now filtered correctly in overlay quick search.
- Safari incremental extraction time boundary condition corrected.
- Incorrect path filter in browser scanner that excluded non-standard installations removed.
- WebDAV password ciphertext now preserved when decryption fails on config load.
- Single-instance startup now falls back safely when token file write fails.
- History records correctly migrated when adopting a previous device identity.
sync_progresssignal guarded against wrong argument types emitted from worker thread.- Real-time sync progress was restored, and the QThread wrapper lifetime was hardened against destroyed-while-running crashes.
- The backup thread lifecycle was fixed, and auto-backup exceptions are now isolated from the sync flow.
- Cross-thread signal emission races and QThread lifetime issues during sync were resolved.
- FTS triggers restored immediately on upsert exception to close the write window.
_ro_lockheld across both query stages inget_recordsto eliminate connection race.- WebDAV sync manifest uploaded before cleaning old backups to prevent stale manifest on crash.
- Domain cache writes guarded with a lock to prevent TOCTOU race.
- Stale page cache evicted in regex load-more path to prevent blank rows.
- Dialog flash at top-left corner on first open eliminated.
- Autocomplete font size clamped to valid range on Linux.
- Tray minimization prevented when system tray is unavailable.
Performance¶
- O(N) vt_cache trim replaced with page-granularity LRU eviction.
- Write lock released before
VACUUM INTOinexport_without_fts. - Shared registry and filter sets in extractor manager guarded with a lock to prevent data races.
Build¶
- Linux Qt platform fallback added; xcb dependencies packaged for out-of-box startup on Linux.
- Comprehensive
.gitattributesrules added for line endings and binary files.
1.2.2 - 2026-04-29¶
Fixed¶
- CLI
restorealways restored the latest backup instead of the user-selected one. - CLI
restoredid not honor the favicon restore flag. - CLI
restore --replaceused unsafe database replacement. - Scheduler lead-in timers not cancelled, causing stale callbacks to fire after reschedule.
- Terminal size API usage corrected, fixing output formatting in all CLI commands.
1.2.1 - 2026-04-23¶
Added¶
- "Locate in History" button on bookmark cards for quick navigation.
- Clicking the tag chip area or note area on a bookmark card now opens the editor directly.
Fixed¶
Ctrl+F/Ctrl+Rglobal shortcut conflicts resolved; shortcuts now work reliably in history view.- Date separator visit counts now respect current filters and hidden-record mode.
1.2.0 - 2026-04-23¶
Added¶
- 14 configurable global and in-app keyboard shortcuts with a dedicated settings panel.
- Hidden Records viewing mode: a dedicated view for soft-hidden records.
- Soft hide-domain: hide all records from a domain without deleting them, with a standalone manager UI.
- Portable mode: auto-detects a
.portablemarker file in the app root and routes all data todata/subdirectory. - "Search the Web" entry in the quick-access overlay and autocomplete dropdown, with configurable search engine presets.
- "Start minimized to tray" startup setting.
- Lazy-GUI minimize-to-tray mode: window and subsystems deferred until first open.
- Date separators now restored after column toggle or reorder.
- Real-time system Dark/Light mode following.
Changed¶
- WebDAV uploads switched from chunked to atomic streamed, significantly improving reliability and eliminating temporary file descriptor leaks on Windows.
- Headless mode now skips GUI subsystems and uses a lower SQLite cache, reducing background memory footprint.
- Domain and icon cache eviction changed from full
clear()to FIFOpopitem()to eliminate periodic eviction spikes. - Column visibility toggles moved into a submenu for a cleaner toolbar.
Fixed¶
- WAL read-after-write inconsistencies resolved by unifying connection lifecycle lock order.
- VACUUM crash caused by
prune_tombstonesrunning while_vacuuming=Truefixed. - Tombstones pruned during VACUUM to prevent unbounded table growth.
- Scroll jitter after delete/hide/unhide fixed; scroll position preserved instead of jumping to top.
- Long titles no longer push action buttons off-screen in settings cards.
- Spurious horizontal scrollbar after theme switches eliminated.
- Bookmark and annotation reads now see fresh data immediately after a write (stale WAL snapshot fixed).
- Windows Junction points no longer traversed during BFS browser scan.
- QTimer interval clamped to
INT32_MAXto prevent integer overflow on very long intervals. BrowserMonitorproperly terminated on application exit.- Multi-word CLI search queries now accepted without quoting.
- Long table output in CLI truncated with ellipsis to prevent line overflow.
encrypt_textfailures now propagated instead of silently discarding the WebDAV password.get_bookmarked_urlsnow usesDISTINCTto prevent duplicate URL results.
Performance¶
- Two-step keyset pagination in
get_recordseliminates O(N) offset scan for large histories. - Regex search pagination pushed to SQL layer, eliminating full-table O(N) scan.
- Fast-scroll lag reduced by optimizing paint,
data(), URL parsing, andeventFilterhot paths. DashboardPagebrowser status updates skipped when window is hidden.
Security¶
- Encryption upgraded to V2 format with independent HKDF encryption and authentication subkeys.
- Nonce-based authentication added to single-instance IPC to prevent replay attacks.
- XSS vulnerability in HTML export patched: SVG icons sanitized before embedding.
- Master password idle timeout now uses
time.time()to correctly count time during system sleep. - Master password bypass gaps closed; stale session UI fixed.
Build¶
- macOS standalone
tar.gzartifact added. - Windows portable ZIP and setup installer added.
- Windows standalone Python runtime cached in CI to reduce build times.
1.1.1 - 2026-04-12¶
Fixed¶
- Overlay (
Ctrl+Shift+H) vertical drift when reopening fixed. - Random horizontal scrollbar appearing in the history table fixed.
- Bookmarks page not refreshing after modifying bookmarks from the History page fixed.
bookmarked_attimestamp not updating on conflict fixed.- Potential race condition during WebDAV client initialization fixed.
- Stale filter hits from uncleared
_excl_cacheon connection reset fixed.
Performance¶
- History queries and bookmark/annotation badge loading moved to a background thread to unblock the UI.
- Display domain resolved via JOIN on
domainstable instead of per-row URL parsing on the render path. - Redundant second VACUUM removed from
export_without_fts. NOT INsubquery onhidden_recordsreplaced with more efficientNOT EXISTScorrelated lookup.
1.1.0 - 2026-04-11¶
Added¶
- Spotlight-style global quick-search overlay (
Ctrl+Shift+H): instant search across history, bookmarks, and annotations from any app. - Advanced search syntax:
domain:,after:,before:,title:,url:,browser:,device:,is:bookmarked,has:note,tag:. - Inline ghost-text autocomplete and fuzzy-matching dropdown suggestions in the search bar.
- Statistics page with a GitHub-style annual activity heatmap (with active-month contour highlight), browser usage pie chart, 24-hour activity bar chart, and one-click high-resolution image export.
- Bookmarks and annotations system: tag URLs and write rich-text notes to build a personal knowledge base.
hsyncheadless CLI withsync,backup,search,export,restore,config,db, and watch-mode commands.- Shell tab completion for
hsyncviaargcomplete(Bash, Zsh, Fish). - Device identity management: rename devices, delete obsolete ones, or adopt a previous identity after an OS reinstall.
- WebDAV restore now merges with local data instead of a destructive overwrite.
- Drag-and-drop URL export from the history table (
Alt+drag or favicon drag) to desktop or editors. - Scroll time bubble: shows date, top domain, and activity density bar while dragging the scrollbar.
- Native browser support added: QQ Browser, Sogou, Twinkstar, CentBrowser, 2345 Explorer, Liebao, UC Browser (Desktop), Quark.
- Firefox fork support added: Waterfox, LibreWolf, Pale Moon, Basilisk, SeaMonkey.
- Chrome, Edge, and Brave Canary/Dev/Beta channel support.
- BFS deep scan to automatically discover portable or non-standard browser installations.
- Overlay fade-in/fade-out animation.
- First-run wizard overhauled for simpler initial setup.
- Migration wizard for lossless migration from v1.0.x installations.
- Scrollbar context menu for time bubble display modes.
- Inertial smooth animation on the scroll time bubble.
Fixed¶
- File-locking issues during WebDAV backup on Windows resolved.
- Scrollbar position jumping on Dark/Light theme switch fixed.
- FTS multi-word queries now use AND semantics for higher precision recall.
normalize_domainsUPDATE now processed in 5000-row chunks to avoid long write locks.- Hidden records excluded from analytics stats and overlay quick search.
_ensure_connguarded with_vacuumingflag to prevent concurrent access during VACUUM.
Performance¶
- SQLite extraction rewritten with batch inserts and pre-compiled regex, reducing memory usage and improving speed.
- Favicon rendering optimized with LRU cache and SVG recoloring, reducing stuttering during fast scrolling.
- History page initial load uses progressive initialization to reduce time to first paint.
1.0.0 - 2026-03-24¶
Initial stable release.
Added¶
- Browser history aggregation from Chromium-based (Chrome, Edge, Brave, Opera, Vivaldi, Arc, and more), Firefox-based, and Safari browsers.
- Local SQLite database with FTS5 full-text search using a trigram tokenizer for millisecond-latency substring search.
- WebDAV cloud backup and restore with ZIP compression and SHA-256 integrity verification.
- Multi-browser, multi-profile support with WAL-safe database copying.
- Virtual scrolling for smooth browsing of million-row history lists.
- System tray integration with sync status notifications.
- Master password encryption for WebDAV credentials via HKDF-SHA256 and system keyring integration.
- Windows and macOS packages.