Skip to content

0xCUB3/wBlock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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 utilizing declarative content blocking rules.
Supports 750,000 rules across 5 extensions with Protocol Buffer storage and LZ4 compression.


Features

Performance Architecture

  • 750,000 rule capacity utilizing 5 Safari content blocking extensions per platform (150k rules each)
  • ~40 MB RAM footprint at idle via Safari's native content blocking API
  • Protocol Buffers serialization with LZ4 compression for filter storage
  • Off-thread I/O operations with streaming serialization to minimize main thread blocking
  • HTTP conditional requests (If-Modified-Since/ETag) for efficient filter update detection

Content Modification

  • Element Zapper (macOS only) generates persistent CSS selectors for manual element removal
  • Userscript engine implements Greasemonkey API (GM_getValue, GM_setValue, GM_xmlhttpRequest)
  • Custom filter list ingestion supports AdGuard-syntax blocklists via URL import
  • Category-based filter organization with per-list toggle and automatic rule distribution
  • Filter list validation with automatic disabling on Safari's 150k rule limit per extension

Blocking Capabilities

  • Network request blocking via declarative content blocking rules (advertisements, trackers)
  • Cookie and local storage filtering through Safari content blocker rule actions
  • CSS injection for cosmetic filtering and element hiding
  • Script blocking for unwanted software and JavaScript execution
  • Pop-up and redirect prevention using Safari content blocking patterns

Configuration & Management

  • Configurable auto-update intervals from 1 hour to 7 days with background refresh
  • Per-site blocking controls through Safari's content blocker enable/disable API
  • Whitelist management for trusted domains with Safari extension state persistence
  • Regional filter support with preset lists for language-specific content blocking
  • Filter compilation monitoring with real-time rule count and compilation status
  • Background update notifications (optional) for filter list refresh events



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.0.4 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 software. Financial contributions support ongoing development and maintenance:





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! wBlock supports any AdGuard-compatible filter list. Add the URL in Custom Filter Lists.
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?
Not yet.



Credits

@arjpar · @ameshkov · @shindgewongxj


Discord Privacy Issues


Star History

Star History Chart


Developed by 0xCUB3

About

The next-generation ad blocker for Safari.

Resources

License

Stars

Watchers

Forks

Packages

No packages published