# 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](https://github.com/machinemail/cli/releases), 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](https://github.com/machinemail/cli/releases/latest), 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`.
