Embedded Browser
Research interrupts writing. That’s the whole problem. You’re three paragraphs into a scene, you need to check whether a specific plant can grow in a specific climate, you alt-tab to a browser, you type the search, you get a result, and forty-five minutes later you’re reading a Wikipedia article about volcanoes and you’ve completely forgotten what scene you were writing. Ishvana’s embedded browser exists to collapse that interruption. You don’t leave the app to do research. The browser lives inside Ishvana as a native panel, and the research you do in it flows directly into the Legendry, your smart bookmarks, and your Lagan chat — without the context switch that kills your scene. It’s not a replacement for your main browser. It’s the research surface you use while you’re writing.
The browser is built on Electron’s native webview, which is Chromium under the hood. Everything Chromium can do (modern HTML/CSS/JS, streaming media, JavaScript-heavy apps), the embedded browser can do. The difference is the surrounding UX — you’re in Ishvana, not in Chrome, and the tools around the browser know about your writing project.
What the browser is
Section titled “What the browser is”At its core, the browser is a single-tab Chromium-based webview that lives in the Research panel. You can navigate to any HTTP or HTTPS URL, click through links, use forms, watch videos, sign into sites (if you’re okay with the browser storing those credentials), and do anything you’d do in a normal browser with the exception of opening multiple tabs.
One-tab-at-a-time is intentional. The whole point of embedded browsing is to reduce the context-switching that happens when your browser is covered in tabs. You open a page, you read it, you extract what you need, you move on. If you find yourself wanting multiple tabs open simultaneously, that’s a signal that the work you’re doing is bigger than a single research interrupt and should happen in your external browser.
The toolbar
Section titled “The toolbar”The browser has a toolbar across the top with:
- Back button. Go back to the previous page.
- Forward button. Go forward to the next page.
- Reload button. Reload the current page.
- Stop button. Cancel a page load in progress.
- Home button. Return to the Bookmarks Dashboard (the start page).
- URL bar. The address field. Paste a URL, or type a search query.
- Ad blocker toggle. A shield icon that enables or disables ad blocking. Shows a counter of how many requests have been blocked in the current session.
- Bookmark button. Save the current page as a smart bookmark.
- Analysis button. The lightning bolt — run Lagan’s content analysis on the current page.
The URL bar has a convenience: text without any dots in it gets treated as a search query and submitted to Google. Text with dots gets treated as a URL — no protocol prefix needed, the browser auto-prepends https:// if you leave it off.
Content extraction
Section titled “Content extraction”When a page finishes loading, the browser automatically extracts its main content using a priority cascade. The goal is to pull the actual article text out of a page that’s cluttered with nav, sidebars, ads, and footers. The cascade is:
- If the page has an
<article>element, use its text. - If not, try
<main>or[role="main"]. - If those don’t exist, look for common content class selectors:
.post-content,.entry-content,.article-body, and a handful of others. - Fall back to finding the largest text-heavy
<div>or<section>(excluding blocks under 500 characters or where links comprise over 50% of the text). - Last resort: use
document.body.innerText.
The extracted content is capped at 50,000 characters. For any reasonable article, this is more than enough. For a page that’s mostly navigation or advertising, the extraction fails gracefully and the cap doesn’t get hit.
The extracted content is what shows up in the Content Extract tab as “the actual article text” separated from the rest of the page. It’s also what analysis runs on when you click the lightning bolt.
Ad blocking
Section titled “Ad blocking”Two layers of ad blocking run on every page:
- Main-process filtering. Electron’s main process intercepts network requests for known ad domains (Google Ads, Taboola, Outbrain, AdThrive, Ezoic, dozens of others) and blocks them at the network layer. The blocked request count is displayed in the toolbar shield icon.
- Injected DOM cleanup. After the page loads, a small JavaScript is injected that hides known ad containers via CSS
display: none, and a debounced MutationObserver catches dynamically-inserted ads that come in after initial load.
Ad blocking is on by default. Click the shield to disable it for sites that either legitimately depend on ads (some legitimate publishers) or that break when ad blocking is active (occasionally). The toggle is per-session, not per-site — turning it off disables blocking globally until you turn it back on.
There’s also a popup blocker that intercepts window.open calls and prevents spawning new windows. Links that would normally open in a new tab either open in the current embedded browser (in-place navigation) or do nothing at all, depending on the link’s disposition. This is part of the one-tab-at-a-time design.
Security constraints
Section titled “Security constraints”A few intentional security limits:
- Only HTTP and HTTPS are allowed. Other protocols (file://, javascript:, data:) are rejected. The browser refuses to load anything that’s not a normal web page.
- The browser session is partitioned. Credentials, cookies, and local storage are stored in a dedicated Electron partition (
persist:research), which keeps them separate from Ishvana’s main app state. They persist across sessions but don’t mix with anything else. - No chrome extension support. You can’t install uBlock Origin or LastPass or anything else. The ad blocker is built in and nothing else is customizable.
- No developer tools. The embedded browser doesn’t expose DevTools. This is both a UX choice and a security boundary — the browser is for reading, not for building.
Browsing history
Section titled “Browsing history”The browser keeps an in-memory list of the last 50 pages you visited. The list shows URL, title, and timestamp, and it’s accessible from the Bookmarks Dashboard. Clicking any history entry re-navigates to that page.
The history is session-scoped, not persistent. Closing Ishvana clears it. The persistence layer for research work is smart bookmarks (which you explicitly save) and the knowledge base (which accumulates content over time). Raw browsing history isn’t meant to survive — if you need to come back to a page later, save it as a bookmark.
Relationship to your main browser
Section titled “Relationship to your main browser”The embedded browser is not trying to replace Chrome or Firefox. It’s trying to replace the 45-minute tangent that happens when you alt-tab to your real browser to look something up. For that specific interaction — “I need to check this one fact right now” — the embedded browser is faster and less disruptive than your main browser.
For everything else — deep reading sessions, multi-tab research projects, work that requires browser extensions or bookmarks from your main browser — your main browser is still the right tool. You don’t have to use the embedded browser for everything.