Files
noise/README.org
T
jbrechtel 8d820432ff fix: use correct signal-cli default port 8080 and robust connectivity check
- Change default noise-signal-cli-address to port 8080 (signal-cli's --http default)
- Replace getVersion (not a valid JSON-RPC method) with noisePing probe
- noise-rpc-check now returns t on any valid JSON-RPC response
- Update README to reflect correct default port
2026-06-10 10:44:39 -04:00

3.9 KiB

Noise

Noise is a Signal Messenger client in Elisp for Emacs powered by https://github.com/AsamK/signal-cli

Its ultimate goal is to provide a fast and efficient user interface for Signal chats.

Tech stack

The tech stack is Elisp and SQLite (for storing conversations)

Setup

The project assumes a working installation of signal-cli and interfaces with that via JSON-RPC.

Dependencies

For SQLite access we use this library - https://github.com/pekingduck/emacs-sqlite3-api

We communicate with signal-cli via JSON-RPC over HTTP on localhost port 8080 by default but this can be configured by specifying noise-signal-cli-address

User Experience

We follow Emacs conventions for keybindings with the addition of evil support out of the box. When evil compatibility is enabled then we provide a modal interface for searching conversations/contacts, creating conversations, sending messages, etc.

User Interface

See the file signal-emacs-ui.html for user interface mockups we're targeting.

Installation

signal-cli

Install signal-cli and start the daemon in JSON-RPC mode:

  # Install signal-cli (example using the official tarball)
  wget https://github.com/AsamK/signal-cli/releases/latest/download/signal-cli.tar.gz
  tar xf signal-cli.tar.gz

  # Register or link your device
  signal-cli link -n "emacs-noise"

  # Start the daemon on default port 9128
  signal-cli daemon --receive-mode=manual

emacs-sqlite3-api

Noise requires the emacs-sqlite3-api library for SQLite access. Install it with your package manager of choice, then set up Noise itself.

Noise Package

Below are recipes for several popular Emacs package managers.

elpaca
  (use-package noise
    :ensure (noise
             :host github
             :repo "git.roo.lol/jbrechtel/noise"
             :protocol https)
    :config
    ;; Optional: set a custom signal-cli address
    ;; (setq noise-signal-cli-address "http://localhost:8080")

    ;; Start Noise automatically
    (noise-mode 1))

Or, if you prefer the elpaca recipe directly without use-package:

  (elpaca (noise :host github
                 :repo "git.roo.lol/jbrechtel/noise"
                 :protocol https))

  (require 'noise)
  (noise-mode 1)
straight.el
  (straight-use-package
   '(noise :type git :host github
           :repo "git.roo.lol/jbrechtel/noise"
           :protocol https))

  (require 'noise)
  (noise-mode 1)
Quelpa
  (quelpa
   '(noise :fetcher github
           :repo "git.roo.lol/jbrechtel/noise"))

  (require 'noise)
  (noise-mode 1)
Manual / package-vc-install (Emacs 29+)
  (package-vc-install "https://git.roo.lol/jbrechtel/noise")

  (require 'noise)
  (noise-mode 1)
Manual clone
  git clone https://git.roo.lol/jbrechtel/noise ~/.emacs.d/manual-packages/noise

Then in your init file:

  (add-to-list 'load-path "~/.emacs.d/manual-packages/noise")
  (require 'noise)
  (noise-mode 1)

Usage

Once signal-cli is running and Noise is installed:

  • M-x noise-mode — toggle the Noise client (opens the chat list)
  • M-x noise-check-connection — test connectivity to signal-cli

Keybindings

Chat list (signal buffer)
Key Action
n Next chat
p Previous chat
RET Open selected chat
m Mark chat as read
g Refresh chat list
/ Filter chats
q Quit chat list window
C-x b Switch conversation (minibuffer)
Minibuffer switcher

M-x noise-switcher (or C-x b from the chat list) opens a fuzzy completion interface showing all conversations and contacts. Start typing to narrow, then press RET to open the selected conversation.