All Projects → zacstewart → comm

zacstewart / comm

Licence: MIT license
A hypothetical, distributed, encrypted, instant messaging protocol.

Programming Languages

rust
11053 projects
C++
36643 projects - #6 most used programming language

Projects that are alternatives of or similar to comm

Miscord
Facebook Messenger to Discord bridge
Stars: ✭ 225 (+257.14%)
Mutual labels:  messenger
molch
An implementation of the axolotl ratchet based on libsodium.
Stars: ✭ 24 (-61.9%)
Mutual labels:  messenger
telectron
Telegram desktop client [WIP]
Stars: ✭ 19 (-69.84%)
Mutual labels:  messenger
Toxygen
Toxygen is pythonic Tox client
Stars: ✭ 231 (+266.67%)
Mutual labels:  messenger
Swiftybot
How to create a Telegram, Facebook Messenger, and Google Assistant bot with Swift using Vapor on Ubuntu / macOS.
Stars: ✭ 247 (+292.06%)
Mutual labels:  messenger
vue-socials
💬 Social media share buttons and counts for Vue.js
Stars: ✭ 32 (-49.21%)
Mutual labels:  messenger
Node Fb Messenger
✉️ Facebook Messenger Platform Node.js API Wrapper
Stars: ✭ 206 (+226.98%)
Mutual labels:  messenger
bkit
build a messenger bot using HTML
Stars: ✭ 36 (-42.86%)
Mutual labels:  messenger
Tdesktop
Telegram Desktop messaging app
Stars: ✭ 17,508 (+27690.48%)
Mutual labels:  messenger
Vesta
Vesta is a simple decentralized p2p chat group using ruby.
Stars: ✭ 44 (-30.16%)
Mutual labels:  messenger
Pybitmessage
Reference client for Bitmessage: a P2P encrypted decentralised communication protocol:
Stars: ✭ 2,661 (+4123.81%)
Mutual labels:  messenger
Mtproto Core
Telegram API JS (MTProto) client library for browser and nodejs
Stars: ✭ 242 (+284.13%)
Mutual labels:  messenger
golem
Open-source chatbot framework for python developers. Batteries included 🔋🔋
Stars: ✭ 38 (-39.68%)
Mutual labels:  messenger
Ferdi
🧔🏽 Ferdi helps you organize how you use your favourite apps by combining them into one application
Stars: ✭ 4,089 (+6390.48%)
Mutual labels:  messenger
dialogflow-watchnow-messenger
WatchNow FB Messenger bot with DialogFlow & Golang 💬
Stars: ✭ 24 (-61.9%)
Mutual labels:  messenger
React Messenger Customer Chat
React component for messenger customer chat plugin
Stars: ✭ 221 (+250.79%)
Mutual labels:  messenger
async-messenger-mercure
Demo for Symfony Messenger + Mercure
Stars: ✭ 27 (-57.14%)
Mutual labels:  messenger
LaravelMessenger
💬 Simple messaging system for Laravel
Stars: ✭ 83 (+31.75%)
Mutual labels:  messenger
iGap-iOS
iGap Client for iOS Source Code
Stars: ✭ 18 (-71.43%)
Mutual labels:  messenger
qd-messages-ts
No ads, no tracking. Just a lightning fast peer-to-peer cross-platform messenger that doesn’t sell you out.
Stars: ✭ 22 (-65.08%)
Mutual labels:  messenger

Comm

A hypothetical, distributed, encrypted, instant messaging protocol.

Project Goals

  • No centralized server
  • Messages should be stored in the network for some reasonable amount of time until recipient is available
  • It should be difficult for an adversary to silence a participant (prevent them from sending messages)
  • It should be difficult for an adversary to deafen a participant (prevent them from receiving messages)

What the what

  1. Client relays a message to the network
  2. Network nodes store and re-relay messages they receive
  3. Network nodes drop messages that they've relayed for a reasonable amount of time, and a reasonable number of times
  4. Recipient finally gets message, relays acknowledgement
  5. Network nodes drop messages after verifying their acknowledgement
  6. Network nodes re-relay acknowledgement to nodes that need to stop relaying the message

Please read the protocol for a more detailed overview.

Development

comm targets Rust stable (currently 1.30). It depends on protobuf being installed.

Usage

You can fire up a CLI chat client by running

cargo run comm -- $SECRET 0.0.0.0:$PORT [1.2.3.4:$OTHER_NODE_PORT]

Where SECRET is a word that will be SHA1 hashed into your node's address, PORT is the local port you want to run on, and then third argument is the address and port of another node. This other node is a "bootstrap node" and will be your entrypoint into the network. It can be another comm client running without a bootstrap router of it's own.

An interactive CLI will start, and you can send a message to another node by entering its address, followed by a message:

44751799925b964a00bae3863cc4236f9bb8d519 Hi there!

Documentation

Documentation is still forthcoming, but many of the modules have doc comments. I'm still trying to figure out a good way to host rust docs out of GitHub Pages.

Similar Projects

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].