I've spent a long time reverse engineering nearly every aspect of Apple's iMessage SQLite tables to build this program. As far as I know, there are no other tools that support the full corpus of iMessage features, including edited messages, app messages, reactions, and threads.<p>I built this software to preserve some conversations with loved ones; I hope others find it useful as well.<p>For the curious, here are some of the more interesting aspects of the database I came across:<p>- Dates are stored as Unix timestamp with an epoch of 1/1/2001 00:00:00<p>- Messages can have multiple parts, denoted by some special invisible characters<p>- Reactions are stored by prefixing the GUID of the reacted message with the index of the message part [0].<p>- URL messages cache data in the table, which we can parse and display [1].<p>- Edited messages store the history message edits [2] (I wanted to try out DDD here, which was fun!).<p>[0]: <a href="https://docs.rs/imessage-database/latest/imessage_database/message_types/variants/enum.Reaction.html" rel="nofollow">https://docs.rs/imessage-database/latest/imessage_database/m...</a><p>[1]: <a href="https://docs.rs/imessage-database/latest/imessage_database/message_types/url/struct.URLMessage.html" rel="nofollow">https://docs.rs/imessage-database/latest/imessage_database/m...</a><p>[2]: <a href="https://docs.rs/imessage-database/latest/imessage_database/message_types/edited/struct.EditedMessage.html" rel="nofollow">https://docs.rs/imessage-database/latest/imessage_database/m...</a>