33 releases (stable)

Uses new Rust 2024

new 2.6.1 Apr 15, 2025
2.5.0 Mar 30, 2025
2.4.0 Feb 22, 2025
2.2.2 Dec 17, 2024
0.1.4 Dec 30, 2022

#628 in Database interfaces

Download history 174/week @ 2024-12-25 211/week @ 2025-01-01 204/week @ 2025-01-08 271/week @ 2025-01-15 98/week @ 2025-01-22 151/week @ 2025-01-29 182/week @ 2025-02-05 143/week @ 2025-02-12 265/week @ 2025-02-19 148/week @ 2025-02-26 123/week @ 2025-03-05 130/week @ 2025-03-12 110/week @ 2025-03-19 257/week @ 2025-03-26 138/week @ 2025-04-02 326/week @ 2025-04-09

850 downloads per month
Used in imessage-exporter

GPL-3.0-or-later

1MB
17K 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();

    /// Create SQL statement
    let mut statement = Message::get(&db)?;

    /// Execute statement
    let messages = statement
        .query_map([], |row| Ok(Message::from_row(row)))
        .unwrap();

    /// Iterate over each row
    for message in messages {
        let mut msg = Message::extract(message)?;

        /// Deserialize message body
        msg.generate_text(&db);

        /// Emit debug info for each message
        println!("{:#?}", msg)
    }

    Ok(())
}

Dependencies

~30MB
~586K SLoC