[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94567":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":14,"contributorsCount":9,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":16,"hasPages":16,"topics":9,"createdAt":9,"pushedAt":9,"updatedAt":18,"readmeContent":19,"aiSummary":20,"trendingCount":14,"starSnapshotCount":14,"syncStatus":21,"lastSyncTime":9,"discoverSource":22},94567,"CaskHub","alielsokary\u002FCaskHub","alielsokary","Native GUI for Homebrew Casks",null,"https:\u002F\u002Fgithub.com\u002Falielsokary\u002FCaskHub","Swift",711,29,0,45.43,false,"main","2026-08-24 04:01:22","# CaskHub\n\n[![Tests](https:\u002F\u002Fgithub.com\u002Falielsokary\u002FCaskHub\u002Factions\u002Fworkflows\u002Ftests.yml\u002Fbadge.svg?branch=develop)](https:\u002F\u002Fgithub.com\u002Falielsokary\u002FCaskHub\u002Factions\u002Fworkflows\u002Ftests.yml)\n[![Codacy Badge](https:\u002F\u002Fapp.codacy.com\u002Fproject\u002Fbadge\u002FGrade\u002Fb2d4203ef8724bc0a2265af613ac29c9)](https:\u002F\u002Fapp.codacy.com\u002Fgh\u002Falielsokary\u002FCaskHub\u002Fdashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)\n[![codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Falielsokary\u002FCaskHub\u002Fbranch\u002Fdevelop\u002Fgraph\u002Fbadge.svg)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Falielsokary\u002FCaskHub)\n[![macOS](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FmacOS-15.6%2B-blue)](https:\u002F\u002Fgithub.com\u002Falielsokary\u002FCaskHub\u002Freleases\u002Flatest)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-blue.svg)](LICENSE)\n[![Latest release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Falielsokary\u002FCaskHub)](https:\u002F\u002Fgithub.com\u002Falielsokary\u002FCaskHub\u002Freleases\u002Flatest)\n\n\u003Cimg width=\"850\" height=\"250\" alt=\"caskhub-banner-dark\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F24326700-e485-4714-993f-648c2a36c25b\" \u002F>\n\n**A native macOS app store for Homebrew casks.** Browse, search, install, update, and uninstall thousands of Mac apps distributed through [Homebrew](https:\u002F\u002Fbrew.sh) - with original app icons extracted from the source, categories, popularity charts, and one-click actions, all in a clean SwiftUI interface.\n\nCaskHub is 100% free and open source, no subscription, no premium tier, no ads, nothing.\n\n\u003Cimg width=\"1492\" height=\"962\" alt=\"caskhub-dark\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fd7899924-6ade-43cc-a3f9-dcabeac9229b\" \u002F>\n\n## Install\n\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Falielsokary\u002FCaskHub\u002Freleases\u002Fdownload\u002F0.7.0\u002FCaskHub-0.7.0.zip\">\u003Cimg src=\".github\u002Fassets\u002Fdownload-for-macos.png\" alt=\"Download app for macOS\" width=\"194\">\u003C\u002Fa>\n\nOr install with Homebrew:\n\n```bash\nbrew install --cask caskhub\n```\n\n## Features\n\n### Discover\n\n- **Browse** - curated shelves and a rotating hero pick, organized by category\n- **Featured** - the top 100 casks ranked by install popularity\n- **Top Charts** - most-installed casks with a 30 \u002F 90 \u002F 365-day analytics window\n- **Recently Added** - casks newly published to Homebrew in the last 30-90 days\n- **Categories** - every cask classified into browsable categories (Developer Tools, Productivity, Design, and more)\n- **Search** - instant search (⌘F) across names, tokens, and descriptions\n\n### Manage\n\n- **Install \u002F Update \u002F Uninstall** with live progress states and cancellable downloads\n- **Adopt Apps** - bring apps you installed outside Homebrew (a downloaded DMG, another store) under brew management with one click, keeping the app in place\n- **Guided Homebrew setup** - walks you through installing Homebrew if it's missing, supports custom installation paths, and picks the native prefix on both Apple Silicon and Intel\n- **Smart update detection** - skips self-updating apps and normalizes packaging-suffix version differences, so the Updates badge only shows updates that matter\n- **Installed library** - detects what's already in your Caskroom, including apps installed from the command line\n- **Native password prompts** - pkg-based casks that need admin rights get a native macOS dialog instead of a terminal prompt\n- **Rich metadata** - original app icons, download sizes, install counts, homepages, and version info\n\n### Polish\n\n- Grid and list view modes, flexible sorting, light\u002Fdark\u002Fsystem themes\n- A custom design system with bundled typography\n- Bundled category data ships with the app, so browsing never blocks on the network\n- **Built-in app updates** - CaskHub keeps itself up to date via [Sparkle](https:\u002F\u002Fsparkle-project.org)\n\n## How It Works\n\nCaskHub talks to Homebrew on three levels:\n\n1. **Catalog & analytics** come from the public [Homebrew API](https:\u002F\u002Fformulae.brew.sh) (`\u002Fapi\u002Fcask.json` and install analytics). No Homebrew installation is required just to browse.\n2. **Installed-app detection** reads install receipts directly from your Caskroom (`$HOMEBREW_PREFIX\u002FCaskroom`) - fast, and no shelling out needed.\n3. **Installs, updates, and uninstalls** run through your real `brew` binary, so everything CaskHub does stays fully compatible with the command line. Anything you install in CaskHub can be managed with `brew`, and vice versa.\n\nCategories, first-seen dates, and original app icons are produced by the companion [CaskFlow](https:\u002F\u002Fgithub.com\u002Falielsokary\u002FCaskFlow) pipeline and consumed via its GitHub Releases. A bundled snapshot ships inside the app, so none of it blocks launch or requires connectivity.\n\n## Requirements\n\n- **macOS 15.6** or later\n- **[Homebrew](https:\u002F\u002Fbrew.sh)** - required for installing, updating, and uninstalling casks (browsing works without it)\n\n## Building from Source\n\nPrefer building it yourself? You'll need Xcode 26 or later:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Falielsokary\u002FCaskHub.git\ncd CaskHub\nopen CaskHub.xcodeproj\n```\n\nSelect the **CaskHub** scheme and run (⌘R). Xcode resolves the Swift package dependencies ([Sparkle](https:\u002F\u002Fgithub.com\u002Fsparkle-project\u002FSparkle), [Sentry](https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fsentry-cocoa), and [TelemetryDeck](https:\u002F\u002Fgithub.com\u002FTelemetryDeck\u002FSwiftSDK)) automatically.\n\n## Architecture\n\n- **SwiftUI + MVVM** with `@Observable` view models and `@MainActor` isolation\n- **Protocol-based networking layer** for testability (`BrewAPIClientProtocol`, `NetworkServiceProtocol`) with dependency injection throughout\n- **Two-tier icon caching** (memory + disk) and HTTP-header-based download-size resolution\n- **Minimal dependencies** - three focused packages: [Sparkle](https:\u002F\u002Fsparkle-project.org) for app updates, [Sentry](https:\u002F\u002Fsentry.io) for crash reporting, and [TelemetryDeck](https:\u002F\u002Ftelemetrydeck.com) for analytics\n\n## Testing & CI\n\nTests run with XCTest on pull requests to `master` and `develop`, and on pushes to `develop`, with coverage reported to Codecov and static analysis by Codacy. A release-freshness check on PRs to `master` ensures the bundled category data is up to date with the latest CaskFlow release.\n\n```bash\nxcodebuild test -project CaskHub.xcodeproj -scheme CaskHub -destination 'platform=macOS'\n```\n\n## Privacy & Analytics\n\nCaskHub collects anonymous usage analytics through [TelemetryDeck](https:\u002F\u002Ftelemetrydeck.com), a privacy-first analytics service. No personal data or identifiers ever leave your Mac: user IDs are salted and hashed on-device, and there is no tracking across apps or websites.\n\nCaskHub also sends anonymous crash reports through [Sentry](https:\u002F\u002Fsentry.io) to help diagnose and fix stability issues.\n\nYou can opt out of both at any time in **Settings → Privacy**.\n\n## Localization\n\nCaskHub speaks your language. Currently available in:\n\n- 🇬🇧 **English**\n- 🇨🇳 **简体中文 (Simplified Chinese)** — translated by [@carty900-jpg](https:\u002F\u002Fgithub.com\u002Fcarty900-jpg)\n\nmacOS picks the language automatically from your system preferences; a per-app override is available under **System Settings → General → Language & Region → Applications**.\n\nWant CaskHub in your language? Translations live in a single [String Catalog](CaskHub\u002FResources\u002FLocalizable.xcstrings) — open an issue or PR to add yours.\n\n## Contributing\n\nInterested in contributing to CaskHub? We welcome contributions of all kinds!\n\n- **Code contributions**: Bug fixes, features, improvements\n- **Bug reports**: [Found an issue? Let us know](https:\u002F\u002Fgithub.com\u002Falielsokary\u002FCaskHub\u002Fissues\u002Fnew\u002Fchoose)\n- **Feature requests**: [Have an idea? We'd love to hear it](https:\u002F\u002Fgithub.com\u002Falielsokary\u002FCaskHub\u002Fissues\u002Fnew\u002Fchoose)\n\nRead [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request — note that all PRs target the `develop` branch.\n\n## Acknowledgements\n\n- [CaskFlow](https:\u002F\u002Fgithub.com\u002Falielsokary\u002FCaskFlow) — the data pipeline behind CaskHub's categories, Recently Added dates, and app icons\n- [Homebrew](https:\u002F\u002Fbrew.sh) — the package manager CaskHub is built on\n\n## License\n\nCaskHub is released under the [MIT License](LICENSE).\n","CaskHub 是一款专为 macOS 设计的原生图形界面应用，用于管理 Homebrew Casks（即通过 Homebrew 分发的 GUI 应用程序）。它提供浏览、搜索、一键安装\u002F更新\u002F卸载 Cask 应用的功能，支持按类别筛选、流行度排行、最新上架追踪，并能将非 Homebrew 安装的已存在应用“纳管”进 brew 管理体系。基于 SwiftUI 构建，具备原生图标提取、智能版本比对、多架构 Homebrew 自动配置等特性。适用于习惯使用 Homebrew 但希望摆脱命令行、提升 macOS 应用发现与维护效率的开发者和高级用户。",2,"trending"]