0x4d4f5448.systems Pointing to nothing

Federated Chatting System

This is an idea for the specification for the FCS protocol, it has not been accepted by the team. Written by Klara Bohringer.

[ REJECTED ] Comments: poorly thought out federation with no detail on how it should be handled.

Abstract

This protocol is designed to facilitate standardized communications between discrete servers (referred to henceforth as 'instances' to minimize confusion) as part of the Catsup platform. Unlike many similar federation protocols, it has a scope limited to real-time communications and associated metadata; it is not suitable for usage with any other synchronization paradigms. This protocol does not rely on web technologies, instead relying primarily on TLS connections paired with CBOR.

Basic constructs

Objects

User

A user is an object containing a user's identity, separated into the following fields:

Groups

A group is an object designed to organize channels, they are always hierarchical with all groups belonging to the root group, which is the only group by spec permitted to not have a parent, and which must always both prevent invite creation and prevent user joining. The group object contains the following fields:

Channels

Unlike in other similar systems, channels under FCS are quite literally just message stores. They have no name, they have no data other than an ordered list of messages. Client-side, a group containing a channel should be displayed as a channel with the group's properties.

Messages

Events

An event is a data structure used for synchronization between instances. Any federated action that changes server state is considered an event, with the specification laying out the following:

Each of these event types has sub events.

User update

User update events are split into the following sub-types:

Channel

Channel update events are separated into the following sub-types:

[TBD: TYPING STATUS?]

Group

Actions

Establishing Federation

An instance is considered to be federating with another when it sends regular messages from a given input stream (can be messages, user data updates, etc). Federation may be established in one way, by a user from instance A joining a group hosted on instance B. Once this connection is established, all events originating from that group are relayed to the federated instance via TLS.