A modern desktop application for viewing and searching iChat/SMS message archives.
- Clean Message View: Easy-to-read conversation display
- Global Search: Search across all message files with multi-term support (comma-separated)
- Tag Bubbles: See which search terms appear in each file with visual tag indicators
- Modern Dark Theme: Sleek, eye-friendly interface
- Keyboard Navigation:
- Left/Right arrows: Navigate search results
- Up/Down arrows: Scroll through messages
- Debug View: Raw data inspection for troubleshooting
- Windows Executable: Standalone .exe included in releases
Download iChat Reader.exe from the Releases page - no Python installation required!
# Clone the repository
git clone https://github.com/YOUR_USERNAME/ichat-reader.git
cd ichat-reader
# Run the application (no dependencies to install!)
python ichat_reader.pyRequirements:
- Python 3.8+ (any standard Python installation)
- No pip install required! Uses only Python standard library modules
The application uses only built-in Python modules:
- tkinter (GUI - included with Python)
- plistlib (parse iChat files)
- os, sys, re, datetime (standard library)
- Launch the application
- Click "Select Directory" and choose the folder containing your
.ichatfiles - Files will load and display in the left panel
- Search: Enter terms in the search bar (use commas for multiple terms:
honey, bear, hey) - Navigate: Use Prev/Next buttons or arrow keys to jump between matches
- Switch Views: Click "Clean View" or "Debug View" to change display mode
Easy-to-read conversation display with timestamps and sender names
Search across multiple files with visual tag indicators showing match counts
Raw data inspection for troubleshooting
Note: Screenshots use placeholder data. Your actual conversations will be displayed.
python -m pytest test_ichat_reader.pypip install pyinstaller
pyinstaller --onefile --windowed --name "iChat Reader" ichat_reader.py- Parses Apple's binary plist format used by iChat
- Handles both iChat and SMS/iMessage formats
- Extracts plain text from NSMutableString/NSString objects
- Resolves UID references for nested data structures
This project is licensed under a Custom Source-Available License.
- ✅ Free for personal use
- ✅ Modify and learn from the code
- ✅ Share with others (non-commercially)
- ❌ Cannot sell this software or derivatives
- ❌ Cannot use in commercial products/services
- 🔒 Author retains full commercial rights
The original author retains exclusive rights to:
- Sell this software commercially
- License it to third parties
- Change the license terms in the future
- Make it proprietary or closed-source
See LICENSE for full terms.
For commercial licensing inquiries, please contact: drew@grohaus.org
Apple is a big company with lots of lawyers so to be clear I don't claim any rights to the iChat name or underlying IP . It annoyed me that apple does not provide ulilities to decode their files from systems they not longer operate so that people can still view the contents of those files. I pulled pieces together from a lot of different repositories but I can't rememberr which ones if any had code end up in this commit. If you see your code let me know and I'll add a link to your rrepo here.
I built what I needed so I could go back in time and visit old conversations I had with my wife when we firrst met in college. I hope this tool helps you revisit some of your past converrsations that you may have thought were lost to the sands of time. Happy Hunting. -Drew
- Built with Python and tkinter
- Inspired by the need to preserve and search old iChat conversations