v8.6.0

nolimits4web/swiperv8.6.0May 24, 2026by aldinokemal

AI Summary

This minor release introduces persistence for WhatsApp message edits and reactions, adds webhook support for label appstate events, and provides pure-Go SQLite builds for easier ARM cross-compilation.

Key Highlights

  • Persist WhatsApp Message Edit History
  • Persist Chat Message Reactions
  • Forward WhatsApp Label Appstate Events to Webhooks
  • Pure-Go SQLite Support via Build Tags
  • Reliability fixes for message sending and chat list scoping

New Features

  • New `message_edits` table tracks edit history
  • New reaction storage with migration and search hydration
  • Label edits forwarded to configured webhooks
  • New `pkg/sqlite` abstraction for CGO and pure-Go SQLite
  • Outgoing contact messages store name + phone number
  • Web client shows Gowa favicon

Full Release Notes

## What's New in v8.6.0

🚀 **Minor Release: Message Edit History, Message Reactions, Label Webhooks & Pure-Go SQLite Builds**

This release persists WhatsApp message edits and reactions into chat history, forwards label appstate events to webhooks, adds pure-Go SQLite builds for easy ARMv6/ARMv7 cross-compilation, and ships several reliability fixes around message sending and chat list scoping.

---

## ✨ New Features

### Persist WhatsApp Message Edit History (#679)
- New `message_edits` table tracks every `MESSAGE_EDIT` event as an append-only history
- The original message content is updated in-place while previous revisions remain queryable
- Existing edit webhook payload behavior is preserved

### Persist Chat Message Reactions
- New reaction storage with migration and chat/search hydration
- Inbound and history-sync reaction events are persisted separately from messages
- Reactions exposed in chat responses and documented in OpenAPI, with regression coverage

### Forward WhatsApp Label Appstate Events to Webhooks (#659)
- Label edits and chat–label association changes are now forwarded to configured webhooks
- Reuses existing webhook forwarding, event filtering, and LID normalization behavior
- Payloads include label metadata, label state, `chat_id`, and `chat_lid` when applicable

### Pure-Go SQLite Support via Build Tags (#677)
- New `pkg/sqlite` abstraction switches between CGO-based `mattn/go-sqlite3` (default) and pure-Go `modernc.org/sqlite` (with `-tags purego`)
- Enables easy cross-compilation for Raspberry Pi (ARMv6/ARMv7) and other platforms without a C toolchain
- Pure-Go path applies tuned pragmas (`busy_timeout=30s`, WAL, `synchronous=NORMAL`) to prevent `SQLITE_BUSY` on slow MicroSD cards
- Default build behavior is unchanged — fully backward compatible
- README includes a Raspberry Pi cross-compilation guide

### Phone Number in Contact Messages (#646)
- Outgoing contact messages now store name + phone number together in saved content
- Contact message text extraction includes the phone number from the vCard
- Added unit tests for proto and event contact text formatting
- Closes #645

### Gowa Favicon (#672)
- Web client now shows the Gowa favicon in the browser tab using the existing `gowa.svg` asset

---

## 🐛 Bug Fixes

### API-Sent Messages Missing from Chat List (#683, PR #687)
- `wrapSendMessage` previously used `context.Background()` for async storage, which dropped the device instance attached by `ContextWithDevice`
- This caused rows to be stored with an empty `device_id` while queries used the logged-in JID — a device scoping mismatch surfacing as `total_messages=0`
- Fix uses `context.WithoutCancel(ctx)` so device context survives after the HTTP request completes
- `StoreSentMessageWithContext` now returns an explicit error when `device_id` cannot be resolved (no more silent bad data)
- `deviceChatStorage.StoreSentMessageWithContext` injects device scope when context lacks one (defense in depth)
- Note: messages previously stored with empty `device_id` will not appear until re-sent or re-synced via history

### Mitigate WhatsApp Server Error 463 on Send
- Privacy token storage is kept on the primary WhatsApp database while the optional keys cache is used only for encryption and session data
- WhatsApp server error 463 is mapped to a `WA_REACHOUT_TIMELOCK` response so API callers get actionable retry guidance
- Documented safer `DB_KEYS_URI` usage with regression coverage for the store and send-error behavior

---

## 🔧 Technical Improvements

### CI / Docker
- Publish the `latest` Docker manifest on each release

### Dependency Updates
- `go.mau.fi/whatsmeow`: updated to latest
- All Go dependencies kept up-to-date

---

## What's Changed

* Add Gowa favicon by @juliomuhlbauer in https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/672
* Add pure-go sqlite support with build tags for easy armv6/armv7 cross-compilation by @danihidayatx in https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/677
* Forward WhatsApp label appstate events to webhooks by @zayedadel in https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/659
* fix: API-sent messages missing from chat message list (#683) by @aldinokemal in https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/687
* feat: persist whatsapp message edit history by @juliomuhlbauer in https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/679
* Show phone number when sending a contact in messages by @juliomuhlbauer in https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/646
* feat: persist chat message reactions by @aldinokemal
* fix: mitigate WhatsApp 463 send failures by @aldinokemal
* ci: publish latest docker manifest on release by @aldinokemal
* chore: upgrade version by @aldinokemal

## New Contributors

* @danihidayatx made their first contribution in https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/677
* @zayedadel made their first contribution in https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/659

**Full Changelog**: https://github.com/aldinokemal/go-whatsapp-web-multidevice/compare/v8.5.1...v8.6.0