0xCUB3/wBlock: The next-generation ad blocker for Safari.

wblock interface

A Safari content blocker for macOS, iOS, and iPadOS using declarative content blocking rules.
The protocol supports 750,000 rules in 5 extensions with buffer storage and LZ4 compression.

Comment

Looking for a detailed comparison? Check out my comparison guide to see how well wBlock compares to other Safari content blockers.

  • 750,000 rule capacity Using 5 Safari Content Blocker extensions per platform (150k rules each)
  • ~40 MB RAM footprint Disable Safari’s Native Content Blocker via API
  • protocol buffers serialization With LZ4 compression for filtered storage
  • off-thread I/O operations With streaming serialization to reduce main thread blocking
  • HTTP conditional request (If-Modified-Since/ETag) for efficient filter update detection
  • 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 blocklist via URL import
  • Category-Based Filter Organization With per-list toggles and automatic rule distribution
  • filter list validation With Safari automatically disabling 150k rules per extension limit
  • network request interception Through declarative content blocking rules (ads, trackers)
  • Cookie and local storage filtering Safari content blocking rules via actions
  • css injection Cosmetic filtering and element hiding
  • script blocking For unwanted software and JavaScript execution
  • Pop-up and redirect prevention Using Safari Content Blocking Pattern

Configuration and Management

  • Configurable auto-update interval 1 hour to 7 days with background refresh
  • Per-Site Blocking Control Enable/Disable API through Safari’s content blocker
  • whitelist management Safari extensions for trusted domains with state persistence
  • Regional Filter Support With preset lists for language-specific content blocking
  • filter collection monitoring With real-time rule calculation and compilation status
  • background update notifications (Optional) Filter list for refreshing events



userscript management

userscript management
Manage paywalls, YouTube likes and more

settings

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

iOS

iOS interface
Full-Featured Blocking on iPhone and iPad


core architecture

  • Protocol buffers (libprotobuf) with LZ4 compression for filter serialization.
  • Asynchronous I/O with Swift concurrency (async/await, tasks, actor isolation)
  • Streaming serialization to disk reduces peak memory usage during compilation.
  • 5 Safari content blocker extensions per platform (maximum Safari API capacity)
  • SafariServices Framework integration for declarative content blocking

Dependencies and Standards

  • SafariConverterLib v4.0.4 for AdGuard to Safari rules conversion
  • AdGuard Scriptlets v2.2.9 for advanced blocking technologies
  • 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


wBlock is free and open-source software. Financial contributions support the ongoing development and maintenance of:


How does wBlock compare to other ad blockers?

Check out our comparison guide vs uBlock Origin Lite, AdGuard and Vipre.

Can I use my own filter lists?

Yes! wBlock supports any AdGuard-compliant filter list. Add URLs to 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. The memory overhead is ~40MB idle and has no measurable impact on page load times.

Does UserScript 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 the Safari Web Extension.

How often are filters updated?

The auto-update interval can be configured from 1 hour to 7 days, or triggered manually. Updates use HTTP conditional requests (If-Modified-Since/ETag headers) to reduce bandwidth usage.

Is Elementor Zapper available on iOS?

not yet.




Leave a Comment