grove

Embedded browser

A real web browser inside the editor area — for PRs, docs, dashboards, 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 sites that set X-Frame-Options. A native webview is a real browser pane, so the pages you need — GitHub, dashboards, localhost dev servers — actually work.

Ways a browser tab opens

  • The new-tab picker (Ctrl+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 — or right-click in the file tree for "Open in browser."
  • Saved links in the 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.