Skip to main content

Export and analyze iMessage conversations from macOS SQLite database

Project description

iMessage Wrapped

Export and analyze your iMessage conversations from the macOS SQLite database.

Quick Install & Run

pip install imessage-wrapped
imexport analyze

🌐 Web Sharing

Share your iMessage Wrapped with friends via a web dashboard

Quick Start

imexport analyze

That's it! By default, the command will:

  1. 🔄 Auto-export your messages (if not already exported)
  2. 📊 Analyze your messaging patterns
  3. ☁️ Upload anonymized statistics
  4. 🔗 Give you a shareable URL like: https://imessage-wrapped.fly.dev/2025/abc123xyz

Want to see full details in the terminal instead? Use imexport analyze --no-share

Features

Dashboard - Interactive visualizations of your messaging patterns
Easy Sharing - One command to upload and get a shareable link
Secure - HTTPS, encrypted database
Deploy Anywhere - Fly.io ready (free tier available)

🔒 Data Privacy

Your message content NEVER leaves your computer.

By default, we only upload aggregated statistics to create your shareable link. Here's exactly what is and isn't uploaded:

✅ What IS Uploaded (Statistics Only)

  • Counts: Total messages sent/received, tapbacks given/received, attachments, etc.
  • Averages: Message length, response times, punctuation usage
  • Distributions: Hour of day, day of week, month patterns
  • Emojis: Which emojis you used and how often
  • Dates: Your busiest messaging days, streak lengths
  • Anonymized Identifiers: Contact identifiers are SHA256-hashed (e.g., phone_a3b2c1d4e5f6)

❌ What is NOT Uploaded (Stays Private)

  • Message Text: No actual message content is ever sent
  • Contact Names: All names are stripped out before upload
  • Phone Numbers/Emails: Original identifiers are one-way hashed
  • Conversation Content: No snippets, samples, or quotes
  • Attachments: No photos, videos, or file content
  • Personal Info: Nothing that could identify you or your contacts

Usage

As a Library

from imessage_wrapped import MessageService, Exporter

service = MessageService()
data = service.export_year(2025)

exporter = Exporter()
exporter.export_to_file(data, "messages_2025.json")

See example_usage.py for a complete working example.

As a CLI

After installation, use the imexport command:

# Export current year (default)
imexport export

# Export specific year
imexport export --year 2024

# Custom output path
imexport export --output my_messages.json

# Custom database path (for testing)
imexport export --database /path/to/test/chat.db

# Compact JSON (no indentation)
imexport export --indent 0

# Analyze and share (default behavior)
imexport analyze

# Analyze with full terminal output (no sharing)
imexport analyze --no-share

# Show help
imexport --help

Alternatively, run without installation:

python -m imessage_wrapped export --year 2024

CLI Commands:

  • imexport export: Export iMessage conversations to JSON
  • imexport analyze: Analyze and share your wrapped (auto-exports if needed, use --no-share for full terminal output)

Requirements

  • Python 3.10+
  • macOS with Full Disk Access permission
  • rich library for terminal output

Installation

Install in Development Mode

pip install -e .

This installs the package and creates the imexport command.

Install Dependencies Only

pip install -r requirements.txt

macOS Permissions

This application requires Full Disk Access to read the iMessage database:

  1. Open System Settings
  2. Go to Privacy & Security → Full Disk Access
  3. Add Terminal or your Python application
  4. Restart the application

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

imessage_wrapped-0.1.6.tar.gz (22.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

imessage_wrapped-0.1.6-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

File details

Details for the file imessage_wrapped-0.1.6.tar.gz.

File metadata

  • Download URL: imessage_wrapped-0.1.6.tar.gz
  • Upload date:
  • Size: 22.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for imessage_wrapped-0.1.6.tar.gz
Algorithm Hash digest
SHA256 d8c7208b7dbef4657382a1184c45f8e3c7703a63e9308738fe114a8b7dfa62b1
MD5 21a9c0c6072047d89c85902a71a4afe9
BLAKE2b-256 cf55fcd435552f6bb77709fe42c131a678783240112c44fd446e48b636dc4d58

See more details on using hashes here.

File details

Details for the file imessage_wrapped-0.1.6-py3-none-any.whl.

File metadata

File hashes

Hashes for imessage_wrapped-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 2e7b6ac0ddacfce3cb4f64b56d666fefcfcdaddc4301ac380a6e78da1619f3f7
MD5 296ee894feeaeca153241628587a5731
BLAKE2b-256 e0e68f450631b64f0d3c22ae928ee255cfafc24c66aa581c371894b1ba0f5b90

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page