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=_blankinside 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).