A desktop app for browsing, searching, and exporting iMessage history locally on macOS.
Stack: Electron + React + FastAPI + SQLite
git clone <repo-url>
cd IMSGArchiver
cp .env.example .env
npm install
cd frontend && npm install && cd ..
python3 -m venv backend/venv
source backend/venv/bin/activate
pip install -r backend/requirements.txtRun in two terminals:
# Terminal A
npm run dev
# Terminal B
npm run start- Archive conversations from local iMessage data.
- Explore chats and messages in a desktop UI.
- Export chat data to CSV, JSON, or Markdown.
- View conversation and global analytics.
Implemented screens and interactions:
- Dashboard: pulls
/stats/globaland/chats/recent, shows KPI cards and recent chat list. - Messages: searchable chat list using
/chats/recent?search=..., selectable conversation view with/chats/{guid}/messages. - Analytics: global stat cards plus a chart built from
/stats/global. - Media: chat export workflow with format selector and action buttons calling
/chats/{guid}/archive.
UI states implemented across these pages: loading, API error, and empty-result handling.
- macOS (required for
~/Library/Messages/chat.dbaccess) - Node.js 18+
- Python 3.10+
npm run build
npm run distAdditional macOS targets:
npm run dist:mac
npm run dist:unsigned
npm run dist:signed
npm run dist:notarizedBuild output: release/.
Use .env.example as the source template:
cp .env.example .envBackend environment variables are defined in backend/src/config.py and documented in backend/README.md.
.
├── electron/ # Desktop main/preload code
├── frontend/ # React UI
├── backend/ # FastAPI service + archive engine
├── scripts/ # Build/install/utility scripts
├── docs/ # Stable project docs + ADRs
└── assets/ # App icons and branding
- Backend details:
backend/README.md - Frontend details:
frontend/README.md - Contribution guide:
CONTRIBUTING.md - Security policy:
SECURITY.md - Code of conduct:
CODE_OF_CONDUCT.md - License:
LICENSE - ADRs:
docs/adr/
Grant Full Disk Access to:
- Terminal (development)
- Archiver app (packaged builds)
Path: System Settings → Privacy & Security → Full Disk Access.
- Confirm
python3points to environment with dependencies installed. - Confirm no process is already bound to
127.0.0.1:8000.