Keychat is a chat app, built on Bitcoin Ecash, Nostr Protocol, Signal Protocol and MLS Protocol.
Keychat is inspired by the postal system — stamps, post offices, letters.
Keychat uses Bitcoin ecash as stamps and Nostr relays as post offices.
Senders send messages stamped with Bitcoin ecash to Nostr relays. The Nostr relays collect the Bitcoin ecash, then deliver messages to receivers.
Keychat uses Signal/MLS protocol to ensure message encryption security and meta-data privacy.
The content of the letter can be exposed easily by opening the envelope. Keychat messages are end-to-end encrypted via Signal/MLS protocol, with a unique encryption key generated for each message. Only the sender and receiver can decrypt the message.
The addresses of both parties on the envelope can be tracked. In theory, this problem is solved if they change addresses daily. So Keychat reuses Signal/MLS protocol to update sending and receiving addresses for nearly every message.
Like the postal system, Keychat requires no registration. Users just generate Nostr keys as ID.
Offline Me needs self-controlled IDs and wallets to live in the physical world.
Online Me also first needs self-controlled IDs and wallets to live in the digital world.
Then Me can chat and browse.
In Chat, Me uses the IDs and pays for relays per message with the wallets.
In Browser, Me uses the IDs to log in to Mini Apps and pays in Bitcoin with the wallets.
- Android APK
- MacOS-arm64
- iOS
- GooglePlay: Coming
- Windows-x86_64
- Linux
- Android: >= 12
- iOS: >= 15
- MacOS: >= 13
- Windows: Lack of signature and notary for now, turn off anti-virus software before installation
- Linux:
sudo dpkg -i ./xx.deb
npub1h0uj825jgcr9lzxyp37ehasuenq070707pj63je07n8mkcsg3u0qnsrwx8
Keychat implements the following nips:
- NIP-01: Basic protocol flow
- NIP-06: Basic key derivation from mnemonic seed phrase
- NIP-07: window.nostr capability for web browsers
- NIP-17: Private Direct Messages
- NIP-19: Bech32-encoded entities
- NIP-44: Encrypted Payloads
- NIP-47: Nostr Wallet Connect
- NIP-55: Android Signer Application
- NIP-59: Gift Wrap
- NIP-B7: Blossom Media
[x] sendPayment [x] makeInvoice
https://www.keychat.io/u/xxx
Demo: https://www.keychat.io/u/npub1h0uj825jgcr9lzxyp37ehasuenq070707pj63je07n8mkcsg3u0qnsrwx8
Add a contact
nostr:npub1h0uj825jgcr9lzxyp37ehasuenq070707pj63je07n8mkcsg3u0qnsrwx8
or
keychat://www.keychat.io/u/npub1h0uj825jgcr9lzxyp37ehasuenq070707pj63je07n8mkcsg3u0qnsrwx8
adb shell am start -W -a android.intent.action.VIEW -d "scheme:xxxx"
- nostr. Add a contact, eg:
nostr:npub1h0uj825jgcr9lzxyp37ehasuenq070707pj63je07n8mkcsg3u0qnsrwx8
- cashu. Receive cashu token, eg:
cashu:cashuBo2FteBxxx
- lightning. Pay Lightning Invoice, eg:
lightning:npub1h0uj825jgcr9lzxyp37ehasuenq070707pj63je07n8mkcsg3u0qnsrwx8
- lnurlp. Pay to Lightning address, eg:
lightning:LNURL1DP68GURN8GHJ7UM9WFMXJCM99E3K7MF0V9CXJ0M385EKVCENXC6R2C35XVUKXEFCV5MKVV34X5EKZD3EV56NYD3HXQURZEPEXEJXXEPNXSCRVWFNV9NXZCN9XQ6XYEFHVGCXXCMYXYMNSERXFQ5FNS
git submodule update --init --recursive
dart pub global activate melos 7.0.0-dev.9
melos bootstrap
# build rust lib: packages\keychat_rust_ffi_plugin\README.md
# cd packages/keychat_rust_ffi_plugin
# git submodule update --init --recursive
cd packages/app
flutter devices
flutter run -d xxx
# release
melos run build:ios
melos run build:android
melos run build:macos
# windows
dart pub global activate fastforge
- Nostr Protocol: for delivering and storing messages.
- Ecash Cashu: for paying micropayments to relays (optional), depends on whether relay charges a fee.
- Signal Protocol: for encrypting messages (end-to-end).
- MLS Protocol: messaging Layer Security (MLS) is a security layer for encrypting messages in large group.
- AWS S3: for storing encrypted files.
- Isar DB: a NoSQL database for Flutter for local data storage.
- flutter_rust_bridge: Flutter/Dart <-> Rust binding generator, feature-rich, but seamless and simple.
- melos: Melos is a CLI tool used to help manage Dart projects with multiple packages
- rust-nostr: Nostr protocol implementation, SDK and FFI
Licensed under the GNU AGPLv3: https://www.gnu.org/licenses/agpl-3.0.html