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.
- 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
- 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
- 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
- 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
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
wBlock is free and open-source software. Financial contributions support ongoing development and maintenance:
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.