Skip to content

Design Goals

Sumedh Bhattacharya edited this page Jun 17, 2020 · 5 revisions

Introduction

This page describes the general guiding principles using which the Fluid Framework was developed. Its purpose is to provide some background to why certain design decisions were made, and describe the general thinking behind why certain aspects of the codebase were developed. It is by now means definitive or exhaustive, as there are many different areas of the code, from client components, distributed data structures (DDS), hosts & loaders, server deployment and logic, etc., that each require their own nuances. These are, however, good general guidelines to have in mind and consider while introducing any changes.

Goals

  1. Create modular, reusable pieces of client component code that update in a synced, real-time manner
  2. Be platform agnostic. Fluid Frameworks should work with any data storage provider, rendering environment, and platform.
  3. Have an extremely lightweight, easy-to-deploy backend server to relay messages amongst clients
  4. Handle all ordering logic for real-time functionality on individual clients, not the server
  5. Abstract complex real-time logic from client view code using generic, multi-purpose DDS'
  6. Define clean interfaces for components to interact amongst one another, and respect component logic abstraction. Components should not refer to one another's inner DDS'.
  7. Be easy to develop on. Onboarding to Fluid should require minimal initial setup, and tooling should be available to readily create new components.
Clone this wiki locally