Skip to content

Supported features and platforms

Compare container runtimes, operating systems, and secret stores.

Use Docker Compose or Podman Compose for the full local-development workflow. Docker Swarm runs on one or many nodes, without development mounts or jobs.

Container runtimes

CapabilityPodman ComposeDocker ComposeDocker Swarm
Deploy servicesyesyesSwarm stack
Service statusyesyesyes
Container healthyesyesnot advertised
Managed networks and volumesyesyesyes; shared volumes via NFS
Update files in managed volumesyesyesunsupported
Direct environment interpolationyesyesyes
Local bind mountsyesyesunsupported
Runtime secret deliveryyesyesyes
Follow logsyesyesyes, service/task stream
Execute a commandyesyesyes, tasks on the local node
Service placementignoredignoredyes, placement
HTTPS routes with ACMEyesyesyes, on every ingress node
One-shot jobsyesyesunsupported

Deployment attempts to restore the last successful deployment if apply fails. See build and deploy for recovery limits. SSH access is handled by the remote daemon, not by a direct connection to a remote container engine.

Local platform support

PlatformTrust scopeVerification
Debian/Ubuntusystem, sudoCA bundle fingerprint and live CI handshake
Fedora/RHELsystem, sudoextracted CA bundle fingerprint; no dedicated live runner
macOSlogin keychain by defaultkeychain fingerprint and live CI handshake
WindowsCurrent User Root by defaulttyped X509Store query and live CI handshake

Unknown Linux trust layouts and unsupported operating systems fail closed. Private Unix-style file permission enforcement is not implemented on non-Unix platforms, so operations requiring that guarantee are rejected there.

Release build targets

The release workflow builds the targets below. This lists build support, not download availability; see installation for the current installation path.

Operating systemx86-64ARM64Native package
Linux glibcx86_64-unknown-linux-gnuaarch64-unknown-linux-gnu.tar.gz
macOSx86_64-apple-darwinaarch64-apple-darwin.tar.gz
Windowsx86_64-pc-windows-msvcaarch64-pc-windows-msvc.zip

The release packages listed here use glibc on Linux. The checkout's local ./install.sh instead builds a musl Linux binary or a native macOS binary on x86-64 and ARM64. It does not support native Windows. Release installers require a package matching the exact operating system and architecture.

Secret storage

Authentication is private state or process input, never public project configuration.

ProviderOperationsRevisionsRotationAuthentication
ageinspect, resolve, create, replace, batch replace, stage, promote, deletecompare-and-swapstagedlocal X25519 identity
envinspect, resolveobserved process valuenonenamed process variable
OpenBao provider instanceinspect, resolve, create, replace, deletecompare-and-swapreplaceprivate AppRole credential
Vault provider instanceinspect, resolve, create, replace, deletecompare-and-swapreplaceprivate AppRole credential

Age and environment storage accept text up to 1 MiB. OpenBao and Vault accept safe text up to 512 KiB. Locations are bounded to 1,024 bytes where applicable; environment locations must be valid variable names. mm secret provider list --output json returns driver and configured-instance descriptors without revealing provider credentials.

Secret delivery

DriverRuntimeDeliverymm plaintext lifetime
direct-environmentall threeservice environmentno mm file; engines may retain metadata
operation-env-fileall threeservice environmentowner-only operation file
podman-native-secretPodman Composenative mounted secretPodman-managed store
swarm-native-secretDocker Swarmimmutable mounted secretSwarm-managed store (all nodes)
compose-file-secretDocker Compose outside SwarmCompose file sourceowner-only operation file

Environment drivers accept text up to 1 MiB and names up to 255 bytes. Runtime secret drivers use a conservative 500 KiB limit and accept text or binary. Podman and Swarm support numeric UID, GID, and mode. Compose file secrets support only UID 0, GID 0, mode 0444; other requests fail before a file is written.

Compose has no native persistent secret store. mm creates a private 0600 operation file and removes its path after Compose runs; the mounted inode remains available to the created container, but recreation requires another operation. Rotation is rejected if rollback material cannot be reconstructed.

One-shots reuse a configured Compose service contract, including its selected environment and runtime secret mounts. Swarm one-shots fail capability preflight because the CLI adapter cannot safely clone that complete contract without placing environment values in process arguments. BuildKit secret inputs are a separate, supported build path: build.secrets values are resolved only after review and passed through private operation files. Compatibility planning rejects unsupported runtime, workload, material, size, permission, and rollback combinations before mutation.

Local services

The shared ingress, dashboard, Mailpit, and optional access-gate components are installation-wide local services. They require a configured local target, HAProxy, and either a Linux systemd host with a local Podman Compose or Docker Compose engine, or macOS with Docker Desktop and Docker Compose. They are not implemented on Windows or with other macOS container engines, and are not remote-host or multi-node service orchestration. Host publication is loopback-only where offered. Components use pinned images and ownership checks, and optional services are installed only through a reviewed plan.

Managed OpenBao and Vault support local Docker Compose and rootless Podman Compose. They do not support managed lifecycle operations on Swarm or remote targets. Rootless Podman requires a working user namespace and podman unshare.

For automation, capabilities JSON provides the generated runtime and secret-provider definitions.

See Known limitations for user-visible unsupported combinations.