[Work In Progress!!] Ephemeral chats over encrypted TCP streams for the Scuttleverse
Built with <3 by @corlock
What it do
Scuttle-chat is a p2p chat application in a terminal UI. It makes use of Scuttlebutt's identity system for its public key infrastructure, and attempts to resolve SSB aliases/usernames of peers via your local SSB database.
- LAN based peer discovery (via UDP broadcast, akin to SSB's peer discovery but on a different port)
- Identities are verified with Secret Handshake
- Chats are directly peer-to-peer, encrypted using SSB's BoxStream bulk encryption protocol
- Chat history persisted over entire application lifecycle (independent of connection dropouts)
- Improve scroll behavior in chat window
- Source keypair from ~/.ssb/secret
- Improve debug log / window
- Add CLI arguments for customization (debug info, custom port selection, etc.)
- Resolving of username/aliases from local SSB database when available
- Clean shutdown (goodbye message to all open chats)
- Update "available peers" when peers go offline
- Ability to manually set unverified username on startup for non-scuttlebutt users
- Add cursor support
- Integrate with ssb rooms
Install & Run
Build & run via Cargo. Make sure you have Rust and Cargo installed.
cargo build cargo run
Scuttlebutt is really good at a bunch of things. Its biggest win is arguably its social graph, which creates a decentralized trusted network of public keys. In no other ecosystem do you have a fully decentralized Public Key Infrastructure where the trust signals that "Alice" is "Alice" come purely from her own history of messages, media and posts, combined with the trust signals from other trusted friends following Alice.
Today, if users of Scuttlebutt want to chat through means other than Scuttlebutt itself, they lose all verification of the identity system that SSB relies on. Wouldn't it be nice to have realtime communication tools (chat, p2p video/audio calls, etc.) that make use of Scuttlebutt for its identity and peer discovery, but do their own communication out-of-band of Scuttlebutt's main "feed based" architecture for propogating messages?
This project serves as an MVP for experimenting with these ideas.