Skip to content
CAI
Software that uses CAICheck a score

alielsokary/CaskHub

61.3

Adequate · 1 October 2026

16.2k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

CaskHub is a macOS application that provides a graphical interface for managing Homebrew Casks, enabling users to browse, install, update, and uninstall software packages. It extends standard Homebrew functionality by offering artifact-aware adoption of external applications, comprehensive system health diagnostics, and disk usage management. The system features a customizable UI with grid and list views, integrated help documentation, and automated background updates via Sparkle.

Features

Add Brewfile export and import to Shelf Setup

The Shelf Setup page now includes a Brewfile card that allows users to export their installed casks to a Brewfile and import casks from an existing Brewfile. The export feature saves a list of installed cask tokens to a user-selected file, while the import feature parses a selected Brewfile, identifies new and skipped entries, and presents a preview sheet where users can select which casks to install.

CaskHub/Views/Manage · high confidence

Add Homebrew path picker and organize settings models

Users can now select the Homebrew installation location (Apple Silicon, Intel, or a custom path) via a new picker in the settings. This change introduces the \HomebrewLocationSettingsModel\ and associated protocols to handle path resolution and validation, and reorganizes the \SettingsModels.swift\ file to group these new capabilities alongside existing general settings like launch-at-login and app management permissions.

CaskHub/Services/Settings · high confidence

Add in-app Help center with topic-based navigation

Users can now access a dedicated Help center within the app, featuring a sidebar with topics such as Getting Started, Homebrew Setup, Install & Update, Adopting Apps, Permissions, and Troubleshooting. Each topic provides detailed guidance, status checks (e.g., Homebrew installation status), and direct actions like opening settings or navigating to specific catalog sections.

CaskHub/Views/Help · high confidence

Add macOS profiling and build automation scripts

New scripts have been added to the \script/\ directory to support macOS development and performance analysis. \build\_and\_run.sh\ automates building the CaskHub app and provides modes for running, debugging with LLDB, viewing logs, and verifying the process. \profile\_ui.swift\ enables automated UI interaction and performance profiling by driving the app via macOS Accessibility APIs, supporting actions like scrolling, mode switching, and sidebar navigation. \analyze\_cpu\_trace.swift\ parses xctrace XML exports to aggregate and report CPU profiling data, including leaf hotspots and frame weights.

script · high confidence

Automated release pipeline with notarization and Sparkle updates

The release process is now automated via a new \Scripts/release.sh\ script that handles archiving, Developer ID signing, Apple notarization, and stapling. It generates a Sparkle-compatible appcast for automatic updates and publishes a draft GitHub release with versioned download links. Additionally, bundled CaskFlow category data is refreshed from remote releases before packaging, and a separate script is provided to upload dSYMs to Sentry for crash reporting.

Scripts · high confidence

Configures Sparkle auto-updates and telemetry secret injection

The app now includes configuration for Sparkle auto-updates, with automatic downloads and silent updates explicitly disabled so users see the standard update prompt. It also sets up secret-injection build configurations for Sentry crash reporting and TelemetryDeck analytics, requiring developers to provide the respective DSN and App ID via a local secrets file.

Configs · high confidence

Initial project configuration and build scheme setup

The CaskHub Xcode project is initialized with a new project.pbxproj file that registers the complete source tree, including application modules, settings views, maintenance tools, and telemetry integrations (Sentry, TelemetryDeck), alongside their corresponding test suites. A new shared Xcode scheme (CaskHub.xcscheme) is added to configure the build, test, and launch environments for the application.

CaskHub.xcodeproj · high confidence

Initialize Xcode workspace configuration

The project now includes the standard Xcode workspace structure, adding the workspace data file (contents.xcworkspacedata) and shared workspace settings (WorkspaceSettings.xcsettings). This establishes the foundational workspace container for the CaskHub project, allowing the IDE to manage the project scheme and build settings correctly.

CaskHub.xcodeproj/project.xcworkspace · high confidence

Introduce CaskHub design system tokens

The app now uses a centralized design system for its visual appearance. ColorTokens defines a brand palette with adaptive light/dark colors for backgrounds, glass surfaces, text, and action states. SurfaceTokens establishes consistent spacing, corner radii, and layout constraints for cards and the catalog grid. TypographyTokens sets the font families (Baloo 2, Nunito, JetBrains Mono) and introduces a three-position text size slider (standard, larger, largest) that scales catalog text independently of macOS display scaling.

CaskHub/DesignSystem/Tokens · high confidence

