Installation · MachineMail Docs

Platforms

The CLI is one self-contained executable per platform: the Bun runtime and the app compiled together, about 80 MB on disk. You need neither Bun nor Node to run it. The same binary answers to machinemail and mm.

Platforms

Platform Archive Notes
Linux x64 machinemail-linux-x64.tar.gz glibc. Built without AVX2, so older CPUs and emulators run it.
Linux arm64 machinemail-linux-arm64.tar.gz glibc.
macOS Intel machinemail-darwin-x64.tar.gz Not notarized yet; see below.
macOS Apple silicon machinemail-darwin-arm64.tar.gz Not notarized yet; see below.
Windows x64 machinemail-windows-x64.zip machinemail.exe plus an mm.cmd shim. Not Authenticode-signed yet.
Alpine and other musl none Not supported yet. The install script stops with an error instead of a binary that cannot start.

Releases are published on github.com/machinemail/cli, tagged cli-v<version>. Each release also carries SHA256SUMS and a manifest.json with the version and every asset’s checksum.

Install script

macOS and Linux
Windows

Terminal

curl -fsSL https://machinemail.dev/install.sh | sh

The script:

  1. picks the archive for your OS and CPU (an x64 shell under Rosetta on Apple silicon gets the arm64 build),
  2. downloads it with SHA256SUMS and refuses to install on a checksum mismatch,
  3. installs machinemail into ~/.local/bin, replacing an older copy atomically,
  4. links mm to it, unless an unrelated mm is already there,
  5. tells you if the directory is not on your PATH.

Options go after sh -s --; each has an environment variable too:

Option Variable Default
--version <x.y.z> MACHINEMAIL_VERSION the latest release
--dir <path> MACHINEMAIL_INSTALL_DIR $HOME/.local/bin
--base-url <url> MACHINEMAIL_DOWNLOAD_URL the releases page
--no-mm the mm link is made

Terminal

curl -fsSL https://machinemail.dev/install.sh | sh -s -- --version 0.1.0 --dir /usr/local/bin

Only https:// and file:// download URLs are accepted.

Download machinemail-windows-x64.zip from the latest release, unzip it into a folder on your PATH, and run machinemail.exe. The zip also contains mm.cmd, so mm works too. SmartScreen warns about the unsigned executable until releases are signed.

Check the install:

Terminal

machinemail --version
machinemail version --json

text

machinemail 0.1.0 (877499ccae83, linux-x64)
{
  "version": "0.1.0",
  "commit": "877499ccae83",
  "built_at": "2026-10-09T15:42:40.659Z",
  "target": "linux-x64"
}

The commit is the 12-character git commit the binary was built from (with -dirty if the CLI sources had uncommitted changes). Include the version --json output when you report a problem.

macOS Gatekeeper

The macOS binaries are signed ad hoc but not notarized yet. A binary installed with curl (the install script) is not quarantined and runs. One downloaded with a browser is blocked by Gatekeeper; clear the quarantine flag to run it:

Terminal

xattr -d com.apple.quarantine ~/.local/bin/machinemail

Shell completions

machinemail completion <shell> prints a completion script for bash, zsh or fish. It completes commands, actions, flags (with descriptions in zsh and fish), enum values, config keys and profile names, and covers mm too. The script never runs the CLI while you type; it reads profile names straight from the config file.

bash

Terminal

mkdir -p ~/.local/share/bash-completion/completions
machinemail completion bash > ~/.local/share/bash-completion/completions/machinemail

Or load it in ~/.bashrc with eval "$(machinemail completion bash)".

zsh

Terminal

machinemail completion zsh > "
${fpath[1]}/_machinemail"

Then restart zsh. Or add source <(machinemail completion zsh) to ~/.zshrc, after compinit.

fish

Terminal

machinemail completion fish > ~/.config/fish/completions/machinemail.fish

The script is generated from the command tree of the binary that printed it, so regenerate it after upgrading.

Upgrade and uninstall

To upgrade, run the install script again; it replaces the binary in place. To uninstall, delete the binary and the link, and optionally the config directory (which holds your saved keys):

Terminal

machinemail logout --yes                 # revoke the stored key first, if you want it gone
rm ~/.local/bin/machinemail ~/.local/bin/mm
rm -r ~/.config/machinemail

The CLI does not check for updates unless you turn it on with machinemail config set update_check true. When on, it reads the latest release’s manifest.json from github.com/machinemail/cli at most once a day. Version 0.1.0 was built before that address was set, so on 0.1.0 also set MACHINEMAIL_UPDATE_URL=https://github.com/machinemail/cli/releases/latest/download/manifest.json.