May 18, 2026 · 7 min read

What's inside msgstore.db

msgstore.db is the SQLite database WhatsApp Android keeps your chats in. The exported .txt file is what's left after WhatsApp strips out everything that wouldn't fit. A tour of the schema and the cost of working from the export.

msgstore.dbwhatsapp databasesqliteschema

Once you decrypt a Crypt15 backup, the file inside is msgstore.db — a SQLite database with around 70 tables on a modern WhatsApp install. Most of what makes a chat useful long-term is in tables you've never seen.

The tables that matter for an archive

TableWhat it holdsWhy it matters
messageOne row per message: sender JID, timestamp, body, key_id, statusThe conversation itself
message_mediaMedia metadata: file path, MIME, caption, sizeAttaches files to messages
message_quotedQuoted-reply contextReply threading
receipt_userPer-recipient delivered/read/played timestampsPer-recipient receipts in groups
chatPer-conversation summary, mute state, archived flagChat list rendering
jidPhone-number ↔ @lid mapping tableIdentity resolution
group_participant_userGroup membership historyWho was in the group when
message_revokedSender-deleted messages, markedDeletion markers
message_add_on_reaction (modern) / message_reactions (legacy)Emoji reactions per message per senderReactions in the archive

What WhatsApp's native export drops

  • Receipts and per-recipient timestamps: gone.
  • Sender JID: reduced to display name only.
  • Group participant history: gone; the export only shows current members.
  • Reactions: typically gone.
  • Deletion markers: gone.
  • Calls (audio/video/missed): gone.
  • System messages (group renamed, member added): gone.
  • Capped at 10,000 messages with media or 40,000 without.

Why archiving from msgstore.db is a different job

Chat Hoarding doesn't render the export — it renders the decrypted msgstore.db directly. Every field WhatsApp stored is available to the renderer, including the ones the official export discards. That's the difference between a chat copy and a chat archive.

Inspect it yourself

A .tarc bundle is a macOS package: right-click → Show Package Contents and you'll see msgstore.db. Open it with any SQLite browser (DB Browser for SQLite is free) to confirm the schema. Chat Hoarding's renderer is transparent about its source.

WhatsApp's schema is not stable

WhatsApp's developers add and rename tables between major versions. msgstore.db from 2020 looks meaningfully different from msgstore.db in 2026 — which is why Chat Hoarding writes a .tarc with its own stable manifest rather than relying on you to keep a WhatsApp from 2020 to open a 2020 backup.

FAQ

Can I just open msgstore.db with a SQLite browser instead of buying Chat Hoarding?

You can. You'll see the raw tables; you won't see voice notes rendered, messages threaded, receipts decoded into icons, contacts mapped to names, or @mentions resolved. The price gap covers the rendering layer plus the .tarc archive format plus auto-update + license + support — not the SQLite read itself.

Why is the database called msgstore.db and not whatsapp.db?

Historical: WhatsApp split the message store (msgstore.db) and the contact store (wa.db) very early. Only msgstore.db is written to the user-accessible backup folder as Crypt15; wa.db lives in the app's private /data/data/com.whatsapp directory and is unreachable without root. Chat Hoarding resolves contacts via your phone's address book (exported as vCard by the Android companion) and manual mappings, not wa.db.

Related reading

Stop reading. Start archiving.

$99 lifetime · 2 Macs · revocable

What's inside msgstore.db · Chat Hoarding