You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
Note
Looking for a detailed comparison? Check out my comparison guide to see how wBlock stacks up against other Safari content blockers.
~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 Manage paywalls, YouTube Dislikes, and more
Settings & Customization Configure auto-updates, notifications, and preferences
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.