Orchard v2.6.1
Thank you for using Orchard, and for the bug reports, ideas and pull requests that keep making it better. If it's useful to you, please consider starring Orchard on GitHub. It takes a second and helps other people find it.
Changes
Added
- Compose projects create and mount their named and anonymous volumes (#162), with compose 0.8.0. A volume declared under
volumes:is created as<project>_<key>, or under itsname:, and labelled with the project; anexternal: truevolume has to exist already. An anonymous volume (- /data) gets a name made from the project, service and path, so a recreated container finds its data. The project's detail lists its volumes with their kind, size and whether a container mounts them, each linking to the Volumes tab. Down on a project with volumes asks whether to keep them, which is the default, or remove them with their data. A service that mounts a volume is recreated once on its first Up after updating, which is what attaches the volume. The compose plugin offers the matching 0.8.0 update, whosedown -vremoves the volumes too. - A compose project's detail has Show in Finder and Copy Path for its compose file beside Up and Down, in place of the path it used to show (#162).
- A Volumes tab manages named volumes (#161). Each row shows the volume's size on disk, format, age, label count and how many containers mount it, machines included, and a volume's detail adds its creation date, disk image, labels and those containers. Anonymous volumes and a compose project's volumes carry a badge, and a filter shows only the volumes Prune Volumes would offer: ones nothing mounts that aren't a compose project's, which are kept while the project is down. + creates a volume with a name, an optional size (
512M,10G, ascontainer volume create -stakes it) and labels. Delete removes one volume or several after a confirmation, and is turned off while any of them is mounted, with the containers holding them in its tooltip. Prune Volumes opens Free Up Space with only its Volumes section, so it lists what Free Up Space would: compose volumes are kept, and anonymous volumes start ticked. The dashboard's Volumes tile opens the tab, Cmd+K has Create Volume, Prune Volumes and each volume by name, andorchard://volume/<name>links to one. - Run and Edit can mount a named volume or a tmpfs (#161). Each mount row picks Bind Mount, Volume or tmpfs; a volume row picks an existing volume or New Volume..., which creates one there and then. A volume's detail has Run Container... to start from a row already set up with it. A container's detail shows a volume mount by the volume's name and links to it, and the Mounts tab links a volume mount to it too.
- Image inspect lists the paths an image declares with
VOLUME. - Free Up Space on the dashboard removes data nothing uses (#159). The button sits in the Reclaimable tile and opens a list of images no container is made from (running, stopped or a machine's), each with its size and ticked to start with. Stopped containers and volumes no container mounts are sections to turn on, since what they hold can't be got back: anonymous volumes then start ticked and named ones don't. Compose services, cluster nodes, sandboxes, machines, the builder and a compose project's volumes are never listed, nor are the images the runtime itself needs. Ticking a container lists the images and volumes only it used, and each section can select or deselect all of its items. Nothing is removed until you confirm, and just before removing anything Orchard checks again and leaves alone whatever has come into use since. A container that fails to go keeps its image and volumes. When it's done, the sheet shows the space freed, what went, and anything it left or couldn't remove. Removing images also clears out image data that images deleted earlier left behind. The disk usage tiles gain a System tile for the builder and the images the runtime needs, which Containers and Images no longer count, and Reclaimable now shows what Free Up Space can remove rather than everything the runtime calls unused.
- Containers can have DNS aliases on their network (#134). With Apple container 1.6.0 or later, Run and Edit have a DNS Aliases list on the Basic tab. With the DNS domain
test,apimakes the container answer toapi.test, and.gatewayto every name belowgateway.test; a name with a dot is used as it is. The runtime's rules (exact aliases unique across containers, a subtree alias below a name the container owns) are checked by the runtime, and its error shows in the Run or Edit sheet. Aliases show next to the hostname in the container's detail, in the Networks and DNS views, with a subtree alias as*.gateway.test; the DNS list counts a container with an alias under a domain too, and Cmd+K and the Containers search find a container by them. On container 1.5.x the list doesn't appear. - A sandbox is now an isolated workload, with or without a model (#122). A container labelled
com.orchard.sandbox=trueis a sandbox on the label alone, and the Sandbox tab shows how each one is contained: its network mode (NAT, host-only or allow list), its mounts as read-only, read-write or tmpfs masks, its CPUs and memory, and who manages it. The chat tester appears only for a sandbox with a model endpoint. Another app can mark a sandbox as its own withcom.orchard.sandbox.owner: Gannin's sessions show under their own heading with a "Gannin session" badge, here and in the Containers list, and stopping, force stopping, removing or editing one (an edit recreates the container) from anywhere in Orchard (the detail view, the context menu, a bulk action, Cmd+K or the menu bar) asks first, so Orchard doesn't pull a container out from under a running session. A sandbox's detail can now delete it once stopped. - The Compose tab now offers to update the
container composeplugin when it is behind (#155). The installed version is shown at the bottom of the tab, and Update is offered when a newer release is published or when the plugin is older than the compose package Orchard links, since thencontainer compose upin a terminal can bring a file up differently from the window (a 0.6.0 plugin ignoresplatform:). Updating uses the same download, check and single administrator prompt as Install. The latest release is looked up once per visit to the tab; with no network the tab still shows the installed version, and a failed lookup offers nothing beyond that check against Orchard's own package. Versions are compared as numbers, so 0.10.0 is newer than 0.9.0, and a development build is left alone. - Containers can be run as a platform other than the Mac's own (#147). Run and Edit have a Platform picker listing what the image offers, read without pulling it on container 1.6.1 or from the image itself when it is already here. Automatic picks the Mac's platform when the image has it and otherwise the one it offers, as
container rundoes, so an image published only forlinux/amd64now runs on Apple silicon under Rosetta. If Rosetta is not installed the sheet says so before anything is created and offers to install it. The platform is kept when a container is edited, recovered or recreated, a compose service'splatform:is honoured, and a container that is not the Mac's architecture shows a badge in its detail view. The kernel stays the Mac's: only the container's userspace is translated. - Orchard now notices when Apple container is not installed and offers to install it (#145). Instead of a "not running" screen whose Start button could only fail, the window explains what is missing and offers Install container 1.6.1: it downloads Apple's signed package for the version Orchard supports, checks it is signed by Apple's container team, installs it behind one administrator prompt and starts the system with the default kernel. Each step is shown as it happens. Declining the prompt or a failed install leaves the manual instructions on screen, and the menu bar panel shows the same state.
Changed
- A container Orchard creates with a DNS domain now has that domain in its hostname, as
container rundoes:gateway.testrather thangateway(#134). A subtree alias has to sit below the hostname, so.gatewayneeds it. A container with no DNS domain, and a Compose service, keep the bare name. - Sandboxes Orchard makes are now stamped
com.orchard.sandbox.owner=dev.andon.orchardandcom.orchard.sandbox.networkfrom the network chosen, a stopped sandbox on a host-only network now reads Isolated rather than Egress open, and ahost-onlylabel on a network Orchard can see has internet access is not shown as isolated. - Orchard now builds against Apple container 1.6.1 (containerization 0.53.0), up from 1.6.0 (containerization 0.52.1), and Install container installs 1.6.1 (#152). Nothing Orchard calls changed shape.
Fixed
- Up on a compose project reads its file again first, so an edit made since the Compose tab was opened is what runs, rather than the file as it was (#162). A file that now asks for something not yet reviewed stops Up and says to review it, and one that no longer parses says why, with the line.
- Named volumes, tmpfs mounts and block mounts are kept when Orchard recreates a container (#160). Recovering an auto-removed container, or removing one of its mounts, mounted every other mount as a virtiofs share, so a container with
-v pgdata:/datacame back with a share of the volume's disk image in place of the volume, and a tmpfs mount as a share of nothing. Editing a container dropped them altogether. Each mount now comes back as it was, with the same volume and the same options, and Edit lists them with their type (the form still adds only host directories). The Mounts tab names a volume and a block mount instead of showing "Unknown". - A container that fails to run or recreate now says why in its sheet. The error went to the app's alert, which can't appear over a sheet, so pressing Run, Create Sandbox or Save & Recreate seemed to do nothing, or closed the sheet with no word. The Run, Create Sandbox and Edit sheets now show the runtime's message above their buttons and stay open to try again. When the runtime refuses an edit only after the old container is deleted (an alias another container already has, say), the container is put back as it was, published ports included, rather than lost. Removing a mount from a container does the same if its recreate is refused, keeping the mount.
- Recovering a container, or recreating one to remove a mount, keeps each published port's host address, so a port published on
127.0.0.1is no longer widened to every interface. - Right-clicking a running container in the Containers list no longer offers Remove, which failed because only a stopped container can be removed. A mixed selection offers to remove just its stopped containers, as the bulk actions and the menu bar already did.
- Editing a container no longer moves it to the default network or drops its DNS domain (#134). Save & Recreate now keeps the network, the DNS domain and its DNS aliases. Removing a mount from a stopped container, and recovering one, no longer move it to the default network either.
- A Compose hook whose process Orchard loses track of is now stopped rather than left running. When waiting on a
post_startorpre_stophook failed, nothing could stop its process, because the client libraries sent the stop signal in a form the container service didn't accept (apple/container#1941). The 1.6.1 libraries fix that, so the process is killed before the failure is reported. - Clusters work on Apple container 1.6.1, which renamed its Kubernetes plugin from
k8stocluster(#146). On 1.6.1 the Clusters tab said the plugin was missing, and new cluster nodes showed as loose containers. Orchard now runscontainer clusterfrom 1.6.1 andcontainer k8sbefore it, and recognises nodes under either label. A cluster made before the upgrade still shows, with a note that the renamed plugin can't see it: Load Image and Write Kubeconfig are off for it, Recreate brings it back under the new plugin with the same settings, and Delete removes its node containers directly. A new cluster's default name follows the plugin's,cluster-devon 1.6.1, and the sidebar's k8s Clusters is now Clusters. - A failed command's alert no longer runs off the screen. Orchard showed everything the CLI wrote, and
container cluster createwrites a progress line every second, so a create that failed after a few minutes gave an alert of hundreds of lines with its OK button out of reach. The alert now shows only the last progress line and at most the last 10 lines of the rest, which is where the error is, and says how many it left out. - Hiding the Dock icon no longer takes Orchard's menu bar and full screen with it (#142). macOS gives a menu-bar-only app no menu of its own, so the previous app's menu stayed up, full screen misbehaved and there was no way back to Settings. The Hide Dock icon toggle is now a Show Dock Icon choice in Settings > General: Always, While a Window Is Open, which shows the Dock icon and menu bar while any Orchard window is open and goes back to the menu bar only when the last one closes, or Never, which keeps Orchard menu-bar-only as before. If you had Hide Dock icon on, you get While a Window Is Open. The menu bar panel also gains Settings and Quit buttons, so both are always within reach.
- The stopped-system screen now shows a prominent "Start Container System" button instead of an unlabeled power icon, with "Starting…" feedback while startup is in progress (#123).
Installation
brew install orchard
Already installed with Homebrew? Update with:
brew upgrade orchard
Download
- Download Orchard-2.6.1.dmg
- Open it and drag Orchard.app to your Applications folder
- Launch Orchard from Applications
Orchard also updates itself: when a new release is out, it offers the update in the app.
Checksums
- SHA256: Orchard-2.6.1.dmg.sha256
System Requirements
- macOS 26 (Tahoe)
- Apple container 1.6.1