Container Compose 0.2.0
One native macOS Xcode app combining the existing AppleContainerCompose orchestration engine and the supplied ACDry Swift 1.1.0 monitor, with one container-compose CLI. Requires Apple silicon, macOS 26+, Xcode 26+ and Apple's container runtime. No Docker daemon, Go or Python is required to run it. Xcode fetches Yams for YAML parsing; Python 3 is used only by CLI tests.
Build
Open ContainerCompose.xcodeproj, choose ContainerCompose, and Run. The Container Compose.app product includes container-compose in Contents/MacOS. Choose Save Command-Line Tool… in the application menu to export it. Alternatively run ./Scripts/install-cli.sh to build and install the CLI into /opt/homebrew/bin; override PREFIX if desired. The installer uses a fresh temporary build directory and preserves old accompose/acdry installations.
The Compose tab opens existing compose.yaml/docker-compose.yml files and exposes Up, Down, Restart, Status, Logs, Pull, Build and runtime diagnostics. GUI Up is detached. The Monitor & Resources tab supplies the acdry dashboard, Containers, Images, Networks, Volumes and Projects. Opening YAML supplies its project name to monitoring. Resource lists remain runtime-wide unless the Projects filter applies. The executable selected in Settings is shared by both GUI engines. CLI discovery uses PATH and Homebrew fallback locations.
Monitor features retained: CPU/memory/network charts, six-minute in-memory history, measured receive/transmit rates, freshness indicators, searchable resource lists, inspect, polling logs with follow, stats, processes, verified lifecycle actions, explicit deletion/prune confirmations, mount references and inspect-only host mounts, keyboard shortcuts, and read-only demo mode. Disk read/write totals appear in container lists and Stats when the runtime provides them. Volume capacity is provisioned size, not occupied space. Process inspection needs ps inside the image. There is no fabricated live telemetry when metrics are absent.
CLI
container-compose --help
container-compose doctor
container-compose -f compose.yaml config
container-compose -vvv up -d # returns after startup
container-compose up # streams logs; Ctrl+C gracefully stops services
container-compose up --build -d
container-compose logs [SERVICE] # snapshot
container-compose start|stop|restart [SERVICE]
container-compose exec web sh # interactive terminal when invoked from a terminal
container-compose down # preserves named volumes
container-compose down --volumes
container-compose clean --all --dry-run
container-compose import ./docker-compose.yml
container-compose monitor --help
container-compose monitor watch
container-compose monitor --demo watch --json --count 2
container-compose monitor stats
container-compose monitor logs --follow CONTAINER
container-compose monitor volumes --all-mounts
container-compose monitor volume create -s 1G data
container-compose monitor projects
The monitor namespace retains acdry's CLI commands, including resource inspection, lifecycle, image/network/volume commands, live terminal monitoring and streaming logs. Its global options (--container PATH, --project NAME, --demo) precede its subcommand. Compose service commands and monitor container-ID commands are separate; use monitor --help for exact syntax. Resource prune in this namespace requires --yes and affects all unused resources of the chosen type.
up -d/--detach and verbosity -v/-vv/-vvv remain independent; options work before/after up. Foreground SIGINT/SIGTERM stops reached services in reverse dependency order and preserves containers. A log follower error is reported, and may leave containers running. Existing stopped containers are started; changed configuration requires down/up. Concurrent external runtime changes are not reconciled. Multiple foreground service logs share the terminal without prefixes.
Compose compatibility and gaps
This is a developer preview with partial Compose support, not Docker Compose parity. Supported: YAML service images, Dockerfile build contexts/dockerfile/build args, short ports and volume mounts, environment list/mapping, .env/${VAR} interpolation, command, working_dir, dependency ordering and project-scoped names. Empty named-volume and custom-network declarations, plus explicit default local/bridge drivers, are supported. YAML anchors handled by Yams may work, but Compose extension/merge semantics are not implemented. Treat config as validation plus original YAML, not canonical expanded Docker Compose output.
Unimplemented in this app: profiles, scaling, multi-file merge, include/extends, env_file, healthchecks and health/completion dependency gating, secrets/configs, deploy, watch/rebuild reconciliation, wait, one-off run, cp, events, publish/push, robust Docker shell parsing/interpolation, long port/mount syntax, network attachment options/aliases, external/custom resource names and driver/IPAM configuration. These require further implementation; they are not all Apple runtime limitations. Unknown service/root fields and several unsupported nested options are rejected before runtime changes. Restart policies only produce a warning and have no supervisor. Multiple service networks only attach the first, with a warning. ps lists the whole runtime. Compose logs is a snapshot; use monitor logs --follow ID for streaming outside foreground up.
Apple-runtime differences: this app uses Apple's CLI and per-container Linux VMs, not Docker Engine's API/socket; Docker-socket-dependent tools and Docker Swarm features are not provided. Runtime flags, networking/DNS, image architecture and storage behavior differ from Docker. Do not assume bare Compose service-name DNS works. See Apple's command reference, technical overview and networking guide. Runtime-supported features still need explicit translation in this app.
Bind mounts can create a missing source as a directory; create file bind sources yourself first. Down/clean remove managed containers based on project/service names; verify project names before use. Down --volumes deletes project named-volume data. Host mount files are never deleted by cleanup. Build/install does not automatically start or configure the runtime/kernel.
Source provenance and validation
Compose source: local AppleContainerCompose-Laravel-Fixed, matching the development checkout's ComposeCore. Monitor source: uploaded ACDry-Swift-1.1.0.zip, whose 14 source-package files matched the recovered local 1.1.0 release byte-for-byte before integration. The earlier acdry.zip contained an empty README and Git metadata only. Original projects and archives were preserved. The recovered monitor's MIT license is in ACDry-LICENSE. No upstream Dry Go code is included.
See VALIDATION.md for results and reproduction. The Xcode project is the complete app/CLI build. Package.swift exposes only the monitor-core regression tests. The deliverable is source; local builds require your own signing/notarization for distribution.