Hello friends, many of you have already heard me describe this ongoing project. There have been substantial changes to the code to hopefully improve reliability and responsiveness, but I only have a limited test configuration to work with. I'm asking for more people to test and give feedback
Retichat is another LXMF client but with some added capabilities mainly enabled by an extension to the LXMF Propagation mechanism. Specifically:
- Publish and Subscribe based chat rooms
- True "Apple Push Notification Service" based push notifications in response to propagation messages
- Infrastructure-less group messaging (different from Publish and Subscribe)
App Store link: https://apps.apple.com/us/app/retichat/id6762225314. An Android version is also in the works. Also, importantly, a default RFed instance is used if one isn't specified so that Channels and Push notifications function for testers
Everything is open source and MIT license
-
RFed node - https://github.com/jrl290/RFed
Child libraries (not meant for individual use)
Disclaimer There is substantial AI written code in this project. My first iPhone app was published 15 years ago. It was written in Objective-C and the flagship iPhone at the time was the 4s.
The Design and Scope of Retichat
The aim for Retichat is to provide a low friction user experience similar to Whatsapp or Signal but without central servers of any kind (the beauty of Reticulum). It will obfuscate many of the rougher edges such as announces and store-and-forward configuration. And it will bend the low bandwidth forgiveness of Reticulum in favor of responsiveness expected out of a typical chat app
Public backbone TCP interfaces are hardcoded and randomly selected by the app at default. Multiple paths are tested for responsiveness when a message is sent. Additionally, a default RFed node provided for now. At the same time, interfaces can be manually designated. As can RFed or Propagation node
Lastly, Retichat's goal is adoption, but its purpose is communication readiness under adverse conditions. LoRa will be supported. Voice and video will not be
Details: Group Messaging
The group messaging in Retichat is designed specifically to require no additional infrastructure. As such, a minimal amount of statefulness is added. Specifically:
- an arbitrary group ID that has no meaning outside of the group
- a list of participants who have been invited
- and the annotations of who has accepted the invite (and not explicitly left)
One user starts the group with a specific set of invitees. The invites include the list of invitees. Accepting the invite sends a message to the group designating them an active participant
Each participant is responsible for distributing its own sent messages to every other participant individually. Additionally, for low bandwidth purposes, a participant may ask another participant to distribute its sent message (which that proxy may then pass to another participant). In this way, both fanout and round robin are implemented as is most efficient and most necessary
And that is the scope of group mode in Retichat. Again, spec'd specifically for minimal additional coordination or infrastructure