Every FKN API is imported into browser code. Cloud, extension, and desktop describe where the work runs, not which client can call it. Cloud APIs are therefore available to browser apps with no extension installed.
Typed placeholders for fetch, sockets, DNS, and storage
Planned; availability checks return false and operation calls throw
cloud.available() reports whether the current JavaScript realm has the FKN message transport. It is not a remote service health check. extension.available() is a point-in-time check and can change after the extension announces itself. desktop.available() is always false in @fkn/lib 0.6.1.
Bare cookieless fetch() prefers the extension when it is exposed. That extension operation is severity 0, so it is granted automatically rather than showing a prompt. Without the extension, the call uses the cloud proxy. Pick cloud.fetch() or extension.fetch() explicitly whenever the egress location matters to your app.
A bare fetch is cookieless by default. Passing credentials: 'include' in the second argument always selects the extension because only that backend can use the target site’s browser session. If the extension is missing, the configured install flow runs and the call rejects rather than falling back to cloud. Credentials set only on a Request object are not used for backend selection in the current release.
A string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. Sets request's credentials.
credentials: 'include',
reason?: string |undefined
reason: 'Load the profile from your existing session',
Bare attachFrame() waits briefly for extension exposure and uses the extension when it shows up. When it does not, the call degrades to the cloud render proxy in every cookie mode with no install prompt: the default maps to the persistent cloud jar, and syncCookies: false to an isolated per-attach jar. The exceptions are lockdown: true and realms without a configured render proxy, which stay on the extension path and surface the install flow. See attachFrame().
Fetch APIs refuse FKN’s own domains (fkn.app, fkn.dev, and their subdomains). The same boundary is enforced in the library, broker, proxy, and extension so direct calls to a lower layer behave consistently.