zypher-chat
v3.0.1
Published
Zypher E2EE CLI client
Readme
🚀 Zypher
Zypher is a modern, CLI-first, end-to-end encrypted chat system featuring a lightweight Node.js server and a powerful terminal client.
✨ Features
- End-to-end encryption for DMs & groups (X25519 + AES-256-GCM, Ed25519 signatures)
- Forward secrecy with per-message ephemeral ratchet keys
- Offline messaging with automatic delivery on reconnect
- Secure group invites with encrypted per-member key bundles
- Presence checks & online status
- Ghost mode for instant local data wipe
🗂️ Project Structure
| Folder | Description |
|-------------|--------------------------------------------------|
| client/ | CLI app providing the zypher command |
| server/ | Express + Socket.IO server with SQLite storage |
⚡ Requirements
- Node.js (with
node:sqlitesupport) - npm
- Git (for
zypher server quickstart)
🚦 Quick Start
- Install the CLI globally:
npm i -g zypher-chat - Start a local server daemon:
zypher server quickstart - Add/connect to a server:
zypher new - Start chatting:
Example:zypher <alias> [user]zypher local alice
Already have a server? Skip quickstart and just run
zypher new.
🛠️ Development (From Source)
- Install server dependencies:
cd server npm install - Create a
.envfile inserver/:
OnlyPORT=3000 MASTER_PASSWORD=change-me JWT_SECRET=change-me-too RATE_LIMIT=100 MAX_BODY_SIZE=1mbMASTER_PASSWORDis required; others are optional. - Start the server:
node index.js - Install client dependencies:
cd ../client npm install - Run the CLI from
client/:node index.js help node index.js new node index.js local alice
🖥️ CLI Commands
| Command | Description |
|--------------------------------|-----------------------------------------------|
| zypher server quickstart | Clone, configure, and launch local server |
| zypher server stop | Stop the local daemon |
| zypher server status | Show daemon status |
| zypher new | Add a server and register/login |
| zypher <server> [user] | Open E2EE chat on a saved server |
| zypher settings | Manage servers, accounts, and ghost mode |
| zypher help | Show help |
💬 Chat Commands
DMs
/chat <name>— Switch to a DM/chat @group— Switch to a group/who— Show current recipient/status— Online status for current recipient/keys— Show key fingerprint/groups— List your groups/inbox— Read unread messages/ghost— Wipe local data and exit/quit— Exit
Groups
/chat <name>— Switch to a DM/chat @group— Switch to another group/members— List members with online status/status— Show group online count/invite <user>— Invite a user to the group/inbox— View unread messages from all chats/leave— Leave the current group/rename <new-name>— Rename the group (if permitted)/kick <user>— Remove a user (if permitted)/promote <user>— Grant admin rights (if permitted)/demote <user>— Revoke admin rights (if permitted)/ghost— Instantly wipe all local data and exit/quit— Exit the chat client
⚙️ Configuration & Data
- Client config:
~/.zypher/config.json - Quickstart server config:
~/.zypher/server-config.json - Server data:
server/zypher.db(or next to config ifZYPHER_CONFIGis set)
📝 Notes
- The server requires
MASTER_PASSWORD(or a config file withmasterPassword) to start. - Security: This project has not been formally security audited. Review the code before relying on it for high-stakes use. (tho i think it's pretty solid)
License
Zypher is licensed under the MIT License. See LICENSE for details.
Disclaimer
Zypher hasn't been formally security audited. Review the code before using it for anything high-stakes. The crypto is standard and the implementation is small enough to read in an afternoon.
Zypher is free and open-source. If you find a bug or want to contribute, check out the GitHub repo!
Zypher was made for people valuing privacy and simplicity not for illegal purposes. Don't be a jerk.
Feel free to fork it and modify it for your needs, but please don't use it to do bad things. I'm not responsible for how you use it.
