https://github.com/paralin/gmatrix
A practical set of implementations of the Matrix decentralized persistent communication algorithm.
https://github.com/paralin/gmatrix
Last synced: 2 months ago
JSON representation
A practical set of implementations of the Matrix decentralized persistent communication algorithm.
- Host: GitHub
- URL: https://github.com/paralin/gmatrix
- Owner: paralin
- Created: 2016-11-17T15:36:09.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2016-11-17T16:00:57.000Z (over 9 years ago)
- Last Synced: 2025-03-10T22:48:35.425Z (12 months ago)
- Size: 1000 Bytes
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
GMatrix
=======
**GMatrix** (originally GRPC Matrix) is a project to make the [Matrix Protocol](http://matrix.org) suitable for real-world applications.
It uses the same approach, but implements some things differently.
- ProtoBuf and GRPC are used for the RPC calls and messages.
- A compatibility layer is implemented for interop with standard Matrix implementations
- Pluggable storage backends
- Pluggable event callbacks, verification / validation, identity, conflict resolution (Applic)
- Public-key identified clients, X.509 for permissions + verification on default
- CAP Theorem: particular focus on availability and partition tolerance over consistency
- Efficient backfill
The primary intent of this project is to re-imagine Matrix as a platform for data-sync of any kind by designing it with performance and throughput in mind. The current implementations are primarily designed for chat-rooms.
While some inter-op is planned, it is not a priority.
Pluggable Components
====================
All "pluggable" components support third-party implementations of features. This is accomplished by calling the modular implementations one of several ways:
- Starting a sub-process with stdin as a GRPC channel.
- Calling a GRPC service over standard HTTP/2.
Furthermore, pluggable components can be marked as "optional" or "required." This is important for conflict resolution / validation type components, where you may be interested in stopping the server from processing new messages without validation calls returning successfully.