Features
June 8, 2026 ยท View on GitHub
The library and binary crates aim to provide the most comprehensive and accurate representation of iMessage data available.
Targeted Versions
This tool targets the current latest public release for Messages.app. It may work with older databases, but all features may not be available.
Supported data sources
- Local macOS messages
- Encrypted or unencrypted local iOS backups
- Unencrypted backups are resolved normally
- Encrypted backups are resolved with
crabapple
- Jailbroken iOS filesystem data
- Uses
sms.db, which follows the same schema as macOSchat.db - Resolved as a macOS database with an alternate attachment root
- Uses
Supported Message Features
- Plain Text
- Correctly extracts time-zone corrected timestamps
- Detects when a message was read and calculates the time until read for both parties
- Humanizes display of time-until-read duration
- Parses
typedstreammessage body data usingcrabstep - Detects the service a message was sent from
- In HTML exports, balloons are colored correctly for the service they were sent with
- Supports iMessage, SMS, MMS, RCS, and Satellite (iMessage Lite)
- Displays translated message content alongside the original text
- Resolves contact names from the Contacts database when available
- Formatted Text
- Parses formatted text ranges from
typedstreammessage body data - Supports all iMessage text format ranges:
- Mentions
- Hyperlinks
- OTP/2FA
- Animations and Styles
- Data detectors, parsed from
DDScannerResultpayloads:- Unit and timezone conversions
- Currency amounts (symbol and amount)
- Postal addresses (street, city, state, postal code, and country)
- Package tracking (carrier and tracking number)
- Flights (airline and flight number)
- Parses formatted text ranges from
- Edited and Unsent messages
- Detects if messages components were edited or unsent
- Edited messages
- Parses
typedstreamedited body data - Displays content and timestamps for each edit
- Humanizes display of edit timestamp gaps
- Edited messages received before Ventura display as normal messages without history
- Parses
- Unsent messages
- No content, but are noted in context
- Edited messages
- Recently deleted messages are recovered when available
- Detects if messages components were edited or unsent
- Multi-part messages
- iMessages can have multiple parts, denoted by ranges in
typedstreammessage body data - Parts are displayed as
- New lines in TXT exports
- Separate balloons in HTML exports
- Handles Edited and Unsent parts
- iMessages can have multiple parts, denoted by ranges in
- Threads and Message Replies
- Threads are displayed both threaded under the parent as well as in-place
- This is to preserve context, which can be lost if replying to older messages
- Messages from a thread and were rendered in-place are annotated as such
- In HTML exports, threaded messages are hyperlinked to allow for easy reading in context
- For multi-part messages, replies are threaded under the correct message part
- Threads are displayed both threaded under the parent as well as in-place
- Attachments
- Any type of attachment that can be displayed on the web is embedded in the HTML exports
- Attachments can be copied to the export directory or referenced in-place
- Less-compatible attachments can be converted for even more portable exports:
- Image
HEICfiles convert toJPEG - Sticker
HEICfiles convert toPNG - Animated Sticker
HEICS(HEIC sequence) files convert toGIF - Video
MOVfiles convert tomp4 - Audio
CAFfiles convert tomp4 - Audio
AMRfiles convert tomp4
- Image
- Attachments are displayed as
- File paths in TXT exports
- Embeds in HTML exports (including
<img>,<video>, and<audio>)- Audio messages include embedded transcripts
- Attachment date metadata is set to the date and time of message receipt
- Expressives
- Detects both bubble and screen effects
- Messages sent with expressives are annotated
- Tapbacks
- Detects tapbacks to messages
- Messages sent or received with tapbacks are annotated
- For multi-part messages, tapbacks are placed under the correct message part
- Stickers
- Detects stickers sent or placed on messages
- Messages sent with stickers are
- Displayed in HTML exports
- Annotated in TXT exports
- For multi-part messages, stickers are placed under the correct message part
- Sticker effects are annotated in all exports
- Sticker tapbacks are also supported
- Genmoji are displayed with their prompt descriptions
- Inline stickers (Memoji, Genmoji, and custom stickers placed within the message text) render inline in HTML exports, scaled like jumbo emoji (larger when only a few are present)
- Apple Pay
- Displays Apple Pay transaction (source, amount, type) messages
- URL previews
- Parses the
NSKeyedArchiverpayload to extract preview data- Extracts cached metadata for each URL
- Preview images display in HTML exports
- URLs that have rotten may still retain some context if they have cached data
- Handles cases where URL messages are overloaded with other message types
- Apple Music (including preview streams and lyrics)
- Apple Maps (including
Placemarkdata) - App Store (including app metadata)
- Rich Collaboration
- Parses the
- App Integrations
- Parses the
NSKeyedArchiverpayload to extract balloon data - Supports system message types as well as third party applications
- Apple Fitness messages
- Photo Slideshow messages
- SharePlay/Facetime messages
- Check In messages
- Find My messages
- Polls and Votes
- Business Chat messages
- Quick Replies
- Interactive Forms
- List Pickers
- Parses the
- Handwritten Messages
- Parses the protobuf payload to extract handwritten message data
- Displayed as embedded
svgin HTML exports - TXT export behavior depends on attachment settings:
disabled: embedded inline as anasciigraphicclone, basic, full: saved as ansvgfile
- Displayed as embedded
- Parses the protobuf payload to extract handwritten message data
- Digital Touch
- Parses the protobuf payload to extract Digital Touch message data
- Supports all Digital Touch effects:
- Taps
- Sketches
- Kisses
- Heartbeats, including heartbreaks
- Fireballs
- Photos and videos
- HTML exports render a static frame depicting the captured data as an embedded
svgon a black4:5canvas- A photo is shown as the canvas backdrop, with any sketch drawn over it
- A video is shown as an embedded video player
- TXT exports describe each effect on a single line, including stroke and point counts or beats per minute
- Supports all Digital Touch effects:
- Parses the protobuf payload to extract Digital Touch message data
- Duplicated group chats
- Handles (participants) and chats (threads) can become duplicated
- On startup:
- Different handles that belong to the same person are combined
- Chatrooms that contain identical contacts (i.e., duplicated handles) are combined
- Divergent chatrooms that map to the same conversation in the
chat_lookuptable are combined
- Announcements
- Handles all types of chatroom announcements
- Group photo changes
- Chat participant modifications
- Phone number changes
- Chat background settings
- Handles all types of chatroom announcements