Release Candidate (2026/01/01)
Happy New Year! It's 2026
I’m celebrating the start of the year by dropping a brand new Release Candidate. There’s a lot packed into this update, from media preview improvements to better security, making it the perfect way to start the year. Thank you all for contributing!
Support for Python 3.9 is dropped
As the official security support is ended on 31 Oct 2025, Python 3.9 is no longer supported.
New Features
- Added the ability to incrementally merge JSON outputs (#149).
- Added media previews within reply bubbles (#128).
- Added blue "read" ticks for message status in HTML exports (#146).
- Introduced the
--telegramflag for Telegram-compatible JSON output formats (#157). - Expanded the JSON output to include additional message metadata.
- Added a startup banner (disable with
--no-banner). - Message metadata (such as delivery time and read time) are now shown in the output (#69).
Bug Fixes
- Fixed missing attributes in exported JSON files and refactored functions for jsonify to prevent recurrence (#150).
- Corrected
message_typeassignment (fixed accidental tuple creation) and restored it as an importable attribute. - Fixed a critical SQL statement error that prevented media information retrieval.
- Resolved the disappearing reply feature on iOS (#154).
- Fixed reply text overflow.
- Corrected
bytes_to_readablelogic to prevent fractional byte representations (e.g., "0.1 bytes"). - Fixed integer casting for the
--sizeflag (#156). - Fixed error when not supplying a value (default) to
--size. - Fixed vCard normalization for numbers starting with
0. - Enhanced
vcards_contacts.pyto handle empty chat names (#162, #163). - Refactored vCard logic to handle quote-printable encoding, removing
vobjectsas a dependency (#173, #175). - Fixed errors occurring when timestamps were exactly
0. - Resolved incorrect decimal-to-integer stripping.
- Fixed missing return lines in
get_status_location. - Resolved the group chat sender not being populated from vCards (#167).
- Fixed a wrong type hint to improve code reliability and IDE support.
Improvements
- Implemented artifact attestation for enhanced security and supply-chain trust.
- Transitioned most outputs from
print()to a proper logger for better debugging. - Added some automated CI tests and security checks.
- Refactored the
Messagemodel to support both raw numeric and string timestamps. - Replaced the
slugifyfunction with a clean-room implementation, removing legacy Django copyright. - Renamed
sanitize_filenametosafe_name. - Refactored
convert_time_unit, and removed unused code inbplist.py. - Added a specific warning for macOS users regarding "Full Disk Access" permissions (#158).
- Tightened input validation for the
--splitoption. - The vCards enrichment is now moved to be done before rendering the output.
- Added more CRYPT14 offsets.
Note on this Pre-release
As we currently do not have a physical testing device for this version, I am releasing this as a Release Candidate (RC1).
If you are a regular user, please help us test!
- Install via pip:
pip install whatsapp-chat-exporter --pre - Report any crashes or issues in the GitHub Issues tab (please report in existing issues if they are available).
- If no major bugs are reported for a while, this will be promoted to the stable version.
Note on the pre-built binaries
The attached binaries were generated by workflow run 20635021703. You can verify their integrity and provenance using the GitHub CLI. Detailed instructions are available in the README.
Full Changelog: https://github.com/KnugiHK/WhatsApp-Chat-Exporter/compare/0.12.1...0.13.0rc1