Installation
Install the machinemail CLI on macOS, Linux or Windows, pin a version, build it from source with Bun, and set up shell completions for bash, zsh and fish.
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.
Not published yet
Public releases are not available yet. The install script and download links on this page describe how installs will work once the first release is published; until then they return 404. To use the CLI today, build it from source.
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. |
Each release also carries SHA256SUMS and a manifest.json with the version and every asset’s checksum.
Install script
The script:
- picks the archive for your OS and CPU (an x64 shell under Rosetta on Apple silicon gets the arm64 build),
- downloads it with
SHA256SUMSand refuses to install on a checksum mismatch, - installs
machinemailinto~/.local/bin, replacing an older copy atomically, - links
mmto it, unless an unrelatedmmis already there, - 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 |
Only https:// and file:// download URLs are accepted.
Download machinemail-windows-x64.zip from the 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:
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:
Build from source
The CLI lives in apps/cli of the MachineMail monorepo and builds with Bun (the repository pins 1.4.2).
bun run build first regenerates the commands from openapi/machinemail.yaml, so the binary matches the API spec in your checkout. To run from source without compiling, use bun run dev -- <args> (for example bun run dev -- --help); version then reports the commit as dev.
Other targets cross-compile from one machine:
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.
Or load it in ~/.bashrc with eval "$(machinemail completion bash)".
Then restart zsh. Or add source <(machinemail completion zsh) to ~/.zshrc, after compinit.
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):
The CLI does not check for updates unless you turn it on with machinemail config set update_check true. The check is a stub until releases are public: it makes no network call without a release manifest URL.