Text, in a terminal and on Android
A chat where you already work, and an app for your phone on the same engine. No images, no link previews, no formatting: less to leak, less to exploit.
not audited · experimental
Private messages, in your terminal and on your phone.
End-to-end encrypted, text only, no accounts. You are a key pair and a nickname you choose; the server only ever sees ciphertext.
contacts
! alice·36335
● bob2
? carol·58121
+ add≡ menu
alice·36335 ! not verified (Ctrl+F)
alice·36335 2m
did the invite work?
you now
yes, comparing safety numbers now ✓
› see you at 8
● online via Tor you^P menu ? keys ^K lock
A chat where you already work, and an app for your phone on the same engine. No images, no link previews, no formatting: less to leak, less to exploit.
No phone number, email or name. Your identity is a key pair made on your device, plus a nickname only your contacts see.
The relay passes along envelopes it cannot open. Seizing it gives ciphertext and public keys, nothing more.
Olm from vodozemac: an X3DH-style handshake and the Double Ratchet, the design behind Signal and Matrix.
One switch hides your IP address from the relay and your provider. Where Tor is blocked, obfs4, webtunnel or snowflake bridges get through. No separate Tor install.
Messages wait on the relay, encrypted, for up to 14 days until your contact comes online.
From 5 minutes to a week, per chat. Or keep a chat in memory only, never on disk.
A second password that silently erases everything and shows a fresh install.
Keys leave memory after 5 idle minutes, or at once with Ctrl+K.
Back up your identity and restore it on a new device; the old one is wiped without telling anyone.
Compare 60 digits with a friend once and rule out anyone in the middle.
Strangers wait until you accept. Block, reject or report to the relay operator.
Each invite works for one person. Revoke the unused ones, or renew a public invite to stop the old link.
Talk to someone from a separate identity of your own: other keys, another name. Contacts cannot link you, and over Tor neither can the relay.
Find anything in a chat. Nothing is indexed or sent anywhere.
The same engine and protection on your phone: Tor, the duress password, no Google services. Wake-ups through UnifiedPush if you want them.
Click, scroll, right-click for actions. The same light and dark colour themes in both apps.
One small binary with SQLite. Run it on any server, with an onion address if you like.
The goal is not “impossible to break” but “breaking the server is pointless”.
Send your invite, a line starting with termchat:, by any channel. It holds public keys and a code that works once.
Compare the safety number in person or by phone. Same digits: nobody is in the middle.
Messages travel encrypted through the relay, with a new key for every message.
With Homebrew
brew install prophecy1345/tap/termchatOr with one command
curl -fsSL https://raw.githubusercontent.com/prophecy1345/termchat/main/scripts/install.sh | shIn PowerShell
irm https://raw.githubusercontent.com/prophecy1345/termchat/main/scripts/install.ps1 | iexOr download the .zip, open it and double-click termchat.exe.
Download termchat-…-android-arm64.apk from the releases page and open it; Android asks once to allow installs from your browser. No Google services needed. For messages while the app is closed, install ntfy and turn on wake-ups in the app's settings.
Download the archive for your system from the releases page, check it against SHA256SUMS and run termchat.
Then type termchat. The setup screen is already filled in with the public relay.
The relay is one binary next to termchat.app in every release: SQLite, rate limits, an optional onion address. Your friends use your server; nobody else needs to know.