High-level goals

Apps are just JS

The first thing to remember is that apps are, fundamentally, "just JS".

Apps are not react apps, they are just JS. Our own libraries and documentation might push React but it's important to understand that at the end of the day, we need to be able to replace the underlying UI lib without causing a problem. In 5 years time when something new and shiny replaces React, we don't want to have to fight our framework to make a new library.

What this means from an implementation perspective is that the Deskpro framework is JS-framework agnostic. i.e. our framework shall not rely on apps being written in React.

Example

As a JS developer, I should be able to start an app using Create React App or Next.js or Vue etc.

(Of course, our own UI libs are in React, so if someone suddenly decides to use Vue, that would mean they wouldn't get the same "batteries included" experience — but the point remains).

Deskpro APIs are just APIs

Similarly, anything you can do in-app should be exposed by a well-typed API that you can use from anywhere. What this means is just that we shall not rely on things like magic window contexts.

The test of this: You should be able to load the app alone in a browser tab.

(Of course, if the app uses Deskpro APIs then they would have to be mocked or else the app would just break — but the point remains).

Our React-based experience should be batteries-included

We will focus our efforts on making a really greate React experience which will include things like: