Download

There is no binary release yet.

No signed build, no notarized DMG, no Homebrew cask, no GitHub release. The only way to run Morbstack today is to build it from source — this page is the real command sequence, not a stand-in for a download button.

The honest state of distribution

Packaging and signed releases are tracked separately from the core engine work. Nothing on this page — or anywhere on this site — should be read as "download a build." There isn't one. If you came here looking for a .dmg, the instructions below are the actual path to a running Morbstack today.

System requirements

Apple silicon

Virtualization.framework's Rosetta-backed amd64 path and this project's own testing both assume arm64. There is no Intel Mac support story.

macOS 26 (Tahoe) or later

mac/Package.swift declares a macOS(.v26) deployment target and Info.plist sets LSMinimumSystemVersion to 26.0, keeping the app on Tahoe’s native window and Liquid Glass behavior.

Xcode 26 or later, to build it

Needed for the Swift 6.3 compiler and the Virtualization.framework APIs the daemon uses. mise manages the pinned Rust toolchain for the guest-side init binary.

Build from source

The exact command sequence from a fresh clone to a working docker run / docker compose setup, taken directly from README.md and mise.toml.

1. Clone and build

mise refuses to even read an untrusted config, so the very first command on a fresh clone must be literal mise trust before anything else — not a task, since tasks live inside the config that isn't trusted yet.

git clone <this repository>
cd morbstack
mise trust && mise install   # one-time: pulls the pinned Rust toolchain
mise run build                # builds morbstackd, morb, and morbinit
mise run test                 # runs the Swift and Rust test suites

2. Check host readiness

morb doctor works without a running daemon — it tells you what setup is still outstanding.

./mac/.build/debug/morb doctor

3. Fetch and verify the guest assets

Hash-verifies the pinned guest kernel, the static Docker engine binaries, the Alpine minirootfs, the guest fsutils, and the host docker-compose CLI plugin — see NOTICE for exactly what these are and where they come from.

./scripts/fetch-guest-assets.sh

4. Assemble the bootable guest image

Cross-compiles morbinit and assembles the bootable initramfs (kernel + morbinit-as-/init + Alpine rootfs + Docker engine binaries + fsutils).

mise run guest-image

5. Start the daemon

Builds, ad-hoc codesigns morbstackd with the entitlements it needs to open a VM, and runs it in the foreground. The VM itself doesn't boot until the first client connects — socket activation.

mise run run-daemon

6. Point Docker tooling at Morbstack

These steps build Morbstack's own binaries; they do not install a docker client, which the commands below assume is already on your PATH. Morbstack does not bundle one yet — a pinned, hash-verified docker/docker compose/docker buildx shipped inside the app is tracked as the "single-path install" gate for the first public release (docs/roadmap.md, L1) and is not built yet. In another terminal:

export DOCKER_HOST=unix://$HOME/.morbstack/run/docker.sock
docker ps
docker run --rm hello-world
docker run -d -p 8080:80 nginx
curl -fsS http://127.0.0.1:8080   # nginx welcome page, from the Mac

Or register a persistent docker context instead of exporting DOCKER_HOST every time:

docker context create morbstack --docker host=unix://$HOME/.morbstack/run/docker.sock
docker context use morbstack

7. Wire up docker compose

This repo fetches and verifies the plugin binary but does not install it for you — a one-time symlink:

mkdir -p ~/.docker/cli-plugins
ln -sf "$(pwd)/dist/host-bin/docker-compose" ~/.docker/cli-plugins/docker-compose
docker compose version

8. Optional: build the SwiftUI app

Assembles and ad-hoc signs Morbstack.app into dist/, then launches it. The app bundles morbstackd and morb alongside it, so it can start the engine without anything installed on PATH.

mise run app
open dist/Morbstack.app

Full detail, including troubleshooting the credsStore/docker-credential-desktop hang and the port-forwarder retry behavior, lives in the repository's CONTRIBUTING.md and docs/architecture.md. See also Troubleshooting on the docs page.

Planned distribution

Packaging and signed releases are being built out separately (see docs/RELEASING.md). Neither of the commands below works yet — they're shown greyed out, exactly as planned, so this page stays honest about what exists today.

DMG

A notarized, signed .dmg containing Morbstack.app.

Homebrew cask

A cask formula is drafted at packaging/morbstack.rb by a separate in-progress effort, not yet published to a tap.