What's New in v9.2.1
🐛 Accurate Chat Names, Per-Device Pagination & Reliable Message Deletes
Version 9.2.1 is a patch release focused on chat and message correctness. Revoked and deleted messages are now removed from local chat storage instead of lingering in the UI and API, message pagination counts are scoped to the requesting device, and chat labels are resolved from the synced WhatsApp address book instead of falling back to raw phone numbers. The CI workflows are also refreshed to the current GitHub Actions majors.
🐛 Bug Fixes
Revokes and Deletes Sync to Chat Storage (#810)
- Removes the message from local chat storage after a successful revoke or delete, so the chat API and UI no longer return messages that no longer exist on WhatsApp
- Applies the same cleanup to incoming revoke events, so messages revoked from another device also disappear locally
- Makes message deletion atomic: reactions, edits, and the message row are removed in a single transaction and roll back together on failure
- Preserves Chatwoot message links on delete so asynchronous delete forwarding can still resolve them
- Returns an explicit error when the device ID or chat storage is unavailable instead of silently leaving stale rows behind
Message Pagination Counted Per Device (#811)
- Scopes the total message count in
GET /chat/{chat_jid}/messagesto the requesting device - Fixes inflated totals and page counts on multi-device setups where the same chat JID exists for more than one connected device
Display Names Resolved from Synced Contacts (#812)
- Resolves chat labels from the address book synced by whatsmeow, falling through
FullName,PushName, andBusinessNamebefore the JID-derived label - Replaces phone-number and JID placeholders in chat list and chat detail responses with real contact names
- Normalizes LID identifiers through the active device mapping, including pre-normalization placeholders and late LID mappings
- Uses point lookups for single-chat requests and a single contact snapshot for list requests, avoiding N+1 reads and eager full contact scans
- Leaves group subjects, newsletter names, and
status@broadcasthandling unchanged; contact store failures stay non-fatal and fall back to the existing deterministic label
🔧 Technical Improvements
CI Toolchain Refresh
- Bumps
actions/checkoutv4 → v7,actions/setup-gov5 → v7,docker/login-actionv3 → v4,docker/setup-buildx-actionv3 → v4,docker/setup-qemu-actionv3 → v4, anddocker/build-push-actionv6 → v7 - Keeps the pinned Go version in sync with
src/go.mod(1.26.0), whichsetup-gov6+ requires because it forcesGOTOOLCHAIN=local - Aligns the stale Go version reference in
AGENTS.mdwithgo.mod
What's Changed
- fix(message): sync deletes to chat storage (#810) by @aldinokemal
- fix(chat): scope message pagination count by device (#811) by @aldinokemal
- fix(chat): resolve display names from synced contacts (#812) by @aldinokemal
- chore(ci): bump GitHub Actions to latest major versions by @aldinokemal
- chore(release): update
AppVersiontov9.2.1by @aldinokemal
Contributors
Full Changelog: v9.2.0...v9.2.1