WhatsApp Desktop stores CoreData-style records in SQLite. wacrawl imports the useful entities into a portable archive with an FTS5 search index.
The importer reads these WhatsApp tables:
ZWACHATSESSION
ZWAMESSAGE
ZWAMEDIAITEM
ZWAGROUPINFO
ZWAGROUPMEMBER
Axolotl.sqlite: ZWAZMDACCOUNT (account identity only)
- WhatsApp timestamps are seconds since
2001-01-01T00:00:00Z. ZWAMESSAGE.Z_PKis retained asmessages.source_row_pk. Ordinary rows use the same value for the unique archivesource_pkand map tomessages.event_idaswa:<source_pk>.- When WhatsApp reuses an archived message row for a reaction, the original keeps its identity and the reaction receives a deterministic JSON-safe high-range
source_pkplus awa-reaction:<source_row_pk>:<digest>event ID. The digest covers the chat, reaction stanza, and reaction target, so repeat imports deduplicate without discarding either event; the raw reused row remains available insource_row_pkas provenance. - Routine merges bind the archive to the canonical source path, a hashed CoreData store fingerprint, and a separately hashed account JID. Event overlap is not an account-identity substitute.
- Legacy archives without verified account binding require one explicit
--adopt-source. Use a separate--dbfor another account or--restorefor intentional source replacement. ZSTANZAIDis not unique enough to identify archived messages.- Canonical entities carry
deleted_at,deletion_source,deletion_reason, andlast_seen_at; an unobserved row is never implicitly tombstoned. - Prior observable message payloads are append-only
message_revisionsrows keyed by stable event ID. - Group senders resolve through
ZWAMESSAGE.ZGROUPMEMBER. - Media joins through both
ZWAMESSAGE.ZMEDIAITEMandZWAMEDIAITEM.ZMESSAGE. - WhatsApp's search database uses its own
wa_tokenizer;wacrawlbuilds a portable SQLite FTS5 index instead.
The archive contains contacts, chats, groups, group participants, messages, message revisions, media metadata and local media paths, source identities, and import metadata. Normal readers exclude tombstoned entities; encrypted backups retain them so exact restore does not discard source deletion history.
See the command reference for merge, adoption, restore, and media-copy behavior.