oblador/hush
48.9
Weak · 30 September 2026
316
lines of production code
Swift
with JavaScript
2
measurements over time
What this system is
Hush is a cross-platform iOS and macOS application designed to manage and enable a Safari content blocker that filters cookie and tracking consent notices. It provides a unified interface for onboarding users to enable the extension, displaying platform-specific setup instructions and current protection status. The system automates the maintenance of its blocking rules by fetching and compiling external ad-blocking lists into a structured format compatible with browser extension APIs.
Features
Add macOS Safari Content Blocker extension
A new macOS Safari Content Blocker extension named 'Hush' has been added, allowing users to block annoying cookie and tracking consent notices while preserving privacy. The extension is configured via a new Info.plist and entitlements file, which enables app sandboxing and read-only access to user-selected files.
macOS/ContentBlocker · high confidence
Automated blocklist compilation and update script
The application now includes build scripts to automatically fetch external ad-blocking lists (specifically the fanboy-cookiemonster list) and compile them into a final blocklist during the app build process. This change introduces \scripts/fetch-external.js\ to download and validate external sources, and \scripts/build-blocklist.js\ to merge multiple data files, filter ignored rules, and output the compiled list, ensuring the blocklist is kept up-to-date and optimized for the application's needs.
scripts · high confidence
Initial macOS app configuration and window behavior
This change introduces the foundational configuration files for the macOS application, including the app delegate, Info.plist, and entitlements. For users, this establishes that the app will automatically terminate when the last window is closed, disables window tabbing and fullscreen modes, and operates within an app sandbox with read-only file access permissions.
macOS · high confidence
Introduce Adblock filter conversion script for Deno
A new conversion utility in \scripts/src\ translates Adblock-style filter rules (including element hiding, blocking, and domain/resource-type options) into a structured JSON format compatible with modern browser extension APIs. The implementation handles IDN domain conversion via Punycode, maps Adblock resource types to standard equivalents, and validates input by rejecting unsupported CSS selectors like \:has-text\ or \:-abp\.
scripts/src · high confidence
Introduce onboarding and status views for the Hush content blocker
The app now displays a dedicated interface to guide users through enabling the Hush content blocker and to show its current status. When the blocker is disabled, InstructionsView provides platform-specific setup steps: on macOS, it directs users to Safari Preferences, while on iOS, it adapts the navigation path for Settings based on the OS version (iOS 15 vs. iOS 18+). When enabled, EnabledView confirms the protection is active and provides call-to-action links for reporting issues, leaving an App Store review, or starring the project on GitHub.
Shared/Views · high confidence
Removals
Removal of local Xcode project configuration and user-specific settings
The Xcode project file (project.pbxproj) and associated user-specific configuration files (breakpoints and scheme management) for the ConsentMeNot app and its ContentBlocker extension have been deleted. This removes the local build configuration, including the embedding of the ContentBlocker.appex extension and specific debugger breakpoints, from the repository.
ConsentMeNot.xcodeproj · high confidence
Removed initial scaffold files for ConsentMeNot
The initial project scaffold files for the ConsentMeNot location have been removed. This includes the deletion of the CoreData model definition (ConsentMeNot.xcdatamodel), the main app entry point (ConsentMeNotApp.swift), the primary user interface view (ContentView.swift), and the data persistence layer (Persistence.swift). These changes indicate the removal of the default SwiftUI/CoreData template structure that was previously present in this directory.
ConsentMeNot · high confidence
Behavioural changes
Project renamed to Hush with unified iOS and macOS support
The Xcode project has been renamed from ConsentMeNot to Hush, consolidating the build configuration to support both iOS and macOS targets. This change introduces separate schemes for Hush iOS and Hush macOS, configures the embedding of their respective ContentBlocker app extensions, and includes a launch screen for the iOS application.
Hush.xcodeproj · high confidence
Shared app lifecycle and content blocker state management
The app now centralizes content blocker state management in a shared AppState model, automatically refreshing the blocker's enabled status when the app appears or becomes active on both iOS and macOS. The macOS window is configured with a hidden title bar, specific size constraints, and the 'New Window' command is disabled, while the UI uses shared color extensions for background styling.
Shared · high confidence
iOS app branding, launch screen, and configuration updates
The iOS app now displays the name 'Hush' on the home screen and features a new launch screen with a specific background color. The app is restricted to portrait orientation only, and the Info.plist files have been updated to use dynamic version strings and declare that the app does not use non-exempt encryption.
iOS · high confidence
Test coverage
Added UI tests for content blocker settings integration
Added a new UI test suite (\HushUITests\) that verifies the app correctly reflects the state of the Safari content blocker extension. The tests launch the system Settings app to toggle the 'Allow Extension' switch for Hush and confirm that the app displays the corresponding 'extension enabled' or 'extension disabled' status, handling accessibility scrolling and timing delays inherent in system settings interactions.
HushUITests · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 56 → 49 (-7.0)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 69 → 68 (-0.4)
- Architecture 69 → 69 (+0.0)
- Maturity 57 → 57 (+0.0)
- Readiness 43 → 31 (-12.5)
- Security 97 → 97 (+0.0)
Resolved (3)
- Documentation: no installation or build instructions (README.md)
- Documentation: no licence statement (README.md)
- Documentation: no usage examples (README.md)
New (3)
- Documentation: no contributor guidance (README.md)
- convert.mapOptionsToTrigger (cognitive 18) (scripts/src/convert.js)
- convert.mapOptionsToTrigger (cyclomatic 28) (scripts/src/convert.js)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
oblador/hush was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 30 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 2e96f4f7cde66ecf12f27c75b2c4cd5e64708728 — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-cb25ca4feafa.