A desktop web browser for Windows, rebuilt from the spirit of
Via Browser 7.2.1 (Android, mark.via.gp). This is not a conversion of the APK — Android
apps can't be turned into native Windows executables. Instead it's a faithful re-implementation
using Tauri 2 + Rust + WebView2, matching Via's philosophy of a lean app that uses the OS's
native web engine rather than bundling a heavy Chromium.
The project now contains two independent engines:
| Engine | Dir | Stack | Status |
|---|---|---|---|
| Tauri (v7.x) | src-tauri/ |
Tauri 2 + WebView2, child-window overlay shell | Released through v7.6.0; kept working. WebView2 child-window z-order/transparency limits are the reason for the new engine. |
| Chromium (v8.x) | chromium-shell/ |
Native CEF 151 (Chromium) + wgpu, single-surface OSR compositor | New — v0.1 milestone. |
The Chromium shell abandons child OS windows entirely: every surface (active tab, floating nav pill, slide-in menu) is an off-screen CEF browser rendered into its own wgpu texture, and one compositor draws them in explicit z-order into the single window surface. The nav pill is a real rendering surface with per-pixel alpha drawn above the page texture — no z-order fights, no CSS-over-native claims, no HTML injected into webpages. Drag, persistence and resize clamping are handled by the native shell.
Current milestone (v0.1): tab creation/switch/close, back/forward/home/reload, floating pill with 2D drag + position persistence, slide-in menu shell,
Ctrl+T/Ctrl+W. Omnibox/search, tab panel, settings, adblock, downloads and the full Via menu are the next milestones. CEF 151 ships only open codecs, so some site video (e.g. proprietary H.264/AAC) may not play yet.
Constraint update: the earlier "under 5 MB" limit has been lifted. The new priority is absolute feature perfection and a flawless 1:1 UI/UX with the Android app. Heavy assets, full libraries and complete UI pages are welcome — no size-driven shortcuts.
- Via ships as compiled Android Dalvik bytecode (
.dex) tied toandroid.app,android.viewand the AndroidWebView. There is no tool that "converts" an APK into a native.exe. Any tool claiming to is either a scam or just wraps an Android emulator. - The faithful, lightweight path is a native re-implementation. This repo is that port.
| Asset | Source |
|---|---|
via-browser-win.exe |
Standalone Windows x64 binary (3.2 MB) |
Via Browser_7.2.1_x64-setup.exe |
NSIS installer (1.3 MB) |
| Built-in ad blocker | Via's own EasyList-derived /assets/simple.txt (61 KB, 3,100+ rules) |
| Error page & logo | Extracted from the APK's /assets/ |
- Via-style mobile UI on PC — no top chrome, pure AMOLED-black (#000000) local home screen with the official Via ribbon logo extracted from the APK's assets, and no fake speed-dial tiles. (no external site is loaded on launch; the webview stays hidden until you search/navigate). A 5-icon bottom navigation bar capped at a phone-like 500px (Back / Forward / Home / Tabs / Menu), a floating address bar, a card-grid tab switcher, and a dark 4-column scrollable slide-up grid menu with all of Via's tools.
- Tabs — real parallel tabs (each is a native WebView2 child webview);
visual card grid switcher with live titles/URLs.
Ctrl+T,Ctrl+W,Ctrl+L. - Omnibox + routing — the address bar round-trips through a Rust
parse_and_load_urlcommand (Via-style URL vs. search detection) sogithub.comloadshttps://github.comand anything else searches the active engine (Google / Bing / DuckDuckGo / Baidu) with live suggestions. - Full Via menu (37 tools) — Find in page, Save / Saved pages, Translate, View source, Full-screen, Show images, Resource sniffer, User-agent, Network log, Scan QR, Add to home screen, Read aloud, AI, Orientation, Ad blocking, Mark as ad, Text size, Clear data, Customize menu, Reload, Site configuration, Scripts, Print/PDF, Reader mode, Open with, Game mode, Add favorite, Report abuse, Bookmarks, History, Downloads, Incognito, Add bookmark, Desktop site, Night mode, Settings.
- Reader mode (ported from the APK) — bundles Via's actual
Readability.js+ readerable-detection + reader renderer/CSS extracted from the decompiled Android sources (j6/w.java,j6/c0.java), with next/prev-chapter navigation links. - Resource sniffer — injected capture of media URLs
(
.mp4/.mp3/.m3u8/...) plus a live Network-log panel backed by Rust. - Mark as ad — click-to-block element picker that persists a cosmetic filter rule per domain and ships it into the ad-blocking pipeline.
- Ad & tracker blocker — URL-block at request time (fetch/XHR) plus
cosmetic content hiding using Via's bundled EasyList-derived filter list
(extracted from
simple.txtin the Android APK), with per-site overrides. - User scripts — Tampermonkey-style script manager (name + URL match + code) stored in settings; Via's GM API spec is the reference.
- Night mode — full-window color inversion like Via on Android.
- Desktop / Mobile / Via UA — quick User-Agent switch + reload.
- Downloads — WebView2 downloads are intercepted in Rust, saved to the OS Downloads folder (with auto-collision handling), and surfaced in a full-screen Downloads page: category filters (All / Archives / APK / Video / Documents / Images / Audio / Other) with live counts, a "Download started" toast, live byte count, real progress bar (a same-origin HEAD probe supplies the total; otherwise an animated bar), green Completed / red Failed states, click-to-open and reveal-in-folder (↗). Saved pages land here too.
- Settings — dedicated full-screen categorized page (General / Customization / Privacy / Advanced / Scripts / About) with instant switches: search engine, Restore tabs on startup (reopens last session), Clear data on exit (Incognito), Night mode, Show images, Ad blocking, Network log, custom CSS, and more — plus Export/Import .via backups of bookmarks, history, settings and scripts.
- Bookmarks & History — dedicated full-screen pages with live search, click-to-open navigation, and clear-history.
- Backup (.via) — one-click export writes
via-backup-<ts>.viato your Downloads folder; import restores the newest backup found there. - Privacy — clear cache & history, Incognito (no history + auto-clear on exit), and a cookie inspector.
- Persistence — bookmarks, history, downloads/saved pages, scripts, per-site configuration, custom CSS, and custom filters all survive restarts.
- Download
Via Browser_7.2.1_x64-setup.exe. - Run it (Windows SmartScreen may warn because the installer is unsigned — choose More info → Run anyway).
- Launch Via Browser from the Start Menu or desktop shortcut.
Requirement: Windows 10/11 with WebView2 (built-in). The installer bundles the app; the WebView2 evergreen runtime will be used automatically.
Prerequisites on the build machine: Rust (stable), Node.js 18+, and Tauri's Linux system deps for a Linux host, or build on a Windows machine for a fully native toolchain.
npm install
npm run tauri build # native host buildCross-compile a Windows .exe from Linux with cargo-xwin:
rustup target add x86_64-pc-windows-msvc
cargo install cargo-xwin
# scripts/build-windows.sh runs the full NSIS cross-buildThe CI workflow (.github/workflows/build.yml) also produces signed-free Windows installers
via GitHub Actions on ubuntu-latest with the official MSVC + WebView2 toolchain.
Note: cross-compiled (xwin) installers from Linux are unsigned; the GitHub Actions workflow builds on native Windows so you can add an Authenticode signing step if you hold a cert.
src/ Browser chrome UI (tabs, omnibox, settings) — TS/CSS
src/commands.rs Tauri commands: tabs, navigation, ad-block, settings, suggestions
src/adblock.rs Parses Via's EasyList-style rules into a fast domain/path blocker
src/init.rs JS injected into each page (request blocking, cosmetic CSS, user JS)
src/settings.rs Settings model + UA switcher
src-tauri/assets/ Via's extracted filters.txt, error.html, logo.svg
- Tabs are child WebViews of the main window, positioned below the chrome bar; switching tabs shows the active WebView and hides the rest.
- Ad blocking runs twice: a lightweight navigation guard in Rust, plus a DOM-level fetch/XHR/image interceptor injected at document start for finer coverage.
- Settings persist to
%APPDATA%/com.via.browser/via-settings.json.