iMessage in Emacs

The why

Regular readers know the pattern by now: if something can be done in Emacs, I will eventually do it in Emacs.

Then why not have my iMessages living here as well?!

So I made timu-imessage – a package to read and send iMessages without leaving Emacs. Well… I told Claude Code what I wanted.

What does it do?

  • A chat list with your entire message history, unread counts included.
  • Conversation buffers that update live as messages arrive – with tapbacks, threaded replies and inline images.
  • Full-text search across every message you ever received, in milliseconds.
  • Sending from the minibuffer.
  • Org integration: a single key captures the message at point with a link back to it.

It reads straight from the Messages database on your Mac. Sending goes through a small companion Shortcut.

Installation

Clone the repository, then:

(use-package timu-imessage
  :load-path "/path/to/emacs-imessage"
  :commands (timu-imessage timu-imessage-search timu-imessage-doctor)
  :bind (("C-c i i" . timu-imessage) ;; or whatever keybindings you prefer
         ("C-c i s" . timu-imessage-search)))

You need Emacs 29.1+ with built-in SQLite, Full Disk Access for Emacs and the companion Shortcut from the shortcuts/ directory in the repo – double-click, confirm, done.

My favorite part: M-x timu-imessage-doctor checks all of the above for you and even opens the right System Settings pane for anything missing.

Usage

M-x timu-imessage opens the chat list, RET opens the conversation at point. In a conversation:

Key Action
c Compose in the minibuffer and send
a Open attachment of the message at point
i Toggle inline images
o Org-capture the message at point
g Re-render from the database
q Quit

Bottom line

Does this thing really need to exist? No. Is it really cool, that I can prompt this in a few hours combined though? Damn right it is.

I have been using this for my messages for a little while now and it works like a charm.

Bonus: This beeing on a Mac and pulling from the Messages.app db, I get SMSs in here as well.

Feel free to give it a spin and give me some pointers!