RepoPilotOpen in app →

buresdv/Cork

A fast GUI for Homebrew written in SwiftUI

Mixed

Missing license — unclear to depend on

worst of 4 axes
Use as dependencyConcerns

no license — legally unclear; top contributor handles 94% of recent commits…

Fork & modifyConcerns

no license — can't legally use code; no tests detected

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isConcerns

no license — can't legally use code

  • Last commit 1d ago
  • 4 active contributors
  • CI configured
Show 4 more →
  • 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 ConcernsMixed if: publish a permissive license (MIT, Apache-2.0, etc.)
  • Fork & modify ConcernsMixed if: add a LICENSE file
  • Deploy as-is ConcernsMixed 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.

RepoPilot: Great to learn from
[![RepoPilot: Great to learn from](https://repopilot.app/api/badge/buresdv/cork?axis=learn)](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:

  1. 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.
  2. 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.
  3. 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 |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>buresdv/Cork</code></summary>
#!/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).

</details>

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 here
  • Cork/ContentView.swift — Main content view hierarchy and state management; critical for understanding how the UI is structured
  • Cork/AppDelegate.swift — App lifecycle management and Homebrew integration initialization; required reading for service and package operation flows
  • Cork/Enums/Navigation/Navigation Destinations - Main Window.swift — Navigation state machine for the primary UI; essential for adding new views or modifying navigation flow
  • Cork/Logic/App Intents/Currently Installed Packages/Get Installed Casks Intent.swift — App Intents integration point; demonstrates how Cork exposes package data to Siri and shortcuts
  • Cork/Enums/Package Installation/Package Installation Stage.swift — State machine for package installation workflow; core abstraction for all installation operations
  • Cork/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

  1. Define new fatal error case in the Services fatal errors enum (Cork/Enums/Alerts/Services/Services Fatal Errors.swift)
  2. Add localized error description in Services Alerts - Descriptions.swift (Cork/Enums/Alerts/Services/Error Details/Services Alerts - Descriptions.swift)
  3. Add user-actionable suggestion in Services Alerts - Suggestions.swift (Cork/Enums/Alerts/Services/Error Details/Services Alerts - Suggestions.swift)
  4. Update Localizable.xcstrings with new error messages (Cork/Localizable.xcstrings)

Add a new main window navigation destination

  1. Add new case to NavigationDestinationsMainWindow enum (Cork/Enums/Navigation/Navigation Destinations - Main Window.swift)
  2. Create new SwiftUI View file in Cork/ directory or appropriate subdirectory (Cork/ContentView.swift)
  3. Update ContentView.swift navigationDestination modifier to handle new destination (Cork/ContentView.swift)
  4. Add localization strings for new view title and buttons (Cork/Localizable.xcstrings)

Add a new package operation workflow stage

  1. Define new stage case in appropriate Stage enum (Installation/Updating/Reinstallation) (Cork/Enums/Package Installation/Package Installation Stage.swift)
  2. Define step cases corresponding to the new stage (Cork/Enums/Package Installation/Package Installation Steps.swift)
  3. Add localized descriptions for stage and steps in Localizable.xcstrings (Cork/Localizable.xcstrings)
  4. 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

  1. Create new intent struct conforming to AppIntent in Cork/Logic/App Intents/ (Cork/Logic/App Intents/Currently Installed Packages/Get Installed Casks Intent.swift)
  2. Implement @Parameter properties and perform() method (Cork/Logic/App Intents/Currently Installed Packages/Get Installed Casks Intent.swift)
  3. Add localization strings for intent title, description, and parameters (Cork/Localizable.xcstrings)
  4. 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 brew commands and parsing JSON/text output; Foundation's Process class 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 .symbolset dirs 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.
  • 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.yml is 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.yml to run swiftlint on all Swift files
  • [ ] Configure the workflow to fail if SwiftLint violations are found
  • [ ] Test locally by running swiftlint against Cork/ directory to ensure configuration is valid
  • [ ] Document the linting requirements in CONTRIBUTING.md so 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.swift with test cases for app launch initialization
  • [ ] Add tests for Homebrew integration initialization in AppDelegate
  • [ ] Update .github/workflows/swift.yml or .github/workflows/tuist-test.yml to ensure tests run on every PR
  • [ ] Document testing conventions in CONTRIBUTING.md with 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/ called asset-validation.yml
  • [ ] Add steps to validate that all .symbolset directories in Cork/Assets.xcassets/ have valid Contents.json files
  • [ ] 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.: Create Cork/Models/BrewPackage.swift tests 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 @Accessible wrapper to custom symbol buttons in Cork/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.yml that auto-generates release notes from merged PRs using a tool like release-drafter, and add a CHANGELOG.md file with entries for the current version.

Top contributors

Click to expand

📝Recent commits

Click to expand
  • 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 for installedAsDependency & 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.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Mixed signals · buresdv/Cork — RepoPilot