grove

Embedded browser

A real web browser inside the editor area — for PRs, docs, and rendered HTML/SVG/PDF without leaving Grove. Each browser tab is a native OS webview (WKWebView on macOS), not an iframe: cookies, history, and JavaScript all behave like a real browser, while Grove draws its own chrome — back, forward, reload, URL bar, bookmark — above it.

Why not an iframe

An iframe can't show cross-origin sites with cookies and is trivially blocked by X-Frame-Options. A native webview is a real browser pane; the trade-off is that it's an OS-level layer, which Grove's UI carefully positions and yields to (a floating chat, for example, carves out its corner rather than disappearing behind the page).

Ways a browser tab opens

  • The new-tab picker (Alt+N) → Browser tile.
  • Web links anywhere — chat output, markdown notes — open in a Grove browser tab by default (Settings → General). Shift-click always escapes to your OS browser.
  • HTML / SVG / PDF files preview rendered in-tab by default, with a source toggle — right-click in the file tree for "Open in browser."
  • Saved links in the workspace sidebar open in a tab; dragging a browser tab onto the sidebar saves it as a link.
  • Cmd-click / target=_blank inside a page opens a new Grove browser tab instead of an OS popup.

Behavior

  • Browser tabs live in the same tab strips as files and terminals — drag them between panes, split them, switch away and back without reloading the page.
  • Tabs persist across app restarts (the URL reopens).
  • Each Grove window owns its browser tabs independently.

Current limitations

  • Tab labels show the URL hostname (no page-title capture yet).
  • No find-in-page, zoom, favicons, devtools, or download UI in the chrome.
  • Moving a browser tab to another window reloads the page (the webview can't be reparented).