Decentralized communications among apps

As suggested by @Ryan I want to have some feedback from you in general and ( @jude @hank ) about the possibility of getting a grant for our need to improve the decentralized communications among apps.

For our app Paradigma CrossCheck (https://crosscheck.paradigma.global/) we needed different types of communication messages between users or between the user members of a group. Like sharing a private document, attaching files to that document, digital signing a document, exchanging chat messages associated with a document, among other similar actions. Each document is by itself independent of the rest so it is private, only the allowed users can “understand” what it is written and can interact. The functionality works as we wanted, but it can be improved especially if we scale the number of users.

We did not use Radiks because it was too dependent on a single server and it was not exactly what we wanted initially.

After some hundreds of user tests and some real user experience of the app, we would like to restudy the social communications architecture and mechanism that was built, redesign the architecture, including some scaling better considerations and build a more generic solution for the communications need that can be used by the community.
Any input or ideas, welcome.

2 Likes

I still think that matrix solves the decentralized communication problem in the same way as gaia solves the decentralized storage problem.

Each user can bring their own service provider.

I have integrated matrix communication into OI Calendar for event reminder notifications, as well as into Animal Kingdom to send messages to users that they have been added to a kingdom. What is nice about all this is that the user only need one app (the matrix client app) to consume all the messages across all apps.

There is also a (non-stacks) collaborative note editing app using matrix.

Matrix comes with a js library and other tool support. Users can choose between their favourite client. There are efforts to bring the chat server even to the client…

Stacks users can use chat.openintents.org to try communicating with their stack name.

It is a similar concept to matrix, but without a matrix server. The server side are the GAIA stores. The dapp is access through the webserver but the interaction and the data are done at the web explorer and the GAIA server.

The objective to have embedded in the platform is to facilitate the onboarding.

Using gaia storage for communication seems not the right way as the gaia protocol is not made for 1) real-time updates 2) synchronization between different users 3) handling network disruption

If you want these properties you will end up in something like matrix. Users own their chat in the same way they own their storage.

Embedding in the platform would mean a definition of chat provider in the profile. That is all an app needs to know. Using the app private key enables the app to authenticate to the chat server and act on behave of the user. The stacks id is the chat address that the app can use to send the user a notification or message.

We need a klein matrix to be deployed the same way as GAIA storage. To expect a user to deploy that server functionality is to restrict the user base. Something we have learned of this process of developing apps in a decentralized way is that we need a service similar to the mentioned matrix. But it is not only that, as the chat functionality for our case is just a small part of the whole solution.
There have been several developments in this area of integration services, trying to be the glue between applications. Like the ones from Microsoft, Oracle, Kamel, MQseries, rabbitmq, etc.
In the case of our Stacks Ecosystem we need one to facilitate the communications with the nodes, but it has to be decentralized.
Seeing it rfom the GAIA perspective, I like the way that a standard online service as S3 is being used. It is assuring scalability as the Cloud service providers can scale that service easily.
We have to study this soon. That is why we are interested in conducting this effort,

Not sure I understand all the requirements.

Users can choose from matrix service providers (element.io, chat.openintents.org, …) in the same way they choose an email service provider or a gaia storage provider.

Matrix comes with federation to talk between nodes, it is very decentralized.

The requirements are broader than the chat messages. Probably for our dapp, a more open way to chat could be something like matrix.
For the rest of the requirements, we need something different. Like messenger servers as publish/subscribe way to do it. As the style of mqseries line, Kamel, RabbitMQ, Apache Kafka.
So we could, establish an additional server to the GAIA as a Messenger server based on those structures.

Publish/subscribe channels can be realised through rooms with managing permissions.

Matrix as a protocol is more than chat. Message formats can be adapted to your requirements.

I try to understand whether we can avoid to require the user to own another type of server (apart from gaia and communication).

Update: See for Matrix and IoT: https://matrix.org/iot

Looks like that a message type of server publish/suscribe should be in the Stacks plaform. Other functionalities like receiving streams of data from different sources like IoT devices, monitoring, notifications, messages, or data from other users, documents, email, among other info.
Now which one to use, and how to use it that could be a part of the selection of the work to be done.

2 Likes