[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-72727":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":9,"pushedAt":9,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":15,"starSnapshotCount":15,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},72727,"wBlock","0xCUB3\u002FwBlock","0xCUB3","The next-generation ad blocker for Safari.",null,"JavaScript",2581,49,15,1,0,12,28,66,36,97.7,"GNU General Public License v3.0",false,"main",true,[],"2026-06-12 04:01:07","\u003Cdiv align=\"center\">\n\n\u003Cpicture>\n  \u003Cimg src=\"docs\u002Fmedia\u002Fimg\u002Fwblock_logo.png\" alt=\"wBlock Logo\" width=\"120\" \u002F>\n\u003C\u002Fpicture>\n\n# wBlock\n\n**The end of Safari ad-blocking B.S.**\n\n\u003Cbr>\n\n\u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fwblock\u002Fid6746388723?itscg=30200&itsct=apps_box_badge&mttnsubad=6746388723\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Ftoolbox.marketingtools.apple.com\u002Fapi\u002Fv2\u002Fbadges\u002Fdownload-on-the-app-store\u002Fwhite\u002Fen-us?releaseDate=1760313600\" width=\"245\" height=\"82\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Ftoolbox.marketingtools.apple.com\u002Fapi\u002Fv2\u002Fbadges\u002Fdownload-on-the-app-store\u002Fblack\u002Fen-us?releaseDate=1760313600\" width=\"245\" height=\"82\" \u002F>\n    \u003Cimg src=\"https:\u002F\u002Ftoolbox.marketingtools.apple.com\u002Fapi\u002Fv2\u002Fbadges\u002Fdownload-on-the-app-store\u002Fblack\u002Fen-us?releaseDate=1760313600\" alt=\"Download on the App Store\" width=\"245\" height=\"82\" \u002F>\n  \u003C\u002Fpicture>\n\u003C\u002Fa>\n    \n\n\u003Cbr>\n\u003Cbr>\n\n![Version](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002F0xCUB3\u002FwBlock?style=flat&label=version&color=gray)\n![Platform](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FmacOS_14+_|_iOS_17+-gray?style=flat&logo=apple&logoColor=white)\n![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGPL--3.0-gray?style=flat&label=license)\n\n[![Join Discord](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FJoin-Discord-5865F2?style=flat&logo=discord&logoColor=white)](https:\u002F\u002Fdiscord.gg\u002FY3yTFPpbXr)\n\n\u003C\u002Fdiv>\n\n\u003Cbr>\n\u003Cbr>\n\n\u003Cdiv align=\"center\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs\u002Fmedia\u002Fimg\u002Fhero_image_dark.png\" width=\"900\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"docs\u002Fmedia\u002Fimg\u002Fhero_image_light.png\" width=\"900\" \u002F>\n    \u003Cimg src=\"docs\u002Fmedia\u002Fimg\u002Fhero_image_light.png\" alt=\"wBlock Interface\" width=\"900\" \u002F>\n  \u003C\u002Fpicture>\n\u003C\u002Fdiv>\n\n\u003Cbr>\n\n\u003Cp align=\"center\">\nA Safari content blocker for macOS, iOS, and iPadOS.\u003Cbr>\n750,000 rules across 5 extensions, Protocol Buffer storage, LZ4 compression, and iCloud sync.\n\u003C\u002Fp>\n\n\u003Cbr>\n\n> [!NOTE]\n> **Looking for a detailed comparison?** Check out my [comparison guide](Adblock_Comparison.md) to see how wBlock stacks up against other Safari content blockers.\n\n\u003Cbr>\n\n\u003Cdiv align=\"center\">\n\n## Features\n\n\u003C\u002Fdiv>\n\n\u003Ctable align=\"center\">\n\u003Ctr>\n\u003Ctd width=\"50%\" valign=\"top\">\n\n### Performance\n- **750,000 rule capacity** across 5 Safari content blocking extensions per platform (150k each)\n- **~40 MB RAM** at idle — Safari's native content blocking API runs rules out-of-process\n- **Protocol Buffers + LZ4** for filter storage; streaming I\u002FO keeps memory low during compilation\n- **HTTP conditional requests** (If-Modified-Since\u002FETag) so updates only download what changed\n- **iCloud sync** for filter selections, custom lists, userscripts, and whitelist across devices\n\n### Content modification\n- **Element Zapper** (macOS, iOS, iPadOS, visionOS) — visually select and hide page elements in Safari\n- **Userscript engine** with Greasemonkey API (GM_getValue, GM_setValue, GM_xmlhttpRequest)\n- **Custom filter lists** via URL, paste, or file import — supports any AdGuard-syntax blocklist\n- **Toolbar search** for quickly finding filters and userscripts\n- **Automatic rule distribution** across all 5 content blocker slots for maximum coverage\n\n\u003C\u002Ftd>\n\u003Ctd width=\"50%\" valign=\"top\">\n\n### Blocking\n- **Network request blocking** — ads, trackers, cookie banners, annoyances\n- **CSS injection** for cosmetic filtering and element hiding\n- **Script blocking** for unwanted JavaScript\n- **Pop-up and redirect prevention**\n\n### Configuration\n- **Auto-updates** from every hour to every 7 days, or manual. macOS can keep checking through a bundled launch agent and background update service, iOS background checks are best-effort\n- **Per-site controls** — disable blocking on specific sites from the Safari toolbar\n- **Blocked request logger** (macOS) — see what's being blocked on each page\n- **Whitelist** for trusted domains\n- **Regional filters** with auto-detection based on your locale\n- **Homebrew cask** for macOS: `brew tap 0xcub3\u002Fwblock https:\u002F\u002Fgithub.com\u002F0xCUB3\u002FwBlock && brew install --cask wblock`\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Cbr>\n\n---\n\n\u003Cbr>\n\n\u003Cdiv align=\"center\">\n\n## Screenshots\n\n\u003Cbr>\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd align=\"center\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs\u002Fmedia\u002Fimg\u002Fuserscripts_macos_dark.png\" width=\"700\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"docs\u002Fmedia\u002Fimg\u002Fuserscripts_macos_light.png\" width=\"700\" \u002F>\n    \u003Cimg src=\"docs\u002Fmedia\u002Fimg\u002Fuserscripts_macos_light.png\" alt=\"Userscript Management Screenshot\" width=\"700\" \u002F>\n  \u003C\u002Fpicture>\n\u003Cbr>\n\u003Cstrong>Userscript Management\u003C\u002Fstrong>\u003Cbr>\n\u003Cem>Manage paywalls, YouTube Dislikes, and more\u003C\u002Fem>\n\u003Cbr>\u003Cbr>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs\u002Fmedia\u002Fimg\u002Fsettings_macos_dark.png\" width=\"700\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"docs\u002Fmedia\u002Fimg\u002Fsettings_macos_light.png\" width=\"700\" \u002F>\n    \u003Cimg src=\"docs\u002Fmedia\u002Fimg\u002Fsettings_macos_light.png\" alt=\"Settings Screenshot\" width=\"700\" \u002F>\n  \u003C\u002Fpicture>\n\u003Cbr>\n\u003Cstrong>Settings & Customization\u003C\u002Fstrong>\u003Cbr>\n\u003Cem>Configure auto-updates, notifications, and preferences\u003C\u002Fem>\n\u003Cbr>\u003Cbr>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs\u002Fmedia\u002Fimg\u002Ffilters_ios_dark.png\" width=\"350\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"docs\u002Fmedia\u002Fimg\u002Ffilters_ios_light.png\" width=\"350\" \u002F>\n    \u003Cimg src=\"docs\u002Fmedia\u002Fimg\u002Ffilters_ios_light.png\" alt=\"iOS Screenshot\" width=\"350\" \u002F>\n  \u003C\u002Fpicture>\n\u003Cbr>\u003Cbr>\n\u003Cstrong>iOS Interface\u003C\u002Fstrong>\u003Cbr>\n\u003Cem>Full-featured blocking on iPhone\u003C\u002Fem>\n\u003Cbr>\u003Cbr>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs\u002Fmedia\u002Fimg\u002Ffilters_ipados_dark.png\" width=\"700\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"docs\u002Fmedia\u002Fimg\u002Ffilters_ipados_light.png\" width=\"700\" \u002F>\n    \u003Cimg src=\"docs\u002Fmedia\u002Fimg\u002Ffilters_ipados_light.png\" alt=\"iPadOS Screenshot\" width=\"700\" \u002F>\n  \u003C\u002Fpicture>\n\u003Cbr>\u003Cbr>\n\u003Cstrong>iPadOS Interface\u003C\u002Fstrong>\u003Cbr>\n\u003Cem>Full-featured blocking on iPad\u003C\u002Fem>\n\u003Cbr>\u003Cbr>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003C\u002Fdiv>\n\n\u003Cbr>\n\n---\n\n\u003Cbr>\n\n\u003Cdiv align=\"center\">\n\n## Technical Implementation\n\n\u003C\u002Fdiv>\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd width=\"50%\" valign=\"top\">\n\n**Core Architecture**\n- Protocol Buffers (libprotobuf) with LZ4 compression for filter serialization\n- Asynchronous I\u002FO with Swift concurrency (async\u002Fawait, Task, Actor isolation)\n- Streaming serialization to disk minimizes peak memory usage during compilation\n- 5 Safari content blocking extensions per platform (maximum Safari API capacity)\n- SafariServices framework integration for declarative content blocking\n\n\u003C\u002Ftd>\n\u003Ctd width=\"50%\" valign=\"top\">\n\n**Dependencies & Standards**\n- SafariConverterLib v4.2.1 for AdGuard to Safari rule conversion\n- AdGuard Scriptlets v2.3.0 for advanced blocking techniques\n- Swift 5.9+ with strict concurrency checking enabled\n- WCAG 2.1 AA compliance with full VoiceOver and Dynamic Type support\n- SwiftProtobuf for cross-platform filter storage format\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n---\n\n\u003Cbr>\n\n\u003Cdiv align=\"center\">\n\n## Support Development\n\nwBlock is free and open source.\u003Cbr>\nIf you want to support the project:\n\n\u003Cbr>\n\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fskula\u002Fprojects\u002Fwblock\">\n  \u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fabout-this-hack\u002Fdonate\u002Fbutton@2x.png?color=blue\" alt=\"Donate Button\" width=\"250\" \u002F>\n\u003C\u002Fa>\n\n\u003C\u002Fdiv>\n\n\u003Cbr>\n\n---\n\n\u003Cbr>\n\n\u003Cdiv align=\"center\">\n\n## FAQ\n\n\u003C\u002Fdiv>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>How does wBlock compare to other ad blockers?\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\nCheck out our \u003Ca href=\"Adblock_Comparison.md\">comparison guide\u003C\u002Fa> vs uBlock Origin Lite, Wipr 2, and AdGuard Mini.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Should I install wBlock from the App Store or the DMG\u002FHomebrew release?\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\nThe App Store version is generally preferred because it provides automatic app updates. The DMG\u002FHomebrew release has the same features and is available for users who prefer installing outside the App Store.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Can I use my own filter lists?\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\nYes. You can add any AdGuard-compatible filter list by URL, paste rules directly, or import from a file.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Does wBlock slow down Safari?\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\nNo. 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.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Do userscripts work on iOS and iPadOS?\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\nYes. The userscript engine implements the Greasemonkey API (GM_getValue, GM_setValue, GM_xmlhttpRequest, GM_addStyle) on iOS, iPadOS, and macOS via Safari Web Extensions.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>How often do filters update?\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\nAuto-update intervals are configurable from 1 hour to 7 days, or manually triggered. On macOS, enabling auto-update registers a bundled launch agent that can keep checking while the app is closed through a background update service. On iOS and iPadOS, background checks are best-effort and may wait until the system wakes wBlock or you reopen it. Opening Safari does not trigger updates. Updates use HTTP conditional requests (If-Modified-Since\u002FETag headers) to minimize bandwidth usage.\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Is the element zapper available on iOS and iPadOS?\u003C\u002Fb>\u003C\u002Fsummary>\n\u003Cbr>\nYes. Open the wBlock extension popup in Safari and tap \u003Ci>Activate Element Zapper\u003C\u002Fi>.\n\u003C\u002Fdetails>\n\n\u003Cbr>\n\n---\n\n\u003Cbr>\n\n\u003Cdiv align=\"center\">\n\n### Credits\n\n**[@arjpar](https:\u002F\u002Fgithub.com\u002Farjpar)** · **[@ameshkov](https:\u002F\u002Fgithub.com\u002Fameshkov\u002Fsafari-blocker)** · **[@shindgewongxj](https:\u002F\u002Fgithub.com\u002Fshindgewongxj)**\n\n\u003Cbr>\n\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-Community-5865F2?style=flat&logo=discord&logoColor=white)](https:\u002F\u002Fdiscord.gg\u002FY3yTFPpbXr)\n[![Privacy](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPrivacy-Policy-gray?style=flat)](https:\u002F\u002Fgithub.com\u002F0xCUB3\u002FwBlock\u002Fblob\u002Fmain\u002FPRIVACY_POLICY.md)\n[![Issues](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FReport-Issues-orange?style=flat&logo=github)](https:\u002F\u002Fgithub.com\u002F0xCUB3\u002FwBlock\u002Fissues)\n\n\u003Cbr>\n\nDeveloped by [0xCUB3](https:\u002F\u002Fgithub.com\u002F0xCUB3)\n\n\u003Cbr>\n\n\u003C\u002Fdiv>\n\n---\n\n\u003Cbr>\n\n\u003Cdiv align=\"center\">\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F?repos=0xCUB3%2FwBlock&type=date&legend=bottom-right\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=0xCUB3\u002FwBlock&type=date&theme=dark&legend=bottom-right\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=0xCUB3\u002FwBlock&type=date&legend=bottom-right\" \u002F>\n    \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=0xCUB3\u002FwBlock&type=date&legend=bottom-right\" \u002F>\n  \u003C\u002Fpicture>\n\u003C\u002Fa>\n\n\u003C\u002Fdiv>\n","wBlock 是一款专为 Safari 设计的新一代广告拦截器。它支持 macOS、iOS 和 iPadOS 平台，通过 5 个扩展提供高达 750,000 条规则的拦截能力，并利用 Protocol Buffers 和 LZ4 压缩技术优化存储与性能，同时支持 iCloud 同步设置。wBlock 还具备元素选择器和用户脚本引擎等高级功能，允许用户自定义过滤列表和页面内容修改。适用于需要高效且灵活地管理网页广告及内容的个人或企业用户。",2,"2026-06-11 03:43:24","high_star"]