Home · Language Reference · Index · Source code

Semi-Autonomous Client

When there is a , clients may have varying degrees of autonomy from the server.

An example of a client with no autonomy is a terminal, which cannot even display typed characters without them being echoed back from the server. An example of a client with full autonomy is…?

Traditional web applications involve each page being generated on the server, using state stored there, and sent to the client. Thus each interaction depends on a server round-trip. There is still some autonomy as the client can interact with the page in some ways without reloading it.

However, some applications involve high-speed interactions, or may involve manipulating state in a complicated way where page reloads break the editing experience. In these cases, the client must be made more autonomous than a simple backend-rendered application.


When the application needs high-speed interactivity or has complex editing requirements, it cannot depend on the server for every interaction.

An “autonomous” client is a program on a user’s device which is able to function, to some extent, without contacting a server for each interaction. This implies that the client has enough code loaded in order to render different views without asking the server for those views.

In web terms, a “single page application” can be autonomous, but a “multi-page application” cannot be. “Progressive web apps” attempt to increase the autonomy of web applications using service workers, installation, etc. Many desktop applications and native mobile apps are semi- or fully-autonomous. Full autonomy involves local storage of data to make contacting a server completely optional.

Most semi-autonomous clients still need to contact the server to fetch data to display to the client, even if the code to turn that data into a view is already loaded. (This means network outages still become application downtime.)

When building web applications, code-splitting may be applied for efficiency reasons so that not all code needed to render all views is available to the client right away. This reduces autonomy to improve performance and reduce data transfer.

Therefore: give the client more autonomy by managing interactions locally. Load state from the server, manipulate it on the client, then send results back to the server for long-term persistence.


On the web, semi-autonomous applications may be .