46 releases (stable)

Uses new Rust 2024

4.0.0 Mar 17, 2026
3.3.2 Feb 6, 2026
3.3.1 Jan 19, 2026
3.2.1 Nov 17, 2025
0.1.4 Dec 30, 2022

#832 in Database interfaces

Download history 177/week @ 2025-12-11 128/week @ 2025-12-18 100/week @ 2025-12-25 125/week @ 2026-01-01 138/week @ 2026-01-08 144/week @ 2026-01-15 166/week @ 2026-01-22 155/week @ 2026-01-29 121/week @ 2026-02-05 142/week @ 2026-02-12 133/week @ 2026-02-19 158/week @ 2026-02-26 194/week @ 2026-03-05 152/week @ 2026-03-12 126/week @ 2026-03-19 153/week @ 2026-03-26

645 downloads per month
Used in imessage-exporter

GPL-3.0-or-later

1MB
22K SLoC

imessage-database

This library provides interfaces to interact with iMessage Databases.

Installation

This library is available on crates.io.

Documentation

Documentation is available on docs.rs.

Example

use imessage_database::{
    error::table::TableError,
    tables::{
        messages::Message,
        table::{get_connection, Table},
    },
    util::dirs::default_db_path,
};

fn iter_messages() -> Result<(), TableError> {
    // Create a read-only connection to an iMessage database
    let db = get_connection(&default_db_path()).unwrap();

    // Iterate over a stream of messages
    Message::stream(&db, |message_result| {
        match message_result {
            Ok(mut message) => {
                // Deserialize the message body
                if let Ok(body) = message.parse_body(&db) {
                    message.apply_body(body);
                }

                // Emit debug info for each message
                println!("Message: {:#?}", message)
            },
            Err(e) => eprintln!("Error: {:?}", e),
        };

        // You can substitute your own closure error type
        Ok::<(), TableError>(())
    })?;

    Ok(())
}

Dependencies

~35MB
~651K SLoC