Contained shells out to Apple's container binary. If onboarding can't find it:
- Install it from the container releases (it lands in
/usr/local/binor/opt/homebrew/bin). - If it's somewhere else, set the full path in Settings → Runtime.
- Confirm in a terminal:
container --versionshould print1.0.0.
The onboarding screen runs container system start. If it fails:
- Run
container system startyourself in a terminal and read the error. - A first-time kernel install may be required — Contained surfaces this; it can trigger an admin-password prompt handled by the CLI. The app never asks for or stores your password.
Kernel and DNS operations (System → Kernel & DNS) may prompt for admin rights. That prompt comes from the container CLI / macOS, not Contained. Use Reveal CLI on the action to see the exact command before running it.
- The updater is inert in development builds by design — it only runs in a signed release build pointed at the appcast feed.
- Make sure you installed a released
.dmg(see Installation), not a locally-builtContained.app. - Check your channel in Settings → Updates. Each channel reads a branch-hosted appcast feed, and fresh pre-1.0 installs default to Nightly. Nightly also receives promoted Beta and Stable appcast items.
Switch Settings → Updates → Update channel to Beta or Nightly. Nightly is rebuilt from the nightly branch and may be rough. You can switch back to Stable at any time; you'll simply wait for the next stable build to catch up.
Apple container's structured stats formats are static, while container stats --format table is the public streaming surface. When the Containers screen is visible and Contained is active, it keeps one low-priority table stream open for the running containers and converts every frame into cards, widgets, history, and Stats-tab metrics. When that screen is hidden or the app is inactive, Contained instead takes one batched snapshot per runtime every five minutes. macOS may defer those low-priority snapshots, and Contained does not collect after it quits, so History charts intentionally break across long gaps. The container list itself still follows Settings → General → Data → List refresh interval.
Use Settings → General → Data → Normalize stats to choose whether CPU and memory percentages are scaled per container or against Apple container's machine CPU and memory resources. Switching modes resets the visible sparkline buffers so the chart does not mix differently scaled samples.
That's the app-managed restart policy (container has no native --restart). Check the container's restart policy in its Edit form, or its healthcheck (a failing healthcheck can trigger a restart). The History tab shows the restart/health events.
Card styles are stored locally, keyed by container id (its stable name) with an image-level fallback — they are not written as container labels. Edit-in-place preserves the name so styles re-attach. If you delete and recreate with a different name, set the style to apply per-image so it follows the image.
defaults delete com.contained.app
rm -rf ~/Library/Application\ Support/ContainedYour containers, images, and volumes belong to the container runtime and are untouched.
Still stuck? Ask in Discussions Q&A if you need help understanding the behavior. Open an issue when you have an actionable bug, crash, regression, or tracked feature request.