andrew-waters/orchard
65.0
Adequate · 1 October 2026
25.4k
lines of production code
Swift
primary language
2
measurements over time
What this system is
Orchard is a macOS desktop application that provides a unified graphical interface for managing local container infrastructure, including Docker containers, Kubernetes clusters, and container machines. It enables users to build and run images, manage networks and DNS, and monitor real-time resource usage through a comprehensive dashboard. The system also extends into local AI workflows by allowing the configuration of model servers and sandboxed environments, while supporting Docker Compose projects and automated updates.
How it got here
2025 — Orchard application development
20 changes.
The project was rebranded from Container Desktop to Orchard, establishing a comprehensive macOS interface for managing containers, images, networks, and other infrastructure resources. This period focused on building core SwiftUI views, implementing deep linking and auto-update capabilities, and adding extensive test coverage for both logic and user interfaces.
2026 — comprehensive UI and service architecture overhaul
11 changes.
This period focused on restructuring the application's backend into a per-domain service architecture while simultaneously introducing a comprehensive suite of new management interfaces for Kubernetes, container machines, AI models, and builds. The work also included significant frontend enhancements such as a redesigned website, native macOS settings integration, and live resource monitoring dashboards to improve usability and system visibility.
Features
Add local Kubernetes cluster management views
This change introduces the user interface for managing local Kubernetes clusters within the Orchard app. It adds a Clusters list view to browse, search, and select clusters, along with a Cluster detail view that displays resource usage statistics, lists cluster nodes, and provides actions such as opening a terminal, writing the kubeconfig, loading images, and deleting the cluster. A new Create Cluster sheet allows users to configure cluster settings including name, resource overrides, Kubernetes version, and custom CNI manifests, while also supporting cluster recreation. The views include specific handling for single-node cluster limitations and plugin availability checks.
Orchard/Views/Features/Clusters · high confidence
Added Xcode schemes for Orchard and OrchardUITests
New Xcode scheme files have been added for the main Orchard application and the OrchardUITests target. These schemes configure the build, test, launch, profile, analyze, and archive actions, enabling developers to run unit tests, execute UI tests, and profile the application directly from Xcode.
Orchard.xcodeproj/xcshareddata · high confidence
Introduce AI Models and Sandboxes domains with local server management
The app now features dedicated views for managing local AI models and sandboxed containers. Users can create and manage managed model servers (e.g., mlx\_lm) with configurable ports and network binding, view detected external providers, and edit endpoint settings. A new Sandboxes domain allows users to launch containers wired to these local models, with clear visibility into network isolation and endpoint connectivity. An in-app chat tester is also available to validate model responses directly from the model or sandbox detail views.
Orchard/Views/Features/Models · high confidence
Introduce Compose project management with review, status tracking, and plugin installation
This change adds a new Compose feature area to the Orchard UI, allowing users to add Docker Compose projects via file selection. It introduces a review sheet that highlights unsupported or ignored configuration findings before a project is added, and a detail view that splits project status into 'Running' and 'Problems' tabs to show active containers and any unacknowledged issues. Additionally, it provides a dedicated installer sheet for the \container compose\ CLI plugin, addressing cases where the plugin is missing (e.g., after a Homebrew upgrade), and includes a project list view with context menu actions for managing projects.
Orchard/Views/Features/Compose · high confidence
Introduce container machine management UI with lifecycle and configuration controls
This change adds a new Machines section to the Orchard UI, providing a list view, creation wizard, and detail pane for managing container machines. Users can now create machines by specifying an image, name, CPU/memory limits, and home directory mount mode (read/write, read-only, or none), with warnings displayed if the selected image lacks an init system. Existing machines can be edited to adjust resources, nested virtualization, and custom kernels, with options to apply changes immediately (requiring a restart) or on the next boot. The detail view displays machine status, resource usage statistics, and diagnostic banners for stopped machines, while the list view supports starting, stopping, setting defaults, and deleting machines.
Orchard/Views/Features/Machines · high confidence
Introduce dedicated log viewer with multi-pane support and ANSI rendering
Users can now view container and machine logs using a new, dedicated log viewer window (MultiLogView) that supports splitting into multiple panes for side-by-side comparison. The viewer features a unified target picker to switch between containers and machines, with specific boot-log options for machines. Logs are rendered in a shared console component (LogConsoleView) that supports cross-line text selection, copy-paste, and ANSI color codes. The in-container Logs tab has been updated to use this new console and includes a button to open the full viewer, while the viewer itself provides controls to pause/resume log streaming and filter text with match counts.
Orchard/Views/Features/Logs · high confidence
Introduce live resource monitoring with historical charts
The Stats tab has been redesigned as a Dashboard that displays live, time-series charts for CPU, memory, network, and disk usage. This new view includes a system-wide aggregate dashboard showing total resource consumption across all containers, a fleet table with sparkline history for quick status checks, and detailed per-container panels with selectable time windows (5 minutes to 24 hours). The dashboard also features a dedicated section for system disk usage that refreshes on a slower cadence to avoid performance overhead, and now includes support for displaying resource statistics for host machines.
Orchard/Views/Features/Stats · high confidence
Introduce native macOS Settings interface with new user preferences
The application now uses a native macOS Settings scene (accessible via ⌘,) featuring two tabs: General and System. The General tab allows users to select their preferred terminal application, configure the container shell command, choose a custom container binary path, set the DNS domain, and toggle a new 'Hide Dock icon' option to keep the app available only in the menu bar. The System tab displays read-only daemon properties such as Rosetta build status and image builder configuration. System properties are loaded once upon opening the settings window to avoid redundant fetches.
Orchard/Views/Features/Settings · high confidence
Introduce sidebar navigation for new infrastructure and AI resources
The sidebar now includes navigation tabs for newly added or reorganized features, specifically Machines, k8s Clusters, AI Models, Sandboxes, DNS, Networks, and Registries. This change updates the sidebar structure to support these areas, assigning specific icons and titles (e.g., 'k8s Clusters' for clusters, 'AI Models' for models) to improve discoverability of these resources within the application.
Orchard/Views/Layout/Sidebar · high confidence
New Builds tab with build history, live logs, and container management
A new Builds tab has been added to the Orchard interface, featuring a list of all builds initiated by the application (including those restored from previous sessions) and a detail view for individual builds. Users can now monitor build progress via live logs, cancel active builds, and view the resulting image's reference. The detail view also displays containers currently using the built image and provides options to launch new containers from that image or delete the build record and associated image, with safeguards preventing deletion while containers are in use.
Orchard/Views/Features/Builds · high confidence
New Images management interface with build, search, and multi-select capabilities
The Images tab now features a complete set of new SwiftUI views for managing container images. Users can build images directly from the app via a new Build Image sheet that supports custom Dockerfiles, context directories, and platform selection, with streaming logs. A new Image Search view allows browsing and pulling images from Docker Hub or pulling by direct reference. The main list view supports sorting by name, tag, or size, filtering for in-use images, and multi-select for batch deletion. An Image Detail Header provides quick actions to run containers, view the originating build, or delete images.
Orchard/Views/Features/Images · high confidence
New automation scripts for demo environments, screenshot capture, and releases
Added a suite of scripts to support development and documentation workflows: \demo-env-up.sh\ and \demo-env-down.sh\ provision and tear down a realistic local demo environment (containers, Kubernetes cluster, DNS, builds) for testing and screenshots; \capture-screenshots.sh\ automates capturing both light and dark theme screenshots of the Orchard UI using accessibility APIs and \screencapture\; \orchard-ax.swift\ provides the underlying macOS accessibility and window-capture helper; \demo-model-server.py\ stubs local AI model providers so the AI Models tab is populated; and \release.sh\ automates the version bump, changelog update, and git tagging process.
scripts · high confidence
New network management views and batch deletion support
The Networks feature now includes dedicated SwiftUI views for managing container networks. Users can create new networks with optional subnets and key-value labels via the new AddNetworkView, view network details and connected containers in NetworkDetailView, and manage networks in the sidebar via ListNetworks. A key behavioral addition is support for batch deletion: users can select multiple networks (including shift-range selection) and delete them together from the list context menu or the new MultiNetworkCards view. The default network remains protected from deletion.
Orchard/Views/Features/Networks · high confidence
New resource tables, command palette, and UI components
This change introduces several new SwiftUI components for the Orchard interface. A new ⌘K command palette provides a Raycast-style floating panel for fuzzy-searching resources and executing global or per-entity actions, with dedicated keyboard handling to prevent keystroke leaks. New table components (ContainerTable, NetworkTable, StatsTableView) display resources with consistent styling, sortable columns, and sparkline charts for live CPU, memory, and network stats. Supporting components include ListItemRow for list items with sandbox/plugin badges, DetailViewButton with loading glow animations, NumericStepperField for bounded integer inputs, and SelectionHandler for standard macOS shift/command selection behavior. Existing UI components like ContainerImageRow and MountRow are also included.
Orchard/Views/Components · high confidence
New state views for container version and status errors
Added three new SwiftUI views in the States directory to handle specific system states: NewerVersionView displays when the installed Apple Container version is older than required and offers to proceed anyway; VersionIncompatibilityView appears when the container version is incompatible with this Orchard build and provides upgrade instructions; and NotRunningView shows when the container is not running, including a diagnostics disclosure group to copy error details.
Orchard/Views/States · high confidence
Orchard app launch with deep links, auto-updates, and terminal automation entitlements
The Orchard application is introduced, providing a macOS interface for managing containers. The app supports the orchard:// URL scheme for deep linking to tabs and resources, and includes Sparkle-based automatic updates. To enable the terminal launcher to drive Terminal.app and iTerm2 via AppleScript under the hardened runtime, the app entitlements now include com.apple.security.automation.apple-events, resolving notarization issues. The app also features a command palette (Cmd+K), a menu bar extra for resource monitoring, and a settings scene.
Orchard · high confidence
Orchard website redesign with new documentation pages and dark mode
The Orchard website has been redesigned with a warm, light style and mono-accented typography, featuring a new hero layout and a screenshot-led feature grid. This update adds dedicated documentation pages for Kubernetes Clusters, Container Machines, and Local AI (including sandboxes and MLX model bridging), while also introducing a site-wide dark mode toggle and zoomable images for better readability.
site · high confidence
Redesigned container management with unified forms, detail views, and bulk actions
The Containers feature has been overhauled with new SwiftUI views that improve usability and functionality. A shared \ContainerConfigForm\ now powers both Run and Edit flows, ensuring consistent configuration for DNS, networks, ports, volumes, and labels, while fixing a bug where edits previously stripped labels and dropped the command override. The \ContainerDetailView\ replaces the old tabbed interface with a single-page layout featuring live resource stats, membership banners linking to clusters or compose projects, and a responsive two-column grid that stacks on narrow panes. The container list now supports grouping by label with collapsible sections, sorting, and bulk actions (start, stop, remove) via \MultiContainerCardsView\. Additionally, users can now export a container's filesystem as a tar archive using the new \ContainerExportFlow\.
Orchard/Views/Features/Containers · high confidence
Removals
Removed initial application entry point and placeholder view
The initial application entry point (Container\_DesktopApp.swift) and the default placeholder ContentView have been removed from the project. This cleanup eliminates the default SwiftUI scaffolding that previously displayed a generic 'Hello, world!' screen with a globe icon, preparing the codebase for the introduction of the actual application structure.
Container Desktop · high confidence
Architecture
Introduces per-domain service architecture and unified alert handling
The application's service layer has been restructured from a monolithic facade into distinct, per-domain services (such as Builder, Cluster, Network, and Image services) wired together by a new AppServices container. This change introduces a centralized AlertCenter that distinguishes between user-initiated errors and background poll failures, preventing background refresh timers from storming the user with modal dialogs. Additionally, a new ANSIText service enables proper rendering of ANSI color codes and styles in log views, and a Command Palette provides unified keyboard navigation across all app sections.
Orchard/Services · high confidence
Behavioural changes
Application renamed to Orchard and linked to new framework dependencies
The Xcode project has been renamed from "Container Desktop" to "Orchard", updating the application bundle, test targets, and internal references. Additionally, the main application target now links several new framework dependencies: Sparkle (for auto-updates), ComposeModel, ComposeParser, and ComposePlanner (for compose support), and ContainerAPIClient and MachineAPIClient (for container backend support).
Orchard.xcodeproj · high confidence
Project renamed from Container Desktop to Orchard
The Xcode project has been renamed from 'Container Desktop' to 'Orchard'. This change updates the workspace configuration files to reflect the new project name, ensuring that the development environment correctly references the renamed project structure.
Orchard.xcodeproj/project.xcworkspace · high confidence
Redesigned DNS domain management with new list, detail, and multi-select views
The DNS feature has been rebuilt with new SwiftUI views to improve usability and interaction. Users can now manage DNS domains through a dedicated list view (ListDNS) that supports search, single and multi-selection (including shift-click ranges), and context menu actions like setting a default domain or deleting. A new detail view (DNSDetailView) displays containers associated with a specific domain, while a new add domain sheet (AddDNS) includes input validation for domain names and optional localhost redirect addresses. Multi-selection is further supported by a card-based summary view (MultiDNSCards) for batch operations like deletion. These changes replace the previous interface, offering a more structured and flexible way to handle DNS configurations.
Orchard/Views/Features/DNS · high confidence
Redesigned menu bar as a resource dashboard
The menu bar panel has been replaced with a new dashboard view that displays segmented resource rings for CPU and memory usage across running containers, along with a detailed per-container breakdown list. This new interface includes start/stop controls for individual containers and the system, and provides a hover-activated history panel for system metrics.
Orchard/Views/Features/MenuBar · high confidence
Redesigned mounts management with batch selection and multi-mount deletion
The Mounts view has been rewritten to support selecting multiple mounts simultaneously. Users can now use Command+A to select all mounts or click rows to build a selection set, enabling batch operations such as copying source/destination paths for multiple mounts at once. A new multi-mount card view displays details for selected mounts, and a dedicated 'Remove selected mounts' action allows users to delete multiple mounts in a single confirmation step, which recreates the associated containers without those mounts. The list also includes an 'in use' filter to show only mounts currently attached to running containers.
Orchard/Views/Features/Mounts · high confidence
Redesigned registries detail view with extracted header component
The registries detail view has been refactored into a single-page layout, separating the header into its own \RegistriesDetailHeader\ component. The main detail view now presents a scrollable content area with adjusted vertical spacing and removed header background styling. This view specifically informs users that registries cannot be listed within the app due to container limitations and provides a copyable terminal command for manual login via the clipboard.
Orchard/Views/Features/Registries · high confidence
Redesigned three-column interface with unified layout and selection handling
The main application window now uses a three-column layout (sidebar, list, detail) that replaces the previous navigation structure. This change introduces unified selection state management across all resource types (containers, images, mounts, machines, clusters, DNS, networks, etc.), ensuring that selections persist and sync correctly as data loads or changes. The interface includes a new command palette (Cmd-K), improved empty states, and specific filters for running containers, in-use images, and mounts. Additionally, the layout supports grouping containers by label and sorting options, providing a more consistent and navigable experience for managing local infrastructure resources.
Orchard/Views/Layout · high confidence
Test coverage
Added UI smoke test harness for core user flows; Added test coverage for core services and UI components; Removal of user-specific Xcode scheme and UI test scaffolding.
Dependencies
Updated Swift package dependencies
The project's Swift Package Manager lock file has been updated to resolve dependencies to specific versions, including container 1.5.0, compose 0.3.0, Sparkle 2.9.4, and grpc-swift-2 2.4.0, among others.
(dependencies) · 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 59 → 65 (+6.3)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 91 → 87 (-4.1)
- Architecture 99 → 99 (+0.6)
- Maturity 43 → 60 (+17.5)
- Readiness 54 → 55 (+1.3)
- Security 83 → 83 (+0.0)
Resolved (8)
- Change coupling: ContainerDetail.swift ↔ DashboardView.swift (Orchard/Views/Features/Containers/ContainerDetail.swift)
- Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Hotspot: Orchard/Services/ANSIText.swift (Orchard/Services/ANSIText.swift)
- Hotspot: Orchard/Services/ContainerBackend.swift (Orchard/Services/ContainerBackend.swift)
- Hotspot: Orchard/Services/ImageService.swift (Orchard/Services/ImageService.swift)
- Members sharing a duplicated core (5 members, 50+ identical tokens) (Orchard/Views/Components/UIComponents.swift)
New (124)
- CLIParsers.swift.parseSystemProperties (cognitive 19) (Orchard/Services/CLIParsers.swift)
- Change coupling: ListContainers.swift ↔ ListImages.swift (Orchard/Views/Features/Containers/ListContainers.swift)
- ContainerDetailHeader.body (cognitive 27) (Orchard/Views/Features/Containers/ContainerDetailHeader.swift)
- ContainerDetailHeader.body (cyclomatic 22) (Orchard/Views/Features/Containers/ContainerDetailHeader.swift)
- ContainerRow.body (cognitive 22) (Orchard/Views/Components/UIComponents.swift)
- ContainerTable.body (cognitive 35) (Orchard/Views/Components/ContainerTable.swift)
- ContainerTable.body (cyclomatic 19) (Orchard/Views/Components/ContainerTable.swift)
- ContainersListView.contextMenu (cyclomatic 20) (Orchard/Views/Features/Containers/ListContainers.swift)
- ContentView.body (cyclomatic 16) (Orchard/Views/Layout/Content.swift)
- DetailContentView.body (cognitive 16) (Orchard/Views/Layout/DetailContent.swift)
- DetailContentView.body (cyclomatic 20) (Orchard/Views/Layout/DetailContent.swift)
- Duplicated block (10 lines × 2) (Orchard/Views/Components/ListItemRow.swift)
- Duplicated block (10 lines × 2) (Orchard/Views/Features/Machines/ListMachines.swift)
- Duplicated block (10 lines × 2) (Orchard/Views/States/NewerVersion.swift)
- Duplicated block (10 lines × 4) (Orchard/Views/Features/Clusters/ClusterDetail.swift)
- Duplicated block (10–12 lines × 2) (Orchard/Services/CLIParsers.swift)
- Duplicated block (11 lines × 2) (Orchard/Views/Features/Containers/ContainerDetailHeader.swift)
- Duplicated block (11 lines × 3) (Orchard/Views/Features/Clusters/ListClusters.swift)
- Duplicated block (12 lines × 2) (Orchard/Views/Components/ContainerTable.swift)
- Duplicated block (12 lines × 2) (Orchard/Views/Features/Containers/ContainerConfigForm.swift)
- …and 104 more
Changes since last survey
- 44 commits — 43 feature/other, 1 fixes
By area
- Orchard/Services — 11 commits
- (root) — 10 commits
- Orchard/Views — 8 commits
- site/assets — 5 commits
- scripts/capture-screenshots.sh — 3 commits
- Orchard.xcodeproj/project.pbxproj — 2 commits
- Orchard.xcodeproj/project.xcworkspace — 2 commits
- .github/scripts — 1 commit
- scripts/demo-env-up.sh — 1 commit
- site/ai.html — 1 commit
Notable commits
- fix: Capture the compose screenshots, and fix what capturing them found
- change: Add a Compose tab
- change: Address review: IPv6 authorities, legacy key scope, silent endpoints
- change: Address the review on #106
- change: Adds compose details
- change: Build against Apple container 1.5.0 and adopt its cluster changes
- change: Bump version to 2.4.1
- change: Bump version to 2.4.2
- change: Bump version to 2.4.3
- change: Bump version to 2.5.0
- change: Capture the Builds tab, and open every tab on a chosen row
- change: Capture the light screenshot set
- change: Create a bind mount's host directory when it is not there
- change: Create the demo compose project the way proceeding in Orchard does
- change: Fill the demo environment's gaps, and wait for chart history
- change: Fill the empty tabs in the demo environment, where it can
- change: Fold a compose run into the table it was describing
- change: Follow compose to its current path, and to 0.3.0
- change: Follow the package's project labels to their own namespace
- change: Give the tables one style, and one that does not move
- …and 24 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
andrew-waters/orchard 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 b7c16b6a48083fd993ee6d98506b74765dce5195 — 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.