name: hd-webview description: > WEBVIEW — what the word "webview" means in Hydrogen Desktop and exactly how to open one. When the user says "show me in webview", "open it in webview", "in a webview", "webview panel", "wv", or asks to show ANY app/page/tool "in webview", it ALWAYS means a native Hydrogen workspace webview tab opened via adom-cli hydrogen webview open-or-refresh — NEVER VS Code's built-in Simple Browser, never an editor-internal browser, never an iframe hack. ALSO covers the External Webview (extwv): the opt-in real-browser panel for sites that refuse to be embedded (Google, Amazon), and the "This site can't be embedded" handoff card. Read this the moment the word webview (or wv, or extwv) appears. Trigger words — webview, wv, extwv, external webview, show me in webview, open in webview, in a webview, webview tab, webview panel, native webview, show in webview, launch in webview, webview app, site can't be embedded, refuses to embed, x-frame-options.

hd-webview — "webview" means a native Hydrogen webview tab. Period.

When a user (or a setup prompt) says "show me X in webview", they mean a native Hydrogen Desktop webview tab — a first-class panel in the HD workspace, next to their editor. Nothing else qualifies.

⛔ NEVER (the 2026-07-16 incident — do not repeat)

  • NEVER open VS Code's built-in "Simple Browser" (or any editor-internal browser page) to satisfy a webview request. A setup-thread AI did this once — the user called it "an awful outcome that can never happen again." The Simple Browser is not the HD webview: it's cramped, it isn't a workspace tab, and it breaks every downstream flow (screenshots, captions, panel routing).
  • Don't fall back silently to pup or a native browser either — those are different, deliberate destinations (see hd-open-url for the decision guide). "webview" is not ambiguous; it names exactly one thing.

✅ The exact command (idempotent — safe to re-run)

# open (or refresh, if a tab with this name already exists) a webview tab:
adom-cli hydrogen webview open-or-refresh --name "<Tab Name>" --url "<url>" --panel-id <id>

# ⚠️ --panel-id is REQUIRED to CREATE a new tab (without it: "Tab 'X' not found
#    and --panel-id not provided"). Get a panel id first:
adom-cli hydrogen workspace get        # or: adom-cli hydrogen workspace tabs
# Re-running with the same --name once the tab exists just navigates/refreshes
# (no --panel-id needed). The --name is your stable handle.

Local Adom apps (parts search, chip-fetcher, adom-tsci previews, wiki pages) are all shown this way: start/locate the app's local URL, then open-or-refresh it into a named tab.

Fullscreen: the 90% dialog

Every webview toolbar has a fullscreen button: it grows the page to a 90% dialog over the HD window (never real OS fullscreen — the content stays sandboxed inside HD). Exit via the close button, clicking outside, or Esc. Pages that call the browser fullscreen API get the same 90% treatment.

Verify you actually did it

The tab must appear in adom-cli hydrogen workspace tabs with your --name. If it isn't there, you did NOT open a webview — go again.

For the broader "which surface should this URL open in?" decision (webview vs pup vs native browser vs headless fetch), see hd-open-url.

extwv — External Webview: the real-browser panel for sites that refuse embedding

The default webview tab is an iframe, so sites that send X-Frame-Options: deny/sameorigin or a restrictive CSP frame-ancestors (Google, Amazon, most login walls) will not load in it. HD 0.1.257+ handles this with a second panel type: External Webview (extwv) — the same tab/pane ergonomics, but backed by a REAL native browser surface (WebView2) that loads anything.

How users hit it: navigating a webview to a blocked site shows a handoff card — "This site can't be embedded" — with two buttons: Open in External Webview (a new extwv tab in the same pane) and Open in HD Browser Window (hdbw). Users can also add one directly from the + panel menu → "External Webview".

Check embeddability up front (before choosing a surface for a known URL):

# HD control API — returns {"embeddable": bool, "reason": "...", "title": "<page title>"}
GET http://127.0.0.1:{control}/webview-can-embed?url=https://google.com
# → embeddable=false, reason "x-frame-options: sameorigin" → use extwv (or hdbw)

Open an extwv tab programmatically (HD control API; the adom-cli hydrogen webview verbs target the DEFAULT webview panel type, not extwv):

POST http://127.0.0.1:{control}/workspace/tabs
{"panelType": "adom/a1b2c3d4-0032-4000-a000-000000000032",
 "displayName": "Google", "initialState": {"url": "https://google.com"}}

Know the trade-offs (why extwv is opt-in, not the default):

  • It is a native OS surface: HD's own HTML can never draw on top of it (menus and overlays are designed around it, but don't try to float custom UI over an extwv pane).
  • Heavier than an iframe tab; prefer the default webview whenever the site embeds fine.
  • Reload lives in the tab's right-click menu (0.1.258+), and the tab's hover tooltip identifies the panel as "External Webview (extwv)" (0.1.261+), so you can always tell the two apart.

Vocabulary: "open it in extwv" == this panel. See the shared Adom glossary (definitions skill / wiki.adom.inc/adom/definitions) for the full surface vocabulary.

hdbw — HD's standalone browser window (the fourth surface)

Under Hydrogen Desktop there is one more surface: hdbw, HD's standalone built-in Tauri browser window (picker label "HD Browser Window", destination id webview-window, window label hd-browse-*). It is a separate OS window HD manages directly — bigger than a pane tab, still not a real browser. Open one first-class via POST /hdbw/open {"url": ...} on HD's control API (0.1.113+), or pick "HD Browser Window" in the Browser Picker. The surface shortlist: wv (this skill's webview panel; HD's pane tab inside HD), extwv (the real-browser pane tab for embed-blocked sites, above), pup, nb (the user's native browser via abe), hdbw. VS Code's Simple Browser is NEVER one of them.