Introduce CaskHub design system with brand fonts, glassmorphism, and cask action components

This change adds the foundational visual layer for the app, including the registration of brand fonts (Baloo2, Nunito, JetBrainsMono) and a suite of reusable SwiftUI components. Users will see the new glassmorphism aesthetic via the GlassPanel and WindowBackdrop, the branded BarrelMark logo, and consistent action controls (Install, Adopt, Update, Open, Clean Up) through ActionCapsuleButton and ActionCapsuleLabel. The update also introduces the CaskOperationCapsule for displaying download and operation progress with byte-level details, and updates the TopBarView to include a 'Greedy' updates toggle alongside existing sort and period filters.

CaskHub/DesignSystem/Components · high confidence

Introduce app theming, sidebar navigation, and cask analytics models

This change adds the foundational data models for several new user-facing capabilities. AppTheme defines system, light, and dark appearance modes with preview images and an apply method, enabling users to switch the app's visual theme. SidebarItem introduces the navigation structure, including Discover (Browse, Featured, Top Charts, Recently Added) and Library (Installed, Updates, Adopt Apps) sections, along with Shelf Setup and Maintenance entries, providing the backbone for the new sidebar UI. CaskAnalytics adds support for displaying download counts over 30-day, 90-day, and 365-day periods, powering the Top Charts feature. Additionally, Cask.swift introduces ArtifactStanza to parse cask artifact details (apps, binaries, adoption source paths, package identifiers) for adoption planning, and CaskIconURL provides URLs for fetching cask icons from CaskFlow and App Fair.

CaskHub/Models · high confidence

Introduce grid and list view modes with browse sections and scroll reveal

The main catalog view now supports switching between grid and list layouts, persisted across app launches. The grid displays a hero card followed by browse sections or a full cask grid, while the list view features a house-picked hero row, browse sections, and a scroll-triggered reveal sentinel for paginated loading. Both modes respect a global text size preference and handle search result headers and error states consistently.

CaskHub/Views · high confidence

Introduces artifact-aware adoption planning and explicit conflict recovery for Homebrew casks

CaskHub now detects and offers to adopt external applications and packages that match cask metadata, allowing users to manage them through the app rather than leaving them as unmanaged external installs. When operations encounter conflicts or errors, the system now provides specific recovery actions—such as replacing with Homebrew, repairing and reinstalling, or adopting existing apps—so users can resolve issues without manual intervention.

CaskHub/Services/Homebrew/Coordination · high confidence

New Health and Freshness maintenance capabilities

The app now includes a Health maintenance page that runs Homebrew diagnostics (including \brew doctor\) and displays system health status. It also introduces passive background checks to detect when Homebrew or the CaskFlow collection has a newer release available, updating the UI to show if an update is current or available.

CaskHub/ViewModels · high confidence

New Homebrew infrastructure services for permission probing, application discovery, and process execution

This change introduces a suite of new infrastructure components in the Homebrew service layer to improve reliability and accuracy of package management. AppManagementPermission now probes macOS privacy gates by attempting harmless writes in protected bundles, ensuring accurate permission status without relying on unavailable query APIs. ApplicationDiscovery and ApplicationOwnershipResolver scan /Applications and user directories to detect installed apps, validate their executability, and resolve ownership against Homebrew cask signatures, while filtering out helper apps and partial installer leftovers. HomebrewCommandExecutor and BrewProcessRunner manage brew command execution with a global turn-based lock to prevent conflicts, support pseudo-terminals for proper output formatting, and handle process cancellation via signal trees. BrewOutputCollector and BrewOutputAggregator parse brew's pty output off the main thread, strip progress noise and tap-trust advisories, and preserve UTF-8 fidelity for error reporting. HomebrewLocator detects compatible brew installations across Apple Silicon and Intel architectures, and HomebrewInstallationScanner orchestrates the full scan of casks, applications, and packages to produce an installation snapshot.

CaskHub/Services/Homebrew/Infrastructure · high confidence

New Maintenance page with Health checks and Disk usage management

A new Maintenance view has been added, featuring a Health card that runs Homebrew Doctor checks and displays pass/fail status with expandable details, alongside widgets for Homebrew version and sync status. The view also includes a Disk Card that visualizes disk usage by category with a usage bar, lists cached installers, and allows users to clean specific categories, showing a green checkmark for empty categories.

CaskHub/Views/Maintenance · high confidence

New Settings interface with Appearance, General, and Update tabs

