Skip to content
Sven Efftinge edited this page May 2, 2017 · 1 revision

Why Theia?

Theia's goal is to provide a framework for building IDE-like products for the desktop or the cloud (or both). This alone is a unique scope, as existing open-source projects either fall or one or the other side.

Furthermore, we want Theia to be extensible such that entirely new products can be built on top. So instead of a very focused and limited extension mechanism, like provided by e.g. Eclipse Orion or Visual Studio Code, we are looking for something more open and flexible. A Theia app shall be a composition of extensions.

Why TypeScript?

We are convinced that static types are important to develop maintainable software systems. Types are not only important to get better compile-time checks, but they drive advanced language tooling. TypeScript is an excellent language with very good tool support that transpiles to different JavaScript versions. Its community is vital and the adoption rate is impressive. We have been working with TypeScript for a year now and are still very pleased with it.

Why Dependency Injection?

We want to provide a lightweight mechanism for extensions to obtain services from and to provide own ones to other extensions. Also we want to allow extensions to control and replace implementations on a very fine-grained level. Furthermore, DI is a key concept for designing components that can be tested easily.

Why JSON-RPC?

Theia is composed of at least two applications:

  • a frontend app, running in a browser (or electron window)
  • a backend app, running on node.js

Those two need to communicate with each other. We want such communication to work bi-directional, such that the backend can notify the frontend about e.g. file changes. At the same time, we want that communication to be technology agnostic, such that a backend service can be implemented in other languages, too.