A full-featured Signal messenger client for Emacs, built on signal-cli's JSON-RPC interface with local SQLite persistence for message history and full-text search.
sgn is a fork of signel by Keenan Salandy.
sgn lets you send and receive Signal messages without leaving Emacs. It communicates with a signal-cli daemon over JSON-RPC, persists all conversations in a local SQLite database with FTS5 indexing, and renders chat buffers in a telega-style layout with message grouping, inline images, and text properties for point-based commands.
The package covers the core Signal messaging workflow: sending and receiving text, images, stickers, and voice notes; reacting to, quoting, editing, and deleting messages; creating and voting in polls; pinning messages; managing groups and contacts; and searching across your entire message history. A dashboard buffer provides an overview of all conversations with unread badges, last-message previews, and pinned chats.
sgn also supports importing your existing message history from Signal Desktop via its SQLCipher database, so you don't lose context when switching to an Emacs-based workflow.
Requirements: Emacs 29.1+ compiled with SQLite support, and signal-cli v0.14+ with a registered Signal account.
(use-package sgn
:vc (:url "https://github.com/benthamite/sgn"))(use-package sgn
:ensure (:host github :repo "benthamite/sgn"))(use-package sgn
:straight (:host github :repo "benthamite/sgn"))No external Emacs package dependencies are required --- sgn uses only built-in libraries.
(use-package sgn
:vc (:url "https://github.com/benthamite/sgn")
:config
(setq sgn-account "+15550000000")) ;; your Signal phone numberThen:
M-x sgn-start--- initializes the database, startssignal-cli, and opens the dashboard.M-x sgn-chat--- pick a contact or group to open a chat buffer.- Type your message and press
RETto send. - Move point to any message and press
rto react,qto quote-reply,eto edit, ordto delete.
For a comprehensive description of all user options, commands, and functions, see the manual.
sgn is licensed under the GNU General Public License v3.