A customizable, cross-platform tool for parsing WhatsApp chat databases from Android and iOS/iPadOS backups. Supports Android .crypt12, .crypt14, .crypt15, and the latest database formats. Outputs chat history in readable HTML or structured JSON.
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 --telegram flag 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_type assignment (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 error when not supplying a value (default) to --size.
Fixed vCard normalization for numbers starting with 0.
Enhanced vcards_contacts.py to handle empty chat names (#162, #163).
Refactored vCard logic to handle quote-printable encoding, removing vobjects as 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 Message model to support both raw numeric and string timestamps.
Replaced the slugify function with a clean-room implementation, removing legacy Django copyright.
Renamed sanitize_filename to safe_name.
Refactored convert_time_unit, and removed unused code in bplist.py.
Added a specific warning for macOS users regarding "Full Disk Access" permissions (#158).
Tightened input validation for the --split option.
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