The application now features a dedicated Settings window organized into tabs, replacing the previous configuration approach. Users can customize the app's visual style via the Appearance tab, which offers theme selection cards and a three-position text size slider (Standard, Larger, Largest) that scales UI elements like cards and the sidebar. The General tab allows users to control startup behavior (launch at login) and manage the visibility of 'Adopt Apps' in the sidebar. The Updates tab provides controls for automatic update checks and a manual 'Check Now' button with status feedback. Additionally, an About tab displays version information and links to community support channels.

CaskHub/Views/Settings · high confidence

New catalog services for category localization, recent casks, and download metadata

The app introduces dedicated services in the Catalog and Downloads areas to improve data handling and user experience. CategoryService now localizes category names via a catalog lookup keyed by stable ID, falling back to English names, and enriches cask data with verified application identities and package candidates. RecentlyAddedService provides a cached, off-main-thread way to query recently added casks within configurable time windows (30, 60, or 90 days). DownloadMetadataProvider efficiently determines download sizes using HEAD requests or Range headers with caching. BrewAPIClient and CaskFlowReleases handle fetching cask data and release assets off the main thread to prevent UI hangs.

CaskHub/Services/Catalog · high confidence

New domain models for cask adoption, operation state, and maintenance diagnostics

This change introduces a set of new domain types in the Homebrew service layer to support artifact-aware cask adoption planning, structured operation state management, and system health diagnostics. CaskAdoptionPlan defines the logic for adopting external applications or package installers as Homebrew casks, handling version comparisons and execution strategies (adopt, update, downgrade). CaskOperationState and CaskOperationProgress model the lifecycle of cask actions, including phases like downloading and verifying, with byte-level progress tracking and recovery actions for failures. Additionally, Brewfile.swift provides parsing and serialization for cask entries in Brewfiles, while MaintenanceReport.swift adds parsers for brew doctor output and cleanup statistics to support a health maintenance page. These types collectively enable safer, more transparent cask adoption and better visibility into Homebrew operations and system health.

CaskHub/Services/Homebrew/Domain · high confidence

New shared UI components and action alert system for cask management

This change introduces a suite of new shared views in CaskHub/Views/Shared to standardize the cask browsing and management experience. CaskCardView and CaskRowView provide consistent card and list-row layouts for displaying cask information, including icons, descriptions, and metadata. CaskIconView handles icon rendering with support for CLI-only casks and loading states. CaskInfoPopover displays detailed cask properties, such as download size and version relationships. Crucially, CaskActionAlerts centralizes the presentation of user-facing alerts for cask operations, including adoption confirmations, permission requests, uninstallations, and error handling, ensuring a unified interaction model across the app.

CaskHub/Views/Shared · high confidence

Behavioural changes

Catalog view model refactored with performance optimizations and new sorting logic

The CaskCatalogViewModel has been restructured to improve performance and user experience. Search input is now debounced before filtering to reduce processing load, and the catalog list uses scroll-triggered reveal to cap the number of rendered rows, improving scrolling smoothness. Sorting behavior has been updated so that casks with collation-equal names share a rank, ensuring stable and consistent ordering. Additionally, the view model now precomputes search keys and localized name ranks to accelerate filtering and sorting operations.

CaskHub/ViewModels/Catalog · high confidence

Improved icon caching with faster retry for manifest-verified icons

The image caching system now distinguishes between icons confirmed by the CaskFlow manifest and those that are not. If a manifest-verified icon fails to load (a 'miss'), the system waits only 15 minutes before retrying, rather than the previous 24-hour delay, ensuring that icons appear quickly after publication or CDN propagation. The cache also now supports purging stale CLI icons and clearing the entire cache (both memory and disk) to reflect updates.

CaskHub/Services/Images · high confidence

Introduce dedicated update service with staged-update handling and hang-telemetry safety

A new UpdaterService in CaskHub/Services/Updates centralizes Sparkle integration, introducing a StagedUpdateGate to surface background-staged updates as user-facing prompts once the current session ends, and pausing crash hang-tracking during Sparkle modal dialogs to prevent false-positive hang reports.

CaskHub/Services/Updates · high confidence

Introduce new sidebar navigation with adoptable apps and text scaling

The app now uses a new SidebarView for navigation, featuring sections for Discover, Library (Installed, Updates, and Adoptable apps), Shelf Setup, Maintenance, and Categories. Users can toggle the visibility of the 'Adopt Apps' section via a new General setting. The sidebar layout and typography now scale dynamically based on the user's text preference, and the brand logo padding has been adjusted for macOS 27.

CaskHub/Views/Sidebar · high confidence

Introduce safe cask adoption and zombie uninstall workflows

