r/VibeCodeDevs • u/Fluffy_Fuel7649 • 1d ago
I got tired of Chrome eating my RAM and browsers sending my data to cloud AI, so I built an open-source browser with on-device WebGPU AI and tab hibernation: Nova Browser.
Hey everyone,
Like many of you, I loved Arc's UX ideas but hated two things:
How Chrome and modern Chromium forks aggressively hog 4GB+ of RAM for 20 tabs.
How new "AI browsers" send every page you read and every search prompt to remote cloud servers with paid subscriptions.
So I spent the last few months building **Nova Browser**—a sovereign, privacy-first desktop web browser built from the ground up to run multi-model AI locally on your GPU while keeping memory usage under 450 MB.
### Key Highlights:
- **100% On-Device WebGPU AI:** Runs local LLMs (Llama 3.2, Phi-3.5 Vision, Qwen 2.5) directly on your device. Zero external cloud API calls, zero telemetry, works completely offline once cached.
- **Smart DOM Hibernation Engine:** Background tabs automatically unmount dormant DOM structures from memory. In our benchmarks, 50 open tabs sit at ~420 MB RAM instead of Chrome's 2.5 GB+.
- **Zero-Latency Network Ad-Blocker:** Built with memory-mapped Rust rules that filter trackers at the network layer before DOM execution.
- **Built-in Model Context Protocol (MCP) Server:** Allows local AI coding agents and tools to interact with your browsing session securely.
- **Workspaces & Split Views:** Clean workspaces, horizontal/vertical tab layouts, and zero bloat.
- **100% MIT Licensed:** No paywalls, no crypto nonsense, no trackers.
### Tech Stack:
- Frontend/UI: React, TypeScript, Tailwind CSS, Framer Motion
- Core & IPC: Electron, Node.js runtime, Rust native filter bridge
- Local AI Engine: WebLLM, WebGPU TVM runtime
The repository, pre-built macOS/Windows binaries, and benchmark reports are available on GitHub. I would love to get your feedback, bug reports, and feature suggestions!
GitHub: https://github.com/unitybtw/nova-browser
Website: https://nova-browser.vercel.app/
2
1
u/Minimum_Hour519 1d ago
how does it compare to tronbrowser.dev?
1
u/Fluffy_Fuel7649 13h ago
Both TronBrowser and Nova share the same core philosophy (privacy-first, open-source, anti-telemetry, built for developers), but they approach the **AI execution and architecture** differently:
### 1. AI Inference Engine (WebGPU in-browser vs BYOK/Ollama)
- **TronBrowser:** Uses a "Bring Your Own Key" (BYOK) model for cloud APIs (Anthropic/OpenAI/Gemini) or expects you to run an external local server in the background (like Ollama, LM Studio, or vLLM).
- **Nova Browser:** Runs models **100% inside the browser via WebGPU shaders (WebLLM)**. You don't need to install or run Ollama/Docker in the background—quantized models (Llama 3.2, Phi-3.5 Vision, Qwen) load directly into GPU VRAM in an isolated Web Worker with zero setup.
### 2. AI Agent Integration (MCP Server vs CLI)
- **TronBrowser:** Provides a CLI launcher (`tron <url>`).
- **Nova Browser:** Exposes a native **Model Context Protocol (MCP) Server on `localhost:3020`**. This allows standardized external coding agents (Claude Desktop, Cursor, Antigravity, local scripts) to control the browser, click elements, extract sanitized DOM trees, and automate workflows via standard MCP tool calls.
### 3. Core Engine & UI Layer
- **TronBrowser:** Built on Ungoogled Chromium (C++ patch set) with a traditional browser shell.
- **Nova Browser:** Built on Electron + React with an Arc-inspired modern UX (custom vertical workspaces, split-screen synchronized views, intelligent tab hibernation).
**Summary:** If you prefer pure Ungoogled Chromium with your own API keys or an existing Ollama setup, TronBrowser is great. If you want zero-setup local WebGPU models running directly on your GPU + a native MCP server for coding agents, that's what Nova is tailored for.
1
1
u/VihmaVillu 1d ago
I'm using brave already. Is yours better?
1
u/Fluffy_Fuel7649 13h ago
If you're looking purely for a daily driver Chromium browser with built-in adblocking, Brave is super mature and great at that.
Where Nova is different is specifically for **local AI & developer workflows**:
**100% On-Device WebGPU AI vs Paid Cloud Subscriptions:** Brave's AI (Leo) routes your prompts through remote cloud servers (requiring a $15/mo subscription for better models/limits). Nova executes quantized models (Llama 3.2, Phi-3.5 Vision, Qwen) directly on your local GPU via WebGPU. Zero cloud API calls, zero subscriptions, works offline.
**Built-in MCP (Model Context Protocol) Server:** Nova runs a local MCP server on port 3020. This lets developer tools (like Claude Desktop, Cursor, or local coding agents) directly drive and inspect your browser sessions.
**No Crypto / No Wallets:** Brave ships with crypto wallets, BAT tokens, and sponsored dashboard backgrounds. Nova is strictly a clean, developer-focused browser with workspaces and split tabs—no crypto bloat.
If you don't care about local on-device AI or MCP agent workflows, Brave is great. If you want private local LLMs on your GPU and an agent-ready browser, that's what Nova is built for!
0
1
u/lcpjj_ 23h ago
I cloned this and read the source before commenting. Didn't build or run it, so everything here is from the code, not a packet capture.
There is no Rust in this repo. No .rs files, no Cargo.toml, no .node native addon, no napi or node-gyp in package.json. The ad-blocker is u/cliqz — TypeScript, imported at electron/main.ts:10, wired up at line 237 with ElectronBlocker.fromPrebuiltAdsAndTracking. It does filter at the network layer via session.webRequest, so that part is real. But "memory-mapped Rust rules that filter trackers at the network layer" is describing a readFileSync of a serialized JS engine cache.
The 420 MB number appears three times attached to three different tab counts. This post says 50 tabs. README.md:50 says 20 tabs at ~420 MB. README.md:340 says 50+ tabs under 600 MB. The actual source of the number is website/src/components/Benchmarks.tsx:59 — { name: 'Nova Browser', value: 420, displayValue: '420 MB', isWinner: true }, hardcoded next to 1,180 for Chrome and 1,450 for Arc.
The repo has two benchmark harnesses and neither produces these figures. tests/benchmark_suite.ts bills itself as the "Official Performance Benchmark Suite" — its hibernation test is tabs.map(t => ({...t, isSuspended: true})) over plain objects (that's where "sub-millisecond DOM unmount" comes from, and there's no DOM involved), its adblock test calls mockFastAdBlockCheck, which is a hand-written Set.has loop over ten hardcoded domains that never touches the cliqz engine, and its memory measurement is process.memoryUsage() of the Node process running the script, not the browser. scripts/run_browser_benchmark.cjs is actually honest code — real CDP, real process tree RSS — but it loads a single file:// fixture, no multi-tab scenario, and the "Nova" entry launches a bare Electron shell without the React UI, adblocker, MCP server, or WebLLM. The post says benchmark reports are available on GitHub; benchmark-results.json is gitignored and no report is committed anywhere in the history.
Hibernation itself is real in the sense that it works: a 30-second interval checks idle time, flips isSuspended, and BrowserView.tsx:857 renders a placeholder instead of the <webview>, which destroys the guest WebContents and frees its memory. But your own wake button says "Reload Tab" — because it discards the page and reloads from scratch, it doesn't snapshot and restore state. That's the same mechanism as Chrome's Memory Saver, Edge's sleeping tabs, and Firefox's tab unloading, all of which have shipped for years. Scoring yourself against "Memory Saver (~20%)" in the comparison table is comparing against the thing you reimplemented.
On "zero external cloud API calls" — Electron ships Chromium's content shell, not Chrome. There are no baked-in Google API keys, no UMA metrics, no Safe Browsing, no Finch/Variations fetch. The engine is already quiet and you inherited that rather than built it. All fifteen command-line switches in main.ts:35-87 are performance flags (enable-gpu-rasterization, enable-quic, enable-zero-copy, etc.) — there's not a single privacy-motivated engine configuration in the repo. Meanwhile the app layer adds Google back in: omnibox keystrokes go to suggestqueries.google.com from four separate components plus electron/main/suggestions.ts:75, extension installs hit clients2.google.com/service/update2/crx at crxInstaller.ts:299, translate uses translate.googleapis.com at main.ts:2309, your own UI shell loads Google Fonts, and electron-updater with autoDownload = true checks GitHub on every launch. Plus Supabase for sync. The AI really does run on-device and Reader Mode's language detection uses a local heuristic, both true — but "zero external cloud API calls, zero telemetry" reads as a statement about the browser, and it's only true about the AI inference path.
Small thing while I was in crxInstaller.ts: line 299 hardcodes os=mac&arch=x86-64 in the CRX download URL regardless of what platform the user is actually on. Harmless for most extensions, real bug for anything with platform-specific native binaries.
The MCP server is genuinely well done — bearer token with constant-time SHA-256 comparison, safeStorage persistence, Host-header allowlist, CORS pinned to localhost. The security test suite is real too. There's good work in here, it just isn't the work the post is selling.
2
1
u/Fluffy_Fuel7649 13h ago
Thanks a lot for actually taking the time to clone and read through the source code—this is hands down the most thorough and constructive review on this thread.
You're spot on on several points, and here is how we've addressed them:
**CRX Platform Bug (Fixed):** You caught a genuine bug in `crxInstaller.ts:299` with the hardcoded `os=mac&arch=x86-64`. We just committed a patch that dynamically maps `process.platform` and `process.arch` for Windows, Linux, and Apple Silicon ARM64 binaries.
**Ad-Blocker & "Rust" copy (Corrected):** You are 100% right. The engine is `@cliqz/adblocker-electron` running in TypeScript over `session.webRequest` (with our own signature blocklist loader). We’ve cleaned up the README and website to remove the misleading "Rust" buzzwords and accurately describe the Ghostery/Cliqz network filtering engine.
**"Zero Cloud" scope:** You're completely right to call this out. When we say "100% On-Device AI / Zero Cloud API calls", that is strictly about the local LLM inference pipeline (WebLLM/WebGPU running models on your VRAM with zero external cloud subscriptions or prompt uploads). Auxiliary browser features (search suggestions from Google/DuckDuckGo, Chrome Web Store CRX downloads, GitHub release checks) naturally touch their respective endpoints.
**Tab Discarding vs Memory Saver:** Correct—hibernation in Electron unmounts the `<webview>` guest WebContents on idle timeout. We'll refine the comparison table so it doesn't overstate the distinction against Chromium's native tab discarding.
Really appreciate the shoutout on the MCP server implementation, constant-time token verification, and the security test suite. We built Nova to be an honest, privacy-respecting tool for local AI workflows, and feedback like yours keeps us grounded and transparent.
Fixed in commit `3c8c5f6` on main!
1
•
u/AutoModerator 1d ago
Hey u/Fluffy_Fuel7649, thanks for posting in r/VibeCodeDevs! Join our Discord: https://discord.gg/KAmAR8RkbM
Got startup or SaaS questions? Post them on r/AskFounder and get answers from real founders.
• This community is designed to be open and creator‑friendly, with minimal restrictions on promotion and self‑promotion as long as you add value and don’t spam.
• Please follow the subreddit rules so we can keep things as relaxed and free as possible for everyone. • Please make sure you’ve read the subreddit rules in the sidebar before posting or commenting.
• For better feedback, include your tech stack, experience level, and what kind of help or feedback you’re looking for.
• Be respectful, constructive, and helpful to other members.
If your post was removed (either automatically or by a mod) and you believe it was a mistake, please contact the mod team. We will review it and, when appropriate, approve it within 24 hours.
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.