SAYA
Keyboard-First Zen Browser

Browsers are heavy, noisy and full of trackers. Saya (Urdu for 'shadow') is a minimal, keyboard-first browser that treats privacy as the default: ad and tracker blocking lives in the native navigation layer — filtered in Rust before the page ever loads — not bolted on as an extension you have to find, trust and keep updated. It now ships as a signed, Apple-notarized download for Apple Silicon: drag it in and it just opens.
Origin Story
I wanted a calm browser where blocking was part of the engine, not a plugin I had to remember to install and keep updated. Every mainstream browser makes privacy your job — add this extension, tick those boxes, keep the lists current. Saya inverts that: the block is the browser's default behaviour, running below the page where a site can't negotiate with it. It began as a sibling to Cinder — the same quiet palette, the same respect for attention — and grew into a browser I actually live in.
How It's Built
The interesting part is native adblocking: Brave's adblock-rust runs inside the Rust navigation handler, so requests are filtered before the WebView ever sees them — engine-level, not page-level. On top of that sits cosmetic filtering that hides the ad's leftover scaffolding, reader mode that rebuilds an article locally, and private and Tor tabs for when a page shouldn't touch your history at all. The UI is a thin React 19 surface over a single shared native webview, so the whole thing stays small and fast.
Engineering Notes
Adblock in the engine, not an extension
Brave's adblock-rust runs inside the Rust navigation handler, so trackers and ads are filtered before the WebView ever sees the request — EasyList and EasyPrivacy loaded at the engine level. Blocking is the browser's default here, not a plugin you have to remember to install and keep current.
Cosmetic filtering, driven by the page
Network blocking kills the request; cosmetic filtering hides what's left. Saya injects EasyList's element-hiding rules per site, then the page reports back its own classes and ids so the engine returns only the generic selectors that actually match — the bulk of element-hiding, computed lazily instead of shipping the whole list to every page.
One shared webview, by design
Every tab is a URL in React state over a single native webview that's repositioned on switch. It's a deliberate trade — it sidesteps a WebView2 re-entrancy deadlock when creating webviews from a command handler, and keeps memory flat — at the cost of per-tab scroll state, which a zen browser with no background tabs can live without.
Private and Tor, properly separated
Private tabs use an ephemeral data store that never persists cookies or history. Tor tabs go further: traffic routes through an embedded Arti client — Tor implemented in Rust, running locally — with a per-tab SOCKS proxy and .onion resolution, so the developer never sees it and it never touches your normal connection.
Signed, notarized, cross-platform core
The Rust core and adblock-rust integration are platform-agnostic; only the shell differs (WKWebView on macOS, WebView2 on Windows). The macOS build ships as a hardened-runtime, Developer-ID-signed and Apple-notarized DMG, so it opens with no Gatekeeper warnings — verified end-to-end with spctl and stapler.
Gallery




Saya is a statement that privacy belongs in the engine, not in a plugin you have to remember to install — the block should be the browser's job, not yours.
What It Does
Engine-Level Adblock
Brave's adblock-rust filters requests inside the Rust navigation handler — before the page loads, with EasyList and EasyPrivacy — so trackers never leave your machine. No extension to install, trust or keep updated.
Cosmetic Filtering & Custom Rules
Beyond network blocking, Saya hides the leftover ad scaffolding with EasyList's element-hiding rules, and lets you add your own filters in the same syntax.
Reader Mode
One key rebuilds any article into a clean, readable page using Mozilla Readability — extracted locally, with nothing sent anywhere.
Private & Tor Tabs
Ephemeral private tabs that never touch your history, plus optional Tor tabs routed through an embedded Arti client for .onion access.
Per-Site Controls
Toggle JavaScript per site, clear a single site's cookies and storage, or wipe browsing data across a time window — the privacy controls are always one click away.
Full-Page Capture
Capture an entire scrolling page and export it as a PNG, JPEG or multi-page PDF, saved wherever you choose.
Command Palette & Find
A ⌘K fuzzy palette over tabs, history and bookmarks, plus find-in-page — the whole browser is reachable from the home row.
Bookmarks & Smart Address Bar
Bookmarks with folders, in-place editing and one-click Chrome import, and a frecency-ranked address bar that learns what you actually open.
Native Shell
Tauri 2 over WebKit (macOS) / WebView2 (Windows) keeps it small and fast, with native macOS chrome and fullscreen — shipped as a signed, Apple-notarized DMG.
Changelog
- +Blocking — Engine-level ad & tracker filtering via Brave's adblock-rust in the Rust navigation handler (EasyList + EasyPrivacy), plus cosmetic element-hiding and user-supplied custom filter rules.
- +Reader — One-key reader mode rebuilds any article locally with Mozilla Readability; nothing is sent anywhere.
- +Private browsing — Ephemeral private tabs that never touch history, plus optional Tor tabs routed through an embedded Arti client for .onion access.
- +Controls — Per-site JavaScript toggle, clear-site-cookies, and clear-browsing-data across time windows.
- +Capture — Full-page screenshots exported as PNG, JPEG or multi-page PDF.
- +Navigation — Command palette (⌘K), find-in-page, a frecency-ranked address bar, bookmarks with folders + in-place editing + Chrome import, and session restore.
- +Window — Native macOS title-bar chrome and fullscreen, with YouTube/element fullscreen working both in and out of the app's own fullscreen.
- +Distribution — Shipped as a hardened-runtime, Developer-ID-signed and Apple-notarized DMG for Apple Silicon.
Where It Stands
Saya now ships as a signed, Apple-notarized DMG for Apple Silicon — engine-level adblock, reader mode, private and Tor tabs, and a keyboard-first surface, all on a small Tauri/Rust core that also targets Windows via WebView2. The natural next steps are a universal (Intel + Apple Silicon) build and Microsoft Store packaging, since the Rust core and adblock-rust integration are platform-agnostic.
Saya is Tauri 2 + Rust over wry — WKWebView on macOS, WebView2 on Windows — with a React 19 + Tailwind UI. Ad and tracker filtering runs in the navigation handler through Brave's adblock-rust with EasyList and EasyPrivacy, so it is engine-level; cosmetic rules and user custom filters hide whatever's left in the page. Tabs share one native webview that's repositioned on switch — a deliberate trade to sidestep a WebView2 re-entrancy deadlock and keep memory flat. Private tabs are ephemeral; Tor tabs route through an embedded Arti client (Tor in Rust) with a per-tab SOCKS proxy and .onion resolution. Full-page capture reads monitor pixels via xcap and exports PNG/JPEG or PDF (printpdf). It ships as a hardened-runtime, Developer-ID-signed and Apple-notarized DMG for Apple Silicon.