CaskHub now supports adopting Homebrew-managed casks that replace existing apps, with preflight checks for conflicts and missing bundle components to prevent data loss. Uninstalling 'zombie' casks (where the app bundle is missing but Homebrew records remain) now uses the --force flag to safely clear the records. The service also handles staged replacements for package artifacts and resumes pending adoptions when the app returns to the foreground after permission approval.

CaskHub/Services/Homebrew/Facade · high confidence

New cask metadata and catalog projection system

The app now uses a new projection layer in the catalog view models to structure and display cask information. This change introduces localized category names (main and subcategories) in cask details, displays the SHA256 hash (including the 'no\_check' status) in the info popover, and shows verified installed app versions. It also adds installation date tracking (install and update times) to the cask info rows and implements a caching mechanism for catalog projections to improve performance.

CaskHub/ViewModels/Catalog/Projection · high confidence

CaskHub now prevents accidental closure by showing a confirmation dialog when quit is requested while background operations are active, and it adds a native macOS help center with a dedicated window and system-level search integration for topics like installation, updates, and permissions.

CaskHub/App · high confidence

Updated bundled catalog data and localized strings

The bundled resource files in CaskHub/Resources have been refreshed with new data and translations. The categories.json catalog now includes new categories such as "Office Tools" and "AI & LLMs", along with updated token-to-category mappings. The Localizable.xcstrings file has been added or updated to support translations for Russian, Ukrainian, and Traditional/Simplified Chinese, covering UI elements like version suffixes, download counts, and theme labels. Additionally, the added\_dates.json file has been updated to reflect the latest cask addition timestamps.

CaskHub/Resources · high confidence

Fixes

Introduce structured telemetry and refined error reporting

The telemetry system now uses a centralized \Analytics+Events\ file to send typed signals for cask actions, navigation, and settings, while \CrashReporter\ has been updated to filter out non-actionable noise—specifically ignoring task cancellations, disk-full states, truncated payloads, and common network errors—and to pause hang tracking during modal dialogs and background I/O to reduce false positives.

CaskHub/Services/Telemetry · high confidence

Test coverage

Added integration tests for Homebrew cask adoption, conflict recovery, and artifact identity; Added telemetry and crash-reporting tests; Added test coverage for Homebrew domain logic; Added test coverage for Homebrew infrastructure components; Added test coverage for catalog sorting, filtering, and download metadata; Added tests for Homebrew cask adoption workflows; Added tests for Homebrew cask detection and installation logic; Added tests for Homebrew operation coordination and mutation recovery; Added tests for Homebrew presentation and maintenance view models; Added tests for cask metadata projection logic; Added tests for macOS application menu contract and termination coordination; Added view-layer tests for core UI components and behaviors; Consolidated test support infrastructure for CaskHub.

Dependencies

Added Swift Package Manager dependency resolution file

The project now includes a Package.resolved file that pins the versions of three Swift Package Manager dependencies: sentry-cocoa (version 9.21.0) for error reporting, Sparkle (version 2.9.4) for automatic updates, and TelemetryDeck's SwiftSDK (version 2.14.1) for telemetry. This ensures consistent dependency versions across development and build environments.

(dependencies) · high confidence

Housekeeping

Project documentation and tooling configuration added

The repository now includes configuration files for SwiftLint and SwiftFormat to standardize code style, along with a comprehensive CHANGELOG, CONTRIBUTING guide, Code of Conduct, and Security Policy. The README has been expanded with installation instructions, feature descriptions, and localization credits, and the appcast.xml is now versioned to support the Sparkle auto-update mechanism.

(repo-wide) · 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 69 → 61 (-7.4)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 98 → 94 (-4.2)
  • Architecture 94 → 93 (-0.9)
  • Maturity 65 → 65 (-0.0)
  • Readiness 62 → 46 (-15.9)
  • Security 77 → 77 (+0.0)

