Contained is a native macOS control surface for Apple's container CLI. It gives containers, images, volumes, networks, registries, logs, templates, and app-managed health/restart behavior a Mac-first SwiftUI interface without hiding the underlying command line.
Pre-1.0 and actively polishing.
- Run, edit, stop, restart, inspect, and delete containers.
- Browse rich Liquid Glass cards with local-only tint, icon, nickname, and graph personalization.
- Manage images, tags, updates, archives, volumes, networks, registry credentials, templates, activity history, and system resources.
- Import Compose files into editable run forms instead of launching opaque stacks.
- Reveal the exact
containerCLI command before privileged run/edit operations. - Optionally enable the floating toolbar, morph panels, command palette, Docker Hub search, image build workspace, keyboard shortcuts, and Compose import from Settings -> Experimental.
Download the latest .dmg from Releases.
Sparkle updates are built in. During pre-1.0 development, fresh installs default to the Nightly channel so they can receive current builds. Stable, Beta, and Nightly can be changed in Settings -> Updates.
Requirements:
- macOS 26 or later on Apple silicon
- Apple's
containerCLI 1.0.0 onPATH - Xcode 26 / Swift 6.2+ for local development
Contained is a Swift Package.
open Package.swift
swift build
swift test
./scripts/bundle.sh debug
open Contained.appMaintainers use scripts/release.sh and scripts/appcast.sh for signing, notarization, DMG creation, GitHub release notes, and Sparkle appcasts.
The GitHub wiki is the source of truth for feature and implementation notes.
The maintained wiki pages are mirrored in docs/wiki so docs
changes can be reviewed with code changes:
- Start: Features, Installation, Keyboard Shortcuts, Troubleshooting
- Workflows: Creation Workflow, Run / Edit Form, Compose Import, Command Palette, Updates
- Feature areas: Containers, Images, Resources, System & Settings
- Maintainers: Architecture, Design System, Release Runbook, Contributing
The package has two main targets:
ContainedCore: models, CLI command builders, realcontainer --format jsondecoders, and testable service logic.Contained: SwiftUI app shell, design system, navigation, feature views, stores, history, settings, Sparkle support, and app state migration.
Integration is intentionally CLI-based rather than private-framework based. Personalization and app-managed metadata stay local to Contained so the user's container resources remain clean when used directly from the terminal.
Contained is source-available and free for non-commercial use under the PolyForm Noncommercial License 1.0.0. The Contained name and branding are reserved; see NOTICE.