{"id":51392954,"url":"https://github.com/stephenlclarke/container-compose","last_synced_at":"2026-07-04T01:10:47.974Z","repository":{"id":365105598,"uuid":"1270588593","full_name":"stephenlclarke/container-compose","owner":"stephenlclarke","description":"Docker Compose plugin for Apple's container CLI with Homebrew tap.","archived":false,"fork":false,"pushed_at":"2026-07-01T10:25:34.000Z","size":3688,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-01T10:25:56.935Z","etag":null,"topics":["apple-container","compose","compose-go","containers","docker-compose","swift"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stephenlclarke.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-15T21:32:17.000Z","updated_at":"2026-07-01T10:25:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/stephenlclarke/container-compose","commit_stats":null,"previous_names":["stephenlclarke/container-compose"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/stephenlclarke/container-compose","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephenlclarke%2Fcontainer-compose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephenlclarke%2Fcontainer-compose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephenlclarke%2Fcontainer-compose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephenlclarke%2Fcontainer-compose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stephenlclarke","download_url":"https://codeload.github.com/stephenlclarke/container-compose/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephenlclarke%2Fcontainer-compose/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35106672,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-03T02:00:05.635Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apple-container","compose","compose-go","containers","docker-compose","swift"],"created_at":"2026-07-04T01:10:47.473Z","updated_at":"2026-07-04T01:10:47.966Z","avatar_url":"https://github.com/stephenlclarke.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# container-compose\n\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=stephenlclarke_container-compose2\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=stephenlclarke_container-compose2)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=stephenlclarke_container-compose2\u0026metric=bugs)](https://sonarcloud.io/summary/new_code?id=stephenlclarke_container-compose2)\n[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=stephenlclarke_container-compose2\u0026metric=code_smells)](https://sonarcloud.io/summary/new_code?id=stephenlclarke_container-compose2)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=stephenlclarke_container-compose2\u0026metric=coverage)](https://sonarcloud.io/summary/new_code?id=stephenlclarke_container-compose2)\n[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=stephenlclarke_container-compose2\u0026metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=stephenlclarke_container-compose2)\n[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=stephenlclarke_container-compose2\u0026metric=ncloc)](https://sonarcloud.io/summary/new_code?id=stephenlclarke_container-compose2)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=stephenlclarke_container-compose2\u0026metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=stephenlclarke_container-compose2)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=stephenlclarke_container-compose2\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=stephenlclarke_container-compose2)\n[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=stephenlclarke_container-compose2\u0026metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=stephenlclarke_container-compose2)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=stephenlclarke_container-compose2\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=stephenlclarke_container-compose2)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=stephenlclarke_container-compose2\u0026metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=stephenlclarke_container-compose2)\n[![CodeQL](https://github.com/stephenlclarke/container-compose/actions/workflows/codeql.yml/badge.svg?branch=main)](https://github.com/stephenlclarke/container-compose/actions/workflows/codeql.yml?query=branch%3Amain)\n![Repo Visitors](https://visitor-badge.laobi.icu/badge?page_id=stephenlclarke.container-compose)\n\n`container-compose` is a standalone plugin that provides Docker Compose style\nworkflows for Apple's [`container`](https://github.com/apple/container) CLI\nwhere the supported Compose surface maps to available runtime primitives.\n\nThe first implementation target is local-development Compose v2 compatibility\nwhere [`container`](https://github.com/apple/container) has matching runtime\nprimitives. Compose file normalization uses `compose-go`, with Swift handling\nruntime orchestration.\n\nThe CLI accepts the Docker Compose 5.2.0 command and option surface, including\nhelp output. Help color-codes command, subcommand, and option support status:\ngreen for supported, orange for partially supported, and red for not supported;\nuse `--ansi never` for plain output. Commands or option modes that do not yet\nhave backing `apple/container` functionality fail with an explicit\n`unsupported compose feature` message.\n\nThe top-level help output is the quickest support overview. Run\n`container compose COMMAND --help` for command-specific option support.\n\nCurrent detailed gap examples:\n\n- Supported `build` coverage includes Compose build args, additional contexts,\n  file/env build secrets with Docker-compatible ignored ownership metadata,\n  SSH forwarding, cache hints, labels, target stages, platforms, pull/no-cache,\n  builder selection, checks, provenance/SBOM attestations, extra hosts, build\n  network mode, Buildx-compatible isolation acceptance, privileged builds,\n  shared memory size, ulimits, `--print`, and service-context build ordering.\n- Supported `up` coverage includes attach selection, dependency attachment,\n  exit-control flags, raw output flags, timestamps, watch mode, and the\n  attached terminal `--menu` shortcut surface. The menu path supports detach,\n  watch toggle, command-level `--watch` start, graceful stop, force stop\n  shortcuts, and exit-control flags; Docker Desktop-only shortcuts are\n  intentionally absent.\n- Supported service mount coverage includes named volumes, bind mounts,\n  anonymous volumes, tmpfs mounts, long-form tmpfs options, `volumes_from`,\n  Docker-compatible bind `create_host_path` handling, and long-form\n  `volume.labels` preservation. Bind `propagation` values are preserved as\n  runtime mount options. Anonymous `volume.labels` are applied to the created\n  runtime volume; named service mount labels remain config metadata, matching\n  Docker Compose.\n- Supported namespace-mode coverage includes `network_mode: none` and\n  `pid: host`. `network_mode: host` maps to the Stephen fork-backed\n  `container --network host` runtime path while avoiding Compose project network\n  attachment. Service/container namespace-sharing forms remain explicit runtime\n  gaps.\n- Supported network-resource coverage includes top-level network `driver_opts`,\n  which are preserved in config output and passed to Apple network creation as\n  plugin-specific `--option key=value` values. Service network attachment\n  `driver_opts` support is currently limited to Docker-compatible MTU values\n  because Apple attachment options expose MTU but not arbitrary endpoint driver\n  options.\n- Supported device coverage includes service `device_cgroup_rules`, which maps\n  to the fork-backed `container run/create --device-cgroup-rule` runtime path,\n  and service `devices`, which maps Docker Compose device entries to\n  fork-backed `container run/create --device` arguments for supported Linux VM\n  device paths such as `/dev/null` and `/dev/zero`. Device source paths and\n  explicit target paths must be absolute. GPU requests and arbitrary macOS\n  hardware passthrough remain explicit runtime gaps.\n- Supported local Deploy metadata includes replicas, local job modes,\n  stop-first update delays, restart policy fields, CPU/memory reservation\n  hints, and Swarm `endpoint_mode` acceptance as Docker-compatible local\n  metadata.\n- Partially supported commands: `attach` and `up`.\n- Unsupported commands: `commit` and `publish`.\n\nLong-running project loading, image pull/build, and non-interactive runtime\nhandoff steps emit Compose-owned progress on stderr so scriptable stdout output\nstays clean. Use `--progress quiet` to suppress these rows, `--progress plain`\nfor log-friendly rows, or `--progress tty` for the animated terminal spinner.\n`--progress json` emits newline-delimited JSON events for Compose-owned phases.\n`--progress auto` uses the animated spinner when stderr is a terminal and plain\nrows otherwise.\n\nUse `container system version` to see the running `container` runtime source, branch lane, commit, compiled `containerization` ref, and pinned `container-builder-shim` image. Use `container compose version` to see the installed plugin lane, embedded `compose-go` version, and the `container` / `containerization` pins that package was built against.\n\n## Project Repositories\n\nThe supported preview install is a matched Stephen fork-backed stack:\n\n- [`container-compose`](https://github.com/stephenlclarke/container-compose): this plugin and its Swift/Go packaging workflow.\n- [`container`](https://github.com/stephenlclarke/container): the fork-backed runtime and CLI installed beside the plugin.\n- [`containerization`](https://github.com/stephenlclarke/containerization): the Swift runtime package pinned by the stack.\n- [`container-builder-shim`](https://github.com/stephenlclarke/container-builder-shim): the BuildKit bridge image pinned by `container`.\n\nInstall and upgrade commands live in [INSTALL.md](INSTALL.md). Branch, tag, release-helper, and Homebrew lane policy lives in [BRANCHES.md](BRANCHES.md).\n\n## Plugin Recognition\n\nWhen installed correctly, `container help` lists `compose` under `PLUGINS`.\n\n![container help output showing the compose plugin recognised](docs/images/container-help-compose-plugin.png)\n\n## Documentation\n\n- [INSTALL.md](INSTALL.md): install, upgrade, verify, uninstall, recover bad installs, and diagnose runtime issues.\n- [BRANCHES.md](BRANCHES.md): understand `main`, short-lived development branches, semantic tags, `CONTAINER_STACK_RELEASE.sh`, release assets, and Homebrew lane policy.\n- [BUILD.md](BUILD.md): build, test, package, and run contributor validation from source.\n- [DESIGN.md](DESIGN.md): understand the Swift/Go boundary and runtime adapter ownership.\n- [STATUS.md](STATUS.md): get the current dependency pins, blockers, active gaps, and validation handoff.\n- [CONTRIBUTING.md](CONTRIBUTING.md): prepare reviewable changes.\n- [docs/parity/compose-cli-surface.md](docs/parity/compose-cli-surface.md): review local Docker Compose CLI surface parity and documented differences.\n- [SUPPORT.md](SUPPORT.md): ask for help or report non-security issues.\n- [SECURITY.md](SECURITY.md): report security issues.\n\n## License\n\nThis project uses the Apache License, Version 2.0, matching the license used by\n[`apple/container`](https://github.com/apple/container).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephenlclarke%2Fcontainer-compose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstephenlclarke%2Fcontainer-compose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephenlclarke%2Fcontainer-compose/lists"}