Skip to content

0xCUB3/wBlock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

592 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wBlock

wBlock

The end of Safari ad-blocking B.S.


Download on the App Store

Version Platform License

Join Discord



wBlock Interface

A Safari content blocker for macOS, iOS, and iPadOS.
750,000 rules across 5 extensions, Protocol Buffer storage, LZ4 compression, iCloud sync.


Note

Looking for a detailed comparison? Check out my comparison guide to see how wBlock stacks up against other Safari content blockers.


Features

Performance

  • 750,000 rule capacity across 5 Safari content blocking extensions per platform (150k each)
  • ~40 MB RAM at idle — Safari's native content blocking API runs rules out-of-process
  • Protocol Buffers + LZ4 for filter storage; streaming I/O keeps memory low during compilation
  • HTTP conditional requests (If-Modified-Since/ETag) so updates only download what changed
  • iCloud sync for filter selections, custom lists, userscripts, and whitelist across devices

Content modification

  • Element Zapper (macOS, iOS, iPadOS, visionOS) — visually select and hide page elements in Safari
  • Userscript engine with Greasemonkey API (GM_getValue, GM_setValue, GM_xmlhttpRequest)
  • Custom filter lists via URL, paste, or file import — supports any AdGuard-syntax blocklist
  • Toolbar search for quickly finding filters and userscripts
  • Automatic rule distribution across all 5 content blocker slots for maximum coverage

Blocking

  • Network request blocking — ads, trackers, cookie banners, annoyances
  • CSS injection for cosmetic filtering and element hiding
  • Script blocking for unwanted JavaScript
  • Pop-up and redirect prevention

Configuration

  • Auto-updates from every hour to every 7 days, or manual — with background refresh on iOS
  • Per-site controls — disable blocking on specific sites from the Safari toolbar
  • Blocked request logger (macOS) — see what's being blocked on each page
  • Whitelist for trusted domains
  • Regional filters with auto-detection based on your locale
  • Homebrew cask for macOS: brew tap 0xcub3/wblock https://github.com/0xCUB3/wBlock && brew install --cask wblock



Screenshots


Userscript Management

Userscript Management
Manage paywalls, YouTube Dislikes, and more
Settings

Settings & Customization
Configure auto-updates, notifications, and preferences
iOS

iOS Interface
Full-featured blocking on iPhone and iPad



Technical Implementation

Core Architecture

  • Protocol Buffers (libprotobuf) with LZ4 compression for filter serialization
  • Asynchronous I/O with Swift concurrency (async/await, Task, Actor isolation)
  • Streaming serialization to disk minimizes peak memory usage during compilation
  • 5 Safari content blocking extensions per platform (maximum Safari API capacity)
  • SafariServices framework integration for declarative content blocking

Dependencies & Standards

  • SafariConverterLib v4.1.0 for AdGuard to Safari rule conversion
  • AdGuard Scriptlets v2.2.9 for advanced blocking techniques
  • Swift 5.9+ with strict concurrency checking enabled
  • WCAG 2.1 AA compliance with full VoiceOver and Dynamic Type support
  • SwiftProtobuf for cross-platform filter storage format


Support Development

wBlock is free and open source. If you want to support the project:





FAQ

How does wBlock compare to other ad blockers?
Check out our comparison guide vs uBlock Origin Lite, AdGuard, and Wipr.
Can I use my own filter lists?
Yes. You can add any AdGuard-compatible filter list by URL, paste rules directly, or import from a file.
Does wBlock slow down Safari?
No. wBlock uses Safari's native declarative content blocking API, which processes rules in a separate process. Memory overhead is ~40 MB at idle with no measurable impact on page load times.
Do userscripts work on iOS?
Yes. The userscript engine implements the Greasemonkey API (GM_getValue, GM_setValue, GM_xmlhttpRequest, GM_addStyle) on both iOS and macOS via Safari Web Extensions.
How often do filters update?
Auto-update intervals are configurable from 1 hour to 7 days, or manually triggered. Updates use HTTP conditional requests (If-Modified-Since/ETag headers) to minimize bandwidth usage.
Is the element zapper available on iOS?
Yes. Open the wBlock extension popup in Safari and tap Activate Element Zapper.



Credits

@arjpar · @ameshkov · @shindgewongxj


Discord Privacy Issues


Star History

Star History Chart


Developed by 0xCUB3