Goal
Extend scripts/setup.sh so the one-line install path works on macOS (Intel + Apple Silicon) for developers running SendDock locally for evaluation, dev or testing. Today the script's first preflight check (uname -s == Linux) hard-fails on Darwin.
Tracking the broader multi-distro effort under #79. This issue covers macOS specifically — it's a distinct work item from the Linux distros because the package manager, the Docker install path, and the service-supervision model are all different.
Why macOS
The fastest path for a developer to try SendDock is to run it locally. macOS is the dominant dev platform among indie hackers + small SaaS teams, exactly the audience SendDock is positioned for. Today's flow forces them to either spin up a Linux VM or assemble the manual Docker Compose path by hand — both of which they're likely to skip in favor of just opening the Cloud signup instead.
This is an evaluation install, not a production one. The doc should explicitly say so — broadcasts won't work from a residential ISP (port 25/465/587 blocked) and there's no realistic story for PUBLIC_URL on a laptop. Mailpit is the right SMTP target for the local-test path.
Scope
- Detect Darwin (
uname -s == Darwin) and branch the install logic.
- Check that Docker Desktop is installed and the daemon is reachable. If not, halt with a clear pointer to
https://www.docker.com/products/docker-desktop rather than trying to install it ourselves (Docker Desktop has a GUI installer, EULA, and is licensed differently — scripting around all that is brittle).
- Optional follow-up: also detect OrbStack / Colima / Rancher Desktop as valid Docker daemons.
- Skip the Linux-only steps:
- No
systemctl (launchd, but Docker Desktop manages its own service).
- No
apt-get / pacman — brew install curl openssl if missing.
- No
/opt/senddock default (/Applications is wrong too; default to ~/senddock).
- Default
PUBLIC_URL handling: hard-error explicitly saying "macOS installs are for local evaluation — set SENDDOCK_PUBLIC_URL=http://localhost:8080 and SENDDOCK_ALLOW_LOCALHOST=yes to proceed", or interactively confirm "this is a local-only install, broadcasts won't work".
- Point the user at the Mailpit profile in the compose file for local SMTP testing.
Out of scope
- Production self-hosting on macOS Server. Not a real audience and the SMTP story makes it pointless.
- Native (non-Docker) install on macOS. The whole appeal is the Docker-managed stack — recreating it via Homebrew formulas isn't worth the maintenance burden.
Open questions
- Should the installer also auto-launch Docker Desktop if it's installed but not running? (
open -a Docker works but waiting for the daemon adds another loop.)
- Should we ship a separate
install-mac.sh for clarity, or branch inside the existing setup.sh? Branching keeps one canonical file and one URL to remember, but makes the script meaningfully more complex.
Acceptance
- Running
curl -fsSL https://senddock.dev/install.sh | bash on a fresh macOS install with Docker Desktop already installed brings up SendDock at http://localhost:8080.
- Without Docker Desktop, the script halts with a clear, actionable error pointing at the download.
- Docs explicitly position the macOS install as local-evaluation-only.
Goal
Extend
scripts/setup.shso the one-line install path works on macOS (Intel + Apple Silicon) for developers running SendDock locally for evaluation, dev or testing. Today the script's first preflight check (uname -s == Linux) hard-fails on Darwin.Tracking the broader multi-distro effort under #79. This issue covers macOS specifically — it's a distinct work item from the Linux distros because the package manager, the Docker install path, and the service-supervision model are all different.
Why macOS
The fastest path for a developer to try SendDock is to run it locally. macOS is the dominant dev platform among indie hackers + small SaaS teams, exactly the audience SendDock is positioned for. Today's flow forces them to either spin up a Linux VM or assemble the manual Docker Compose path by hand — both of which they're likely to skip in favor of just opening the Cloud signup instead.
This is an evaluation install, not a production one. The doc should explicitly say so — broadcasts won't work from a residential ISP (port 25/465/587 blocked) and there's no realistic story for
PUBLIC_URLon a laptop. Mailpit is the right SMTP target for the local-test path.Scope
uname -s == Darwin) and branch the install logic.https://www.docker.com/products/docker-desktoprather than trying to install it ourselves (Docker Desktop has a GUI installer, EULA, and is licensed differently — scripting around all that is brittle).systemctl(launchd, but Docker Desktop manages its own service).apt-get/pacman—brew install curl opensslif missing./opt/senddockdefault (/Applicationsis wrong too; default to~/senddock).PUBLIC_URLhandling: hard-error explicitly saying "macOS installs are for local evaluation — setSENDDOCK_PUBLIC_URL=http://localhost:8080andSENDDOCK_ALLOW_LOCALHOST=yesto proceed", or interactively confirm "this is a local-only install, broadcasts won't work".Out of scope
Open questions
open -a Dockerworks but waiting for the daemon adds another loop.)install-mac.shfor clarity, or branch inside the existingsetup.sh? Branching keeps one canonical file and one URL to remember, but makes the script meaningfully more complex.Acceptance
curl -fsSL https://senddock.dev/install.sh | bashon a fresh macOS install with Docker Desktop already installed brings up SendDock athttp://localhost:8080.