A calmer, safer web browser for macOS.
Built on WebKit. Free and open source — forever.
Blur is a native macOS browser that protects you from adult content by blurring images and videos automatically as you browse. Under the hood it's WebKit — the same engine as Safari — so sites load fast and work right. On top of that, we've built a calmer UI, seven hand-crafted themes, and a growing set of tools to shield you from what you'd rather not see.
Core ideas:
- 🫧 Blur adult content — images and videos, detected and softened on the fly.
- 🚫 Website blocking (coming soon) — block domains at the browser level. No extensions, no workarounds.
- 📚 Vertical sidebar — tabs stacked on the left, not crammed along the top.
- ⌨️ Keyboard-first — press
⌘ + /anywhere to see the full shortcut list. - 🎨 Seven themes — from airy Periwinkle to inky Midnight.
- 🔍 Quick Search (
⌘K) — find open tabs, history, and the web from one calm overlay. - 🧘 Zen mode — hide the chrome, keep only the page.
- 😅 Funny error messages — because a stack trace is never what you needed.
- 🛡️ Private & secure — no tracking, no telemetry. Your history stays on your Mac.
- ⚡ WebKit engine — fast to load, gentle on your battery.
- macOS 14 (Sonoma) or later
- Xcode 16+
# Open in Xcode
open Blur-Browser.xcodeproj
# Or build from the command line
xcodebuild -project Blur-Browser.xcodeproj -scheme Browse -configuration Debug buildBrowse/ # The macOS app (AppKit + SwiftUI hybrid)
App/ # Entry point, AppDelegate, menu bar
Window/ # Window, window controller, root layout
Sidebar/ # SwiftUI tab list (left side)
Toolbar/ # Address bar with nav buttons
WebContent/ # WKWebView controller + coordinator
Search/ # Quick Search overlay + Find in Page
History/ # SwiftData store + history panel
Tab/ # Tab model, tab manager, session persistence
Theme/ # 7-theme system + theme store
Shared/ # Design tokens, constants, shortcuts
Resources/ # Assets, Info.plist, entitlements
Website/ # Next.js marketing site (blurbrowser.app)
- AppKit hosts, SwiftUI embeds — the window, toolbar, and WKWebView are AppKit-owned. SwiftUI views (sidebar, history panel, Quick Search) are embedded via
NSHostingController. - Manual frame layout for the root view controller — avoids
NSSplitViewController+NSHostingControllerlayout cycle crashes withfullSizeContentView. - One
WKWebViewper tab — stored in theBrowserTabmodel; only the active tab's web view is in the view hierarchy. TabManageris the source of truth — all tab mutations go through it.@Observableeverywhere — noObservableObject, no@StateObject.- No third-party dependencies — only Apple frameworks (WebKit, SwiftUI, AppKit, SwiftData).
| Shortcut | Action |
|---|---|
⌘ + / |
Show all shortcuts |
⌘ + T |
New Tab (opens Quick Search) |
⌘ + K |
Quick Search (current tab) |
⌘ + W |
Close Tab |
⌘ + L |
Focus & select URL bar |
⌘ + Shift + C |
Copy current URL |
⌘ + F |
Find in Page |
⌘ + G / ⌘ + Shift + G |
Find Next / Previous |
⌘ + \ |
Toggle Sidebar |
⌘ + Y |
Toggle History Panel |
⌘ + [ / ⌘ + ] |
Back / Forward |
⌘ + R / ⌘ + Shift + R |
Reload / Hard Reload |
⌘ + 1–9 |
Switch to Tab 1–9 |
⌘ + Shift + ] / ⌘ + Shift + [ |
Next / Previous Tab |
The marketing site lives in Website/ — a Next.js 15 app with the same 7-theme palette as the browser.
cd Website
npm install
cp .env.local.example .env.local # add your Web3Forms key for the contact form
npm run devIssues and pull requests are welcome. For anything non-trivial, please open an issue first so we can discuss the approach.
MIT © 2026 Omar Elsayed
Blur is free and will always be free. No ads, no trackers, no paid tiers hidden behind features.
If Blur has made your browsing a little calmer, consider sponsoring the project. Every contribution — no matter how small — helps keep it independent, open, and moving forward.
github.com/sponsors/EngOmarElsayed
Thank you — you're the reason this project exists. 🫶
