Bushel is a macOS SwiftUI app for managing Apple containers through the container CLI.
It provides a desktop UI for:
- Listing, starting, stopping, restarting, and deleting containers
- Opening logs, running one-off commands, and attaching an interactive shell
- Pulling, building, pruning, and inspecting images
- Creating and deleting volumes and networks
- Viewing container system status and disk usage
- macOS with Xcode installed
- Apple container CLI installed and available locally
- A machine that can run the checked-in deployment target in the Xcode project
Install the CLI with:
brew install container- Open
Bushel.xcodeprojin Xcode. - Update the app signing configuration for your machine.
- Build and run the
Bushelscheme. - If needed, open Settings in the app and point Bushel at your
containerbinary.
Notes:
- The project does not assume a specific local signing setup. Configure signing for your own machine in Xcode before building for the first time.
- The default CLI path in the app is
/usr/local/bin/container. - The current Xcode project targets macOS
26.2.
Bushel/BushelApp.swift: app entry point and shared environment stateBushel/ContentView.swift: sidebar and top-level section routingBushel/Models: decoded container CLI response modelsBushel/Services: shell execution, container/image/network/volume/system services, and terminal session supportBushel/ViewModels: observable app state and async actionsBushel/Views: SwiftUI screens for each resource areaBushelTestsandBushelUITests: test targets
Bushel shells out to the Apple container binary rather than embedding a custom backend. JSON-formatted CLI output is decoded into Swift models and displayed in SwiftUI views. Long-running operations such as logs, image pulls, image builds, and terminal sessions are streamed through the service layer.
- The app structure is cleanly split by model, service, view model, and view.
- Interactive container management is implemented across all major resource types.
- Tests are mostly template stubs today and do not yet validate core behavior.
- The CLI binary path is user-configurable in
Bushel/Views/SettingsView.swift. - Most container operations are routed through
Bushel/Services/ShellService.swift. - A bundled spec document is present at
mac_container_manager_spec.pdf.