Fleet uses a distributed architecture that aims at the simplicity of use for standalone instances, at the same time supporting the following scenarios:
Collaborative development – multiple clients working with the same development environment and interacting with each other.
Remote/cloud IDE – a development environment that is hosted elsewhere, for example, a remote machine, cluster, or a cloud.
Multiple target file systems – developing and running a project that involves multiple machines or containers, for example, a microservices-based app.
The described flexibility is possible by decoupling components that handle specific tasks, like working with file system and providing code intelligence. Such separation of concerns is what makes Fleet different from classic IDEs like IntelliJ IDEA. On the other hand, Fleet is designed to be compatible with existing solutions, should the integration be required.
Fleet architecture consists of the following main components:
Frontend – delivers the UI, parses the files, and provides limited highlighting for supported file types. There can be more than one frontend attached to a workspace, allowing for collaborative development.
Workspace – the component whose main purpose is maintaining the frontends' shared state when there are several of them. It also registers other components to provide information on the available services and APIs.
Backend – a headless service that does the heavy lifting: indexing, static analysis, advanced search, navigation, and the like. Every such operation is initiated by a request from the workspace, which then processes the response and dispatches the data to the components that require it.
As a backend, you can use a headless IntelliJ IDEA or a language server. Note that backends may have different requirements: for example, language servers need to run on the same machine, where the source code is located, as shown in the diagram.
FSD (Fleet System Daemon) – a Fleet agent typically attached to the system where source code and SDKs reside. It is used to build the project, run code, execute terminal commands, and perform other actions in the target environment on behalf of Fleet.