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 Manage paywalls, YouTube likes and more
Settings and Customization Configure auto-updates, notifications, and preferences
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.