Release history
Changelog
Track what is shipping in ZeeMSG as the app grows from private messaging into a fuller communication stack.
v1.0.8
January 1, 2026
Core (Rust)
- - Added keyset paging APIs for chat history (chat_latest, chat_page) using display timestamp + row id, with index
- idx_messages_peer_displayts_id.
- - Added threads table + indexes for per‑conversation state (threads) and wired transactional updates on inbound/
- outbound inserts.
- - Added threads_list API for paged chat list data (single query, keyset cursor).
- - Updated mark_thread_read to update threads atomically with messages.
- - Updated TTL prune to remove expired messages and recompute thread state correctly.
- - thread_stats now reads from threads (so it reflects stored state).
- - Added test for mark_thread_read persistence.
- FFI / bindings
- - Exposed threads_list + new types (ThreadRow, ThreadsCursor, ThreadsPage) via UDL + FFI.
- - Regenerated Kotlin bindings (core_ffi.kt).
- Android
- - Chat history now uses core paging instead of full snapshot windowing.
- - Chat list + unread badges now come from threads_list (no per‑peer threadStats loops).
- - Removed unread/read counters saved in prefs; unread counts are derived from thread rows.
- - Chat list paging calls threads_list when you scroll near the bottom.
- - Refreshes thread list after poll receives, mark‑read, send, contact add/delete, and DB unlock/import.
- - Fixed modern theme dialogs and layouts to match the new palette; terminal theme preserved.
- - Status labels restored for terminal theme; modern theme uses checkmark icons (single for sent, double for
- delivered).
- - Input box transparency and background opacity adjusted per your screenshots.
- - Chat scroll behavior refined (auto‑scroll on send/receive only; no forced scroll when browsing).
v1.0.7
December 31, 2025
Chat Performance & Paging Refactor
- Core storage analysis
- Identified where the Rust core persists chat messages and how the existing chat(peer) retrieval was implemented.
- Audited message primary keys, ordering fields (timestamp, ID), and TTL / expiration metadata.
- Verified and added database indexes required for efficient paged queries.
- Keyset-based paging in Rust core
- Implemented efficient, index-friendly paging APIs in the core:
- chat_latest(peer, limit) to fetch the most recent messages.
- chat_page(peer, before_ts, before_id, limit) to load older messages using a strict anchor.
- Optional forward paging support (chat_page_after) for incremental updates.
- Ensured expired / TTL-based messages are filtered directly in the core.
- Preserved existing MessageInfo structures and encryption logic—only the query behavior changed.
- Thread statistics in core
- Added a dedicated thread_stats(peer) API providing:
- Unread message count
- Last read timestamp
- Last inbound message timestamp
- Last message timestamp
- Optional lightweight preview data when available
- Updated unread counts transactionally on message insert and mark-read operations.
- Eliminated the need to decrypt or scan full message histories for statistics.
- FFI and Android bindings
- Exposed the new paging and stats APIs through the Rust FFI layer.
- Updated generated Kotlin bindings to support the new interfaces.
- Introduced Kotlin-friendly data structures for paged messages and thread stats.
- Android chat UI refactor
- Replaced full-history loading and windowed list hacks with true paged loading from core.
- Implemented:
- Initial load via chat_latest
- Incremental loading of older messages using paging anchors
- Ensured stable item keys and preserved scroll position when prepending messages.
- Optimized date separator handling by updating only newly loaded ranges.
- Moved TTL filtering out of the UI layer; expiration is now enforced by the core.
- Reduced full-snapshot refreshes
- Removed reliance on full chat history snapshots.
- Updated open conversations incrementally when new messages arrive.
- Switched unread badge logic to rely entirely on thread_stats instead of scanning message lists.
- Validation and stability improvements
- Verified smooth performance with very large chat histories.
- Confirmed loading older messages no longer causes scroll jumps.
- Ensured new messages only auto-scroll when the user is already at the bottom.
- Verified unread counts remain correct and persistent across app restarts.
v1.0.7
December 31, 2025
Chat Performance & Reliability Update
- Chat loading has been fully refactored to use efficient, core-level paging instead of full history snapshots. Large conversations now stay fast and smooth, older messages load without scroll jumps, and unread counts are computed reliably in the core and persist across restarts. Message expiration is handled centrally, reducing UI overhead and improving overall stability.