buresdv/Cork
A fast GUI for Homebrew written in SwiftUI
Missing license — unclear to depend on
worst of 4 axesno license — legally unclear; top contributor handles 94% of recent commits…
no license — can't legally use code; no tests detected
Documented and popular — useful reference codebase to read through.
no license — can't legally use code
- ✓Last commit 1d ago
- ✓4 active contributors
- ✓CI configured
Show 4 more →Show less
- ⚠Small team — 4 contributors active in recent commits
- ⚠Single-maintainer risk — top contributor 94% of recent commits
- ⚠No license — legally unclear to depend on
- ⚠No test directory detected
What would change the summary?
- →Use as dependency Concerns → Mixed if: publish a permissive license (MIT, Apache-2.0, etc.)
- →Fork & modify Concerns → Mixed if: add a LICENSE file
- →Deploy as-is Concerns → Mixed if: add a LICENSE file
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Great to learn from" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/buresdv/cork)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/buresdv/cork on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: buresdv/Cork
Generated by RepoPilot · 2026-05-10 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/buresdv/Cork shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
WAIT — Missing license — unclear to depend on
- Last commit 1d ago
- 4 active contributors
- CI configured
- ⚠ Small team — 4 contributors active in recent commits
- ⚠ Single-maintainer risk — top contributor 94% of recent commits
- ⚠ No license — legally unclear to depend on
- ⚠ No test directory detected
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live buresdv/Cork
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/buresdv/Cork.
What it runs against: a local clone of buresdv/Cork — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in buresdv/Cork | Confirms the artifact applies here, not a fork |
| 2 | Default branch main exists | Catches branch renames |
| 3 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 4 | Last commit ≤ 31 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of buresdv/Cork. If you don't
# have one yet, run these first:
#
# git clone https://github.com/buresdv/Cork.git
# cd Cork
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of buresdv/Cork and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "buresdv/Cork(\\.git)?\\b" \\
&& ok "origin remote is buresdv/Cork" \\
|| miss "origin remote is not buresdv/Cork (artifact may be from a fork)"
# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
&& ok "default branch main exists" \\
|| miss "default branch main no longer exists"
# 4. Critical files exist
test -f "Cork/CorkApp.swift" \\
&& ok "Cork/CorkApp.swift" \\
|| miss "missing critical file: Cork/CorkApp.swift"
test -f "Cork/ContentView.swift" \\
&& ok "Cork/ContentView.swift" \\
|| miss "missing critical file: Cork/ContentView.swift"
test -f "Cork/AppDelegate.swift" \\
&& ok "Cork/AppDelegate.swift" \\
|| miss "missing critical file: Cork/AppDelegate.swift"
test -f "Cork/Enums/Navigation/Navigation Destinations - Main Window.swift" \\
&& ok "Cork/Enums/Navigation/Navigation Destinations - Main Window.swift" \\
|| miss "missing critical file: Cork/Enums/Navigation/Navigation Destinations - Main Window.swift"
test -f "Cork/Logic/App Intents/Currently Installed Packages/Get Installed Casks Intent.swift" \\
&& ok "Cork/Logic/App Intents/Currently Installed Packages/Get Installed Casks Intent.swift" \\
|| miss "missing critical file: Cork/Logic/App Intents/Currently Installed Packages/Get Installed Casks Intent.swift"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 31 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~1d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/buresdv/Cork"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
Cork is a native macOS GUI application written in SwiftUI that wraps Homebrew package management with a fast, modern interface. It solves the problem of Homebrew's CLI-only workflow by providing rich visual features like package tagging, dependency visualization, service management, and cached download clearing—capabilities either impossible or tedious in Homebrew itself. Single-target macOS app structure: Cork/ contains the main SwiftUI application with AppDelegate.swift as entry point, Assets.xcassets/ for custom SF Symbols and branding, and the app icon definition in AppIcon.icon/. Build managed via Tuist (implied by .github/workflows/tuist-test.yml). No visible subdirectories suggest a relatively flat feature-oriented structure without explicit service/state separation layers.
👥Who it's for
macOS users who manage system packages via Homebrew and want a graphical alternative to the command line. Specifically appeals to users who want to track which packages they installed intentionally vs. as dependencies, manage multiple packages at once, or update via the menu bar without opening the main application.
🌱Maturity & risk
Actively developed and production-ready. The codebase is 856KB Swift with proper CI/CD pipelines (GitHub Actions in .github/workflows/swift.yml and tuist-test.yml), code quality tooling (.swiftlint.yml, .swiftformat), and a monetization model (€25 paid version available via corkmac.app alongside free self-compiled builds). Single primary maintainer (buresdv) with recent community contributions acknowledged.
Single-maintainer risk is moderate; the author has delegated translation maintenance to a community Discord. Dependency risk is low—Swift Package Manager dependencies are managed via .package.resolved. The project has a clear NO-AI policy and anti-commercialization safeguards (self-compiled builds bypass license checks via community contributions). No visible breaking API changes in recent history, though SwiftUI's rapid evolution on macOS could introduce compatibility issues.
Active areas of work
Ongoing maintenance and feature iteration. Active GitHub Actions CI runs on each commit (swift.yml and tuist-test.yml). Pull request template is in place and issue templates for bug reports and suggestions exist, indicating organized triage. The .mise.toml file suggests recent adoption of a tool version manager, indicating modernization of the dev setup.
🚀Get running
git clone https://github.com/buresdv/Cork.git
cd Cork
# Install Swift and Tuist as specified in .mise.toml
mise install
# or if using Tuist directly:
tuist generate
tuist build
Daily commands:
tuist generate # Generate Xcode project from Tuist manifests
tuist build # Build the app
# Or in Xcode after tuist generate:
xed . # Opens generated project
# Then build and run via Xcode's play button or:
xcodebuild -scheme Cork -configuration Debug
🗺️Map of the codebase
Cork/CorkApp.swift— App entry point and root SwiftUI window configuration; all contributors must understand the app lifecycle and navigation setup hereCork/ContentView.swift— Main content view hierarchy and state management; critical for understanding how the UI is structuredCork/AppDelegate.swift— App lifecycle management and Homebrew integration initialization; required reading for service and package operation flowsCork/Enums/Navigation/Navigation Destinations - Main Window.swift— Navigation state machine for the primary UI; essential for adding new views or modifying navigation flowCork/Logic/App Intents/Currently Installed Packages/Get Installed Casks Intent.swift— App Intents integration point; demonstrates how Cork exposes package data to Siri and shortcutsCork/Enums/Package Installation/Package Installation Stage.swift— State machine for package installation workflow; core abstraction for all installation operationsCork/Extensions/String - Window IDs.swift— Window ID management for multi-window support; defines how windows are identified and persisted
🛠️How to make changes
Add a new service operation error type
- Define new fatal error case in the Services fatal errors enum (
Cork/Enums/Alerts/Services/Services Fatal Errors.swift) - Add localized error description in Services Alerts - Descriptions.swift (
Cork/Enums/Alerts/Services/Error Details/Services Alerts - Descriptions.swift) - Add user-actionable suggestion in Services Alerts - Suggestions.swift (
Cork/Enums/Alerts/Services/Error Details/Services Alerts - Suggestions.swift) - Update Localizable.xcstrings with new error messages (
Cork/Localizable.xcstrings)
Add a new main window navigation destination
- Add new case to NavigationDestinationsMainWindow enum (
Cork/Enums/Navigation/Navigation Destinations - Main Window.swift) - Create new SwiftUI View file in Cork/ directory or appropriate subdirectory (
Cork/ContentView.swift) - Update ContentView.swift navigationDestination modifier to handle new destination (
Cork/ContentView.swift) - Add localization strings for new view title and buttons (
Cork/Localizable.xcstrings)
Add a new package operation workflow stage
- Define new stage case in appropriate Stage enum (Installation/Updating/Reinstallation) (
Cork/Enums/Package Installation/Package Installation Stage.swift) - Define step cases corresponding to the new stage (
Cork/Enums/Package Installation/Package Installation Steps.swift) - Add localized descriptions for stage and steps in Localizable.xcstrings (
Cork/Localizable.xcstrings) - Update service logic (in Cork/Logic/) to emit new stage during operation execution (
Cork/Logic/App Adoption/Adopt Package.swift)
Add a new Siri shortcut intent
- Create new intent struct conforming to AppIntent in Cork/Logic/App Intents/ (
Cork/Logic/App Intents/Currently Installed Packages/Get Installed Casks Intent.swift) - Implement @Parameter properties and perform() method (
Cork/Logic/App Intents/Currently Installed Packages/Get Installed Casks Intent.swift) - Add localization strings for intent title, description, and parameters (
Cork/Localizable.xcstrings) - Register intent in AppDelegate or CorkApp if global availability needed (
Cork/AppDelegate.swift)
🔧Why these technologies
- SwiftUI — Native macOS UI framework with state-driven rendering; enables fast, responsive GUI for real-time package operations
- AppKit (via AppDelegate) — Low-level macOS integration for menu bar icons, system notifications, and window lifecycle management
- App Intents framework — Native Siri shortcuts integration; allows users to automate package queries and operations without leaving Spotlight
- Process execution (Homebrew CLI) — Cork wraps Homebrew commands via shell; avoids reimplementing package management logic and stays compatible with all Homebrew taps
- UserDefaults / AppStorage — Simple, persistent storage for app settings, window state, and operation preferences without external database dependency
⚖️Trade-offs already made
-
Wrap Homebrew CLI instead of using native package manager API
- Why: Homebrew has no stable public API; wrapping CLI ensures compatibility with all tap configurations and custom Homebrew builds
- Consequence: Performance depends on shell invocation overhead (~100–500ms per command); gains full feature coverage and user customization support
-
Multi-stage operation enums (Installation Stage, Installation Steps, etc.)
- Why: Allows fine-grained progress tracking and state isolation for complex package workflows
- Consequence: Increases enum boilerplate; gains clarity and extensibility for adding new stages without modifying shared operation logic
-
No authentication or privilege escalation UI
- Why: Homebrew operations run as unprivileged user by design; sandbox
- Consequence: undefined
🪤Traps & gotchas
Tuist dependency: Project uses Tuist for generation (tuist generate is required before building; cloning and opening .xcodeproj directly will not work). Homebrew CLI availability: The app wraps Homebrew, so a local Homebrew installation is required at runtime; build may succeed but app will not function without it. Code signing: macOS apps require valid signing; pre-compiled versions are notarized, but self-compiled builds may encounter Gatekeeper warnings unless signed with a valid developer certificate. SwiftUI version coupling: Targets likely macOS 11+ or 12+; exact minimum deployment target not visible but check Tuist manifest once cloned. No package.json / CocoaPods: This is pure Swift with SPM only, so traditional iOS/Swift dependency managers don't apply.
🏗️Architecture
💡Concepts to learn
- SwiftUI State Management (Observable Objects) — Cork's UI must react to Homebrew package state changes (installed, updated, removed); SwiftUI's @State, @ObservedObject, and @EnvironmentObject patterns are critical for binding UI to data.
- Process Spawning & CLI Output Parsing — Cork wraps Homebrew by executing
brewcommands and parsing JSON/text output; Foundation'sProcessclass and string parsing are core to fetching and displaying package lists 10x faster. - macOS Menu Bar Integration (NSStatusBar) — A key feature is updating packages from the menu bar without opening the main window; this requires NSStatusBar and NSStatusItem for background tasks.
- SF Symbols & Custom Symbol Rendering — Cork uses custom SF Symbol definitions (all
.symbolsetdirs in Assets); understanding how to author and scale vector symbols is essential for UI consistency and icon contributions. - macOS App Sandboxing & Code Signing — Pre-compiled Cork is notarized and signed; understanding sandbox entitlements is necessary for self-compiled builds to bypass Gatekeeper and access Homebrew's CLI.
- Tuist Project Generation — Cork uses Tuist instead of raw Xcode projects, allowing version-controlled build config; understanding Tuist manifests is essential for modifying build targets or dependencies.
- Dependency Graph Traversal — A core Cork feature is showing which packages a given package is a dependency of; this requires traversing Homebrew's dependency graph efficiently.
🔗Related repos
Homebrew/brew— The core package manager that Cork wraps; understanding Homebrew's CLI output and structure is essential for Cork development.mas-cli/mas— Similar macOS package manager GUI wrapper (for Mac App Store) in Swift; shares architectural patterns for wrapping CLI tools in native UIs.Homebrew/homebrew-bundle— Complementary Homebrew feature for declarative package lists; Cork could integrate with Brewfile exports as an enhancement.SwiftUI/swift-docc— Apple's documentation generation framework; relevant for adding inline code docs to Cork's SwiftUI components.realm/SwiftLint— The exact linter Cork uses (.swiftlint.ymlis present); understanding its rules and plugins is necessary for passing CI.
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add SwiftLint enforcement to CI/CD pipeline
The repo has a .swiftlint.yml configuration file but no GitHub Actions workflow to enforce linting on PRs. This prevents code style violations from merging and maintains consistency across contributions. The swift.yml workflow exists but doesn't include SwiftLint validation steps.
- [ ] Add swiftlint step to
.github/workflows/swift.ymlto runswiftlinton all Swift files - [ ] Configure the workflow to fail if SwiftLint violations are found
- [ ] Test locally by running
swiftlintagainst Cork/ directory to ensure configuration is valid - [ ] Document the linting requirements in
CONTRIBUTING.mdso contributors know to run SwiftLint before submitting PRs
Create unit tests for AppDelegate lifecycle and core initialization
The Cork/AppDelegate.swift file exists but there are no corresponding test files visible in the structure. Testing the app delegate's lifecycle methods (e.g., applicationDidFinishLaunching, applicationShouldHandleReopen) is critical for ensuring the app initializes correctly and handles state management properly.
- [ ] Create
CorkTests/AppDelegateTests.swiftwith test cases for app launch initialization - [ ] Add tests for Homebrew integration initialization in AppDelegate
- [ ] Update
.github/workflows/swift.ymlor.github/workflows/tuist-test.ymlto ensure tests run on every PR - [ ] Document testing conventions in
CONTRIBUTING.mdwith examples from AppDelegateTests
Add comprehensive asset validation workflow for custom SF Symbols
The repo contains 25+ custom SF Symbol definitions in Cork/Assets.xcassets/ (custom.spigot.badge.plus, custom.brain.slash, etc.) but no validation that these symbols render correctly or are properly configured in Contents.json files. A workflow to validate SVG assets and their metadata would catch configuration errors early.
- [ ] Create a new GitHub Actions workflow in
.github/workflows/calledasset-validation.yml - [ ] Add steps to validate that all
.symbolsetdirectories inCork/Assets.xcassets/have validContents.jsonfiles - [ ] Include SVG validation to ensure all custom symbol SVGs are well-formed and can be rendered
- [ ] Add a validation script in the repo root that can be run locally (referenced in
CONTRIBUTING.md)
🌿Good first issues
- Add unit tests for Homebrew package parsing logic. The repo has CI setup for testing but no visible test targets in the file list; creating
CorkTests/with tests for package listing (10x speed improvement mentioned in README) would validate a core differentiator.: CreateCork/Models/BrewPackage.swifttests in a new test target, mocking Homebrew CLI output to verify the fast parsing logic works correctly. - Improve accessibility. Cork has custom SF Symbols and a rich UI but no
.accessibility(...)modifiers visible in the file list. Audit SwiftUI views for missing labels, hints, and rotor support.: Add@Accessiblewrapper to custom symbol buttons inCork/Assets.xcassets/definitions or the view files that use them, ensuring VoiceOver users can navigate package management. - Add Changelog / Release Notes template. The repo has GitHub issue and PR templates but no automated changelog generation or release notes in
.github/workflows. This would improve transparency for the paid vs. free version split.: Create.github/workflows/changelog.ymlthat auto-generates release notes from merged PRs using a tool likerelease-drafter, and add aCHANGELOG.mdfile with entries for the current version.
⭐Top contributors
Click to expand
Top contributors
- @buresdv — 94 commits
- @genucoder — 4 commits
- @matracey — 1 commits
- @cch1rag — 1 commits
📝Recent commits
Click to expand
Recent commits
f8233ab— ~ Xcode-select in README (buresdv)dc145ff— + Consumption of global Homebrew environment (buresdv)5eb45e4— ~ Version Bump (buresdv)1856e53— Merge branch 'main' of https://github.com/buresdv/Cork (buresdv)b858849— Merge branch 'main.installed-as-dependency-error-fix' (buresdv)b6f8f60— ^ #617 - Package details not loading (buresdv)eb9d236— ~ Package details parser optionals forinstalledAsDependency&installedOnRequest(buresdv)8342efa— Update CODE_OF_CONDUCT.md (buresdv)ad5b8fa— + Demo in bug report template (buresdv)225d985— ~ PR template rewording (buresdv)
🔒Security observations
Cork appears to be a well-structured SwiftUI application for Homebrew management. The visible project structure shows good organization and adherence to macOS development conventions. However, the static analysis is limited by the absence of actual file contents for critical components including dependency manifests, entitlements configuration, source code files, and CI/CD workflows. The main security concerns are: (1) unverified dependency security posture in .package.resolved, (2) unknown system permission requests in entitlements, (3) potential input validation issues in Homebrew command execution (high-risk area), and (4) unreviewed workflow configurations. The application's purpose of wrapping the Homebrew package manager makes secure command injection prevention critical. No hardcoded secrets or obvious misconfigurations were detected in the file structure alone. Additional code review is strongly recommended before production deployment.
- Medium · Missing Dependency Manifest Analysis —
.package.resolved. The .package.resolved file is present but its contents were not provided for analysis. This file contains locked dependency versions and is critical for identifying known vulnerabilities in third-party packages. Without reviewing this file, potential vulnerabilities in dependencies cannot be fully assessed. Fix: Provide the contents of .package.resolved for dependency vulnerability scanning. Regularly run 'swift package resolve' and use tools like OWASP Dependency-Check or Snyk to identify known vulnerabilities in dependencies. - Low · Potential Entitlements Configuration Review Needed —
Cork/Cork.entitlements. The Cork.entitlements file is present but its contents were not provided. Entitlements define what system resources the app can access on macOS. Overly permissive entitlements could pose a security risk. Fix: Review the entitlements file to ensure only necessary capabilities are requested. Follow the principle of least privilege by removing any unused entitlements. - Low · AppDelegate Implementation Not Reviewed —
Cork/AppDelegate.swift. The AppDelegate.swift file exists but its contents were not provided. AppDelegates often handle sensitive initialization logic, security policies, and system integration points that could have security implications. Fix: Review AppDelegate implementation to ensure: no hardcoded secrets, proper SSL/TLS certificate validation, secure storage of sensitive data, and proper error handling without exposing system details. - Low · GitHub Workflows Not Fully Analyzed —
.github/workflows/. GitHub Actions workflow files are present (.github/workflows/swift.yml and .github/workflows/tuist-test.yml) but their contents were not provided. CI/CD pipelines can introduce security risks through insecure secrets management, code execution, or dependency resolution issues. Fix: Audit workflow files for: secure secrets handling (never hardcode credentials), dependency pinning to prevent supply chain attacks, minimal permissions in workflow tokens, and secure artifact handling. - Low · Source Code Files Not Reviewed —
Cork/*.swift files. Multiple Swift source files are listed (ContentView.swift, CorkApp.swift, etc.) but their contents were not provided for code-level security analysis. This limits the ability to identify injection vulnerabilities, insecure data handling, or cryptographic weaknesses. Fix: Conduct code review focusing on: input validation and sanitization, secure handling of package manager commands (preventing shell injection), secure credential storage, and proper error handling without information disclosure.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.