Skip to content
home / methods / embeddability
Cross-cutting method

Iframes as the universal composition primitive.

Every container service — terminal, display, files, code editor, browser, SQLite UI — is an iframe-embeddable HTTPS URL. Dashboards are not built on top of infrastructure; they are assembled from it.

One HTML file + iframes = custom infrastructure UI · no SDK · no postMessage

Everything is an iframe srcHTTPS by default — embeds everywhereControl via HTTP, state reflectsAny device, any browser
home / methods / embeddability / dashboard
Dashboard = infrastructure

Don't build a dashboard over your infra. Assemble it from your infra.

Traditional dashboards read the database, poll APIs, render numbers and charts. A Hoody dashboard embeds iframes of the services themselves — live terminals, running displays, file trees you can edit. There's no sync lag because there's nothing to sync.

No polling layer

The dashboard doesn't poll a monitoring endpoint. It embeds the thing being monitored.

Read and act

See a metric spike? Click into the embedded terminal next to it and type `top`. No context switch.

Per-customer, per-project, per-env

Compose dashboards from URLs — any combination is a dashboard.

AI-composable

An LLM can emit HTML with iframe URLs. Custom observability UI, generated on demand.

home / methods / embeddability / control
Control via HTTP

Change the container. The iframe reflects.

No postMessage. No parent-child protocol. An iframe shows a service URL; the service is updated via the HTTP API; the next request the iframe makes picks up the new state. The iframe and the API are the same container.

1

App embeds service URL

Parent page drops an iframe pointing at a container service URL into its layout.

2

App sends a control HTTP request

POST /api/v1/files/upload (or any other API call) — authenticated against the same container.

3

Iframe pulls fresh state

Auto-refresh, SSE, or user interaction triggers a new request. The new file is visible in the iframe.

4

No wrapper protocol

Your app never sends postMessage to the iframe. It just updates the container; the iframe sees the change on its next render.

home / methods / embeddability / devices
Device-agnostic

Iframes render on every browser. Every browser is on every device.

An embedded Hoody dashboard works on a phone. On a tablet. On a TV browser. On a smartwatch. On a VR headset's browser. The embeddability property carries through the entire device landscape because the browser does.

The composition primitive is iframe + HTTPS. Both are universal. That's the only reason device parity is automatic.

home / methods / embeddability / ai-generated
AI-generated UI

An LLM can compose a dashboard from container URLs.

Ask an agent 'build me a health-check dashboard for these three containers.' It emits HTML with iframe tags pointing at the terminal, display, and exec URLs you named. The result is a real, live dashboard in one prompt turn.

1

Agent receives the spec

'I need to monitor three containers: frontend, backend, db. Show the terminal log of each.'

2

Agent emits HTML

Template with three iframe tags pointing at the correct terminal-1 URLs for each container.

3

Serve from anywhere

Paste into a static file, a Notion page that allows iframe embeds, or a dedicated Hoody container running http-3000.

4

Open the URL

Live dashboard. Composed from infrastructure, not from a dashboard product.

home / methods / embeddability / caveats
Honest caveats

Where embeddability hits the browser's limits.

Iframes are a browser primitive. The browser enforces rules on what can and can't be embedded. These are universal constraints, not Hoody-specific — but they matter when you're composing UIs.

X-Frame-Options / CSP

External URLs that set `X-Frame-Options: DENY` or `frame-ancestors 'none'` cannot be embedded. Hoody's own services don't; third-party URLs you embed might.

Mixed content

Embedding an HTTP URL inside an HTTPS page is blocked. Hoody URLs are always HTTPS — works anywhere.

Third-party cookies

Browsers increasingly block third-party cookies. Auth inside embedded iframes may need per-request tokens instead of session cookies.

Third-party storage

localStorage inside an iframe is scoped to the iframe's origin. Cross-iframe state needs to come from the container, not the browser.

home / methods / embeddability / start
Start

Build the dashboard from the infrastructure, not over it.

One HTML file. A handful of iframe tags. Live running containers. That's the full stack.

Embeddability guide

See also — /platform/os for composition inside Hoody, /kit/workspaces for the Workspace runtime, /methods/multiplayer for shared iframe sessions.