v0.9.2

EricLBuehler/diffusion-rsv0.9.2May 17, 2026by github-actions[bot]

AI Summary

Adds status broadcast commands, improves security by blocking private link previews and validating webhooks, and fixes numerous bugs.

Key Highlights

  • New 'wacli send status' command for broadcasts
  • Security: block automatic link previews from private addresses
  • Security: validate webhook URLs and disable private-network targets
  • Fix for terminal control characters in CLI output
  • Fix for unwrapping edited WhatsApp messages in history

New Features

  • Status broadcast commands (text and media)
  • Webhook validation and security hardening
  • CLI output formatting improvements
  • Media download size and type enforcement
  • History sync message unwrapping

Full Release Notes

## Changelog

### Added

- Send: add `wacli send status` for WhatsApp status broadcasts, including text statuses with optional background/font and media statuses with captions. (#247 - thanks @dovocoder)
- Store: persist synced and locally sent status broadcasts separately in `status_messages` instead of mixing them into normal chat messages.

### Security

- CI: pin GitHub Actions and Docker base images to immutable refs and pin GoReleaser to an exact version.
- Send: block automatic link previews from fetching localhost, private, link-local, multicast, and other non-public addresses.
- Sync: validate webhook URLs, redact webhook errors, disable private-network webhook targets by default, and add `--webhook-allow-private` for trusted local endpoints.

### Fixed

- Accounts: serialize account config mutations with a config lock and save through unique temporary files.
- CLI: strip terminal control characters from human/table/error output.
- CLI: open the local store through SQLite read-only mode for `--read-only` commands instead of initializing writer state.
- Media: enforce regular-file and size limits for sends, stickers, voice notes, profile pictures, contacts imports, thumbnails, and unknown-length downloads.
- Messages: make `--delete-media --for-me` remove the stored local media file when present.
- Store: count all chats and groups in `store stats` instead of the first 50 entries.
- Sync: warn when bootstrap contact/group/channel refresh fails instead of silently ignoring it.
- Sync: bound each webhook delivery request so shutdown is not stuck behind a slow endpoint.
- History: unwrap edited WhatsApp messages during history sync and backfill so stored/searchable text shows the edited body instead of `(message)`. (#246 - thanks @hiasinho)
- Polls: use WhatsApp's single-select poll creation field for outbound single-select polls and preserve unmatched poll vote hashes in `poll show --json`. (#248 - thanks @dovocoder)
- Sync: canonicalize `@lid` chat JIDs before enqueuing media downloads so `sync --follow --download-media` finds the correct DB row for live one-to-one messages. (#244 - thanks @Daniel1of1)