Resolved (5)

  • Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
  • Documentation: no contributor guidance (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • MethodTooLong: LocalHomebrewService.isInstalled (CaskHub/Services/Homebrew/Facade/LocalHomebrewService.swift)

New (31)

  • Duplicated block (10 lines × 2) (CaskHub/App/CaskHubHelpSearch.swift)
  • Duplicated block (10 lines × 2) (CaskHub/DesignSystem/Components/TopBarView.swift)
  • Duplicated block (6 lines × 2) (CaskHub/Views/Manage/ShelfSetupView.swift)
  • Duplicated block (7 lines × 2) (CaskHub/DesignSystem/Components/CaskActionsView.swift)
  • Duplicated block (8 lines × 2) (CaskHub/Models/SidebarItem.swift)
  • Hotspot: CaskHub/Services/Homebrew/Domain/InstallReceipt.swift (CaskHub/Services/Homebrew/Domain/InstallReceipt.swift)
  • Hotspot: CaskHub/Services/Homebrew/Domain/LocalHomebrewError.swift (CaskHub/Services/Homebrew/Domain/LocalHomebrewError.swift)
  • Hotspot: CaskHub/Services/Homebrew/Infrastructure/InstallationIndexBuilder.swift (CaskHub/Services/Homebrew/Infrastructure/InstallationIndexBuilder.swift)
  • Hotspot: CaskHub/Services/Images/ImageCacheService.swift (CaskHub/Services/Images/ImageCacheService.swift)
  • ImageCacheService.downloadHashedImage (cognitive 21) (CaskHub/Services/Images/ImageCacheService.swift)
  • ImageCacheService.fetchImage (cognitive 19) (CaskHub/Services/Images/ImageCacheService.swift)
  • ImageCacheService.refreshHashedImage (cognitive 17) (CaskHub/Services/Images/ImageCacheService.swift)
  • InstallReceipt.init (cyclomatic 16) (CaskHub/Services/Homebrew/Domain/InstallReceipt.swift)
  • InstallationIndexBuilder.resolveHomebrewApplicationState (cognitive 21) (CaskHub/Services/Homebrew/Infrastructure/InstallationIndexBuilder.swift)
  • InstallationIndexBuilder.resolveHomebrewApplicationState (cyclomatic 18) (CaskHub/Services/Homebrew/Infrastructure/InstallationIndexBuilder.swift)
  • LocalHomebrewError.errorDescription (cognitive 23) (CaskHub/Services/Homebrew/Domain/LocalHomebrewError.swift)
  • LocalHomebrewError.errorDescription (cyclomatic 49) (CaskHub/Services/Homebrew/Domain/LocalHomebrewError.swift)
  • MethodTooLong: ContentView.catalogView (CaskHub/Views/ContentView.swift)
  • MethodTooLong: LocalHomebrewError.errorDescription (CaskHub/Services/Homebrew/Domain/LocalHomebrewError.swift)
  • No assertions: test_conditional_package_candidates_require_receipt_path_and_bundle_agreement (CaskHubTests/Homebrew/Integration/ArtifactIdentityTests.swift)
  • …and 11 more

Changes since last survey

  • 48 commits — 20 feature/other, 28 fixes

By area

  • (repo) — 20 commits
  • CaskHub/Services — 13 commits
  • (root) — 4 commits
  • CaskHubTests/Homebrew — 4 commits
  • CaskHub/Resources — 3 commits
  • CaskHub.xcodeproj/project.pbxproj — 2 commits
  • CaskHub/Views — 2 commits

Notable commits

  • fix: Merge branch 'develop' into fix/install-cancellation
  • fix: Merge branch 'develop' into fix/install-cancellation
  • fix: Merge branch 'develop' into fix/package-identity-candidates
  • fix: Merge pull request #236 from alielsokary/fix/sidebar-logo-padding
  • fix: Merge pull request #242 from alielsokary/feature/fix-app-conflict-recovery
  • fix: Merge pull request #243 from alielsokary/fix/upgrade-diagnostics
  • fix: Merge pull request #244 from alielsokary/fix/install-cancellation
  • fix: Merge pull request #245 from alielsokary/fix/install-success-recovery
  • fix: Merge pull request #247 from alielsokary/feature/fix-composite-app-updates
  • fix: Merge pull request #249 from alielsokary/fix/verified-bundle-identifiers
  • fix: Merge pull request #251 from alielsokary/fix/artifact-identity-detection
  • fix: Merge pull request #253 from alielsokary/fix/package-identity-candidates
  • fix: fix: Accept verified single-component bundle identifiers
  • fix: fix: Detect verified package and generic app artifacts
  • fix: fix: Normalize cask icon sizing and soften frames
  • fix: fix: Polish Russian localization after review
  • fix: fix: Prevent auxiliary package apps from claiming product ownership
  • fix: fix: Translate recovery messages and credit localization contributors
  • fix: fix: Verify conditional package identities against installed receipts
  • fix: fix: adjust sidebar logo top padding for macOS 27
  • …and 28 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

alielsokary/CaskHub 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 1 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit c4d4edb1f2bd70ec5c82e697b160d13958b60576 — 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-e569280dd5e2.