Signal, in your terminal.

faro is an unofficial, open-source Signal client for people who live in tmux and SSH. It’s keyboard-driven, it looks good, and it never freezes.

▶ See it here, no install brew install harababurel/tap/faro

Unofficial · not affiliated with Signal · AGPL-3.0 · v0.1.10 (2026-11-05)

faro on screen

faro running in a terminal: the conversation list on the left, the Scranton Branch group chat open on the right, an input box below, and a footer reading connected · demo · unreadConversationsScrantonBranch📄●#ScrantonBranch📄1hATTENTION.Unannouncedfiredrillat1500hours.ThisistheStanleyHudson:2announcement.2h●JimHalpert3hPerfect.He'sg…1#FinerThingsClub…4hOscarMartinezOscarMartinez:Mu…StanleyHudson4hYoucan'tannounceanunannounceddrill,Dwight.Porfavor.Don'tmakeitath…edited2hTanaka-san🇯🇵·su…7h追跡番号は発送後に…😂👎Mariam·Cairooff…8hYou:Greetingsfro…DwightK.SchruteIII,Assistant(tothe)RegionalManagerKevinMalone9h@Youfireextinguisherdutyisyours.DoNOTloseit.2h👍MichaelScott10hWhereisit?2h✓✓Prepareaspeech.…newmessagesKellyKapoor💁🏽‍♀️11hDwightK.SchruteIII,Assistant(tothe)RegionalManageralsoयेबातकिसीको…#PartyPlanningCo…13hYou:Whereisit?AngelaMartin:Bei…Thatiswhatthedrillisfor.2hAngelaMartin17hIsee.Kelly'smom20hStanleyHudsonबहुतबढ़िया!खानाबहु…RyanHoward1dDwightK.SchruteIII,Assistant(tothe)RegionalManage…You:I'lltakeal…I'mnotmovingforadrill.1hDwightK.Schrute…1dNo.AndyBernard1dNardDogthanksyo…MessageScrantonBranch📄…PamBeesly1d●connected·demo·3unread↑↓choose·enterwrite·spaceactions·ppin·mmute·hhide·aarchive
faro running in a terminal: the conversation list on the left, the Scranton Branch group chat open on the right, an input box below, and a footer reading connected · demo · unreadConversationsScrantonBranch📄●#ScrantonBranch📄1hATTENTION.Unannouncedfiredrillat1500hours.ThisistheStanleyHudson:2announcement.2h●JimHalpert3hPerfect.He'sg…1#FinerThingsClub…4hOscarMartinezOscarMartinez:Mu…StanleyHudson4hYoucan'tannounceanunannounceddrill,Dwight.Porfavor.Don'tmakeitath…edited2hTanaka-san🇯🇵·su…7h追跡番号は発送後に…😂👎Mariam·Cairooff…8hYou:Greetingsfro…DwightK.SchruteIII,Assistant(tothe)RegionalManagerKevinMalone9h@Youfireextinguisherdutyisyours.DoNOTloseit.2h👍MichaelScott10hWhereisit?2h✓✓Prepareaspeech.…newmessagesKellyKapoor💁🏽‍♀️11hDwightK.SchruteIII,Assistant(tothe)RegionalManageralsoयेबातकिसीको…#PartyPlanningCo…13hYou:Whereisit?AngelaMartin:Bei…Thatiswhatthedrillisfor.2hAngelaMartin17hIsee.Kelly'smom20hStanleyHudsonबहुतबढ़िया!खानाबहु…RyanHoward1dDwightK.SchruteIII,Assistant(tothe)RegionalManage…You:I'lltakeal…I'mnotmovingforadrill.1hDwightK.Schrute…1dNo.AndyBernard1dNardDogthanksyo…MessageScrantonBranch📄…PamBeesly1d●connected·demo·3unread↑↓choose·enterwrite·spaceactions·ppin·mmute·hhide·aarchive

Swipe for palette and themes

Ctrl+P palette · Alt+J/K chats · ↑ pick a message · + react · Enter send

Nothing you type leaves your browser.

faro is a keyboard app. Open this page on a computer to try the live demo.

▶ Watch a 30-second tour

Recorded from the web demo.

Why faro

Never freezes

Network, decryption and storage run off the UI thread, so typing stays instant while messages flood in.

Everything is one keystroke away

Ctrl+P opens one palette for chats, settings, themes, commands and search, and shows the key for each.

Made for SSH and tmux

Copy over SSH (OSC 52), unread count in the tmux title, read receipts that know whether you’re looking, emoji that line up even through mosh.

A chat list you control

Pin, mute (with durations), hide, archive, or show only an allowlist.

Looks the part

Bubbles or IRC layout, 35+ themes with live preview, inline images (kitty, sixel, iTerm2 or half-blocks), voice notes with waveforms.

Install

macOS / Linux (Homebrew)

brew install harababurel/tap/faro

Arch Linux (AUR)

yay -S faro-bin

or faro to build the release from source, faro-git for the latest commit; any AUR helper works.

Debian / Ubuntu (.deb)

curl -LO https://github.com/harababurel/faro/releases/latest/download/faro_amd64.deb
sudo apt install ./faro_amd64.deb

faro_arm64.deb on ARM.

FreeBSD

pkg install faro

The net-im/faro port, maintained by the FreeBSD community.

Prebuilt binary

macOS (Apple silicon, Intel) and Linux (x86_64, ARM64) archives with checksums on the releases page.

From source

git clone https://github.com/harababurel/faro
cd faro
cargo build --release          # binary: target/release/faro

You need Rust via rustup; the exact toolchain is pinned in the repo and rustup installs it on the first build. Building also needs the protobuf compiler and a C toolchain for libsignal and SQLCipher:

Build prerequisites per operating system
OSPackages
Archsudo pacman -S protobuf cmake clang pkgconf openssl
Debian/Ubuntusudo apt install protobuf-compiler cmake clang pkg-config libssl-dev
macOSbrew install protobuf cmake

First run

Works the same whichever way you installed faro. Try it before linking anything:

faro demo   # try it with fake contacts first
faro link   # then link it: scan the QR code in Signal › Settings › Linked devices
faro

How it works, and what to trust

your phoneprimary device Signal serversend-to-end encrypted faro ── presage ── libsignalfaro implements no cryptography ~/.local/share/farohistory & keys · readable only by you links

What it doesn’t do (yet)

A few keys

Some default keys in faro
KeyWhat
Ctrl+PCommand palette
Alt+J/KNext / previous conversation
↑↓Select older / newer message
+React
rReply
Ctrl+FSearch messages
mMute or unmute
Ctrl+P › ThemesSwitch theme, with live preview
?Keybindings
Ctrl+QQuit (or Ctrl+C twice)

All keys and what they do — and every key can be rebound in the config file.

FAQ

Is this an official Signal app?

No. faro is an independent, open-source project. It isn’t affiliated with or supported by Signal.

Do I still need my phone?

Yes. faro links to your account as a secondary device, like Signal Desktop. Your phone stays the primary device.

Is it safe?

faro doesn’t do its own cryptography. It uses presage, which builds on libsignal, Signal’s own library. Messages are end-to-end encrypted exactly as in other Signal clients. Your history and keys stay on your machine, readable only by you. They’re not encrypted at rest yet. The code is AGPL: read it.

Can Signal block me for using it?

Unlikely, but there’s no promise. faro links like Signal Desktop does, and other unofficial clients such as signal-cli have done the same for years. Signal doesn’t support them, though: a change on their side can break faro until it’s updated. Your phone keeps working either way.

Which terminals work?

Any modern one. It’s built and tested in kitty, inside tmux and over SSH or mosh; Ghostty, WezTerm, iTerm2, foot and Alacritty should work too. Rounded bubbles need a font or terminal with Unicode 16 block glyphs; otherwise faro draws bars.

Does it support calls / stories / Windows?

Not today — see what it doesn’t do (yet).

Can I change the keys and colours?

Yes. Every key can be rebound in ~/.config/faro/config.toml. 35+ themes are built in, and you can drop in your own (OpenCode’s theme format).

Who are the people in the demo?

Made-up coworkers at a paper company: an affectionate parody. They’re fake, and nothing you type in the demo leaves your browser.

Is the demo really faro?

Yes. It’s the same Rust code compiled to WebAssembly, with a fake backend instead of Signal.

Does this site track me?

No cookies and no third-party scripts. We count visits with Plausible, which runs on our own server, stores no personal data and uses no cookies. Details in the privacy policy.