One page, then the owners.

A screen is an HTML document plus a small script. The script calls a verb. DataProvider is the only path to HTTP, and Interceptor is the only fetch. LiveProvider owns the socket and does not go through that fetch. Both paths publish an event. Bind paints the HTML that was already on the page.

HTML page

The document for this URL. English, links, and fields live here. Navigation is a real link.

Page script

A gesture calls a verb. The script subscribes. It does not call fetch, and it does not construct a WebSocket.

DataProvider

One resource. load, create, save, remove. SessionProvider is a DataProvider whose payload includes roles.

Interceptor

The only fetch. A request hook sets a header. redirectOnStatus sends 401 and 403 to HTML pages.

HTTP

The API. The app owns the JSON. The kit does not ship a schema.

LiveProvider

The socket for a live page. connect, send, close. A send while the socket is down is dropped.

WebSocket

Not fetch. Credentials go on the socket URL, or in the first message. Interceptor does not see this traffic.

Same event

A live message with data replaces the payload. There is no merge and no client store beside the provider.

subscribe

data, status, and error. One event for this page. Widgets hear it through Pub/Sub. They do not ask the network themselves.

Bind

bindText, bindField, and bindList write the DOM. bindField is two-way on a top-level key. Submit still calls create or save.

The same HTML page

The paint lands in elements that were already in the document. First paint does not wait on JSON.

HTTP goes down the left column. The socket goes down the right. Both end in subscribe, then bind, then the same page.