Skip to main content
Install the AhaSend CLI with the tool you already use. The package managers, the install scripts and the downloads all install the same release binary.

Choose a Method

Each release has prebuilt binaries for macOS, Linux and Windows, on both x86_64 and ARM64. The binaries have no dependencies. After you install, check the version:

Homebrew

Use the full name ahasend/tap/ahasend. Homebrew adds the AhaSend tap and installs shell completion for bash, zsh and fish.

Install Script (macOS and Linux)

The script downloads the latest release for your system, checks it against the release’s checksums.txt, and installs it in ~/.local/bin (or $XDG_BIN_HOME when it is set). It never uses sudo and never changes your shell profile. If the folder is not on your PATH, it prints the line to add, unless you pass --quiet. Pass options after sh -s --:
If a package manager installed ahasend in the target folder, the script stops and tells you to upgrade it with that package manager, naming the command when it knows it, or to choose another folder with --install-dir. To read the script before you run it, download it first:
To upgrade, run the script again, with the same --install-dir if you used one. To uninstall, delete ahasend from the folder it installed into, by default:

PowerShell Script (Windows)

The script works in Windows PowerShell 5.1 and PowerShell 7. It downloads the latest release for your system (x64 or ARM64), checks it against the release’s checksums.txt, and installs it in %LOCALAPPDATA%\Programs\AhaSend\bin. It does not change your PATH: if the folder is not on it, the script prints the command that adds it, unless you pass -Quiet. Run that command, then open a new terminal. With -Quiet, use the PATH command in the binary download steps. Pass parameters like this:
If the target folder is one that a package manager manages, such as Scoop’s or npm’s, the script stops and prints the command that upgrades ahasend with that tool instead, even when ahasend is not there yet. To read the script before you run it, download it first:
To upgrade, run the script again, with the same -InstallDir if you used one. To uninstall, delete ahasend.exe from the folder it installed into. With the default folder, delete the whole AhaSend folder:
If you added the folder to your user PATH, the entry stays there. To remove it, open Edit environment variables for your account from the Start menu, select Path under your user variables, click Edit, and delete the entry that ends in AhaSend\bin.

Scoop

npm

Needs Node.js 18 or later.
Or run it once without installing:
pnpm and Bun work the same way (pnpm add -g @ahasend/cli, bun add -g @ahasend/cli). The launcher runs with Node.js, so Bun also needs Node.js 18 or later. pnpm needs a global bin folder, which pnpm setup creates once. The package installs the binary for your system as an optional dependency. If you install with optional dependencies turned off (for example --omit=optional), ahasend stops with a message that says so.
With npm, ahasend runs through a small Node.js launcher, which passes the binary’s exit code through. Two signal cases differ from the other install methods:
  • A SIGINT sent to the launcher process alone, by a tool that signals one process, does not reach the CLI. Ctrl+C in a terminal works as usual.
  • A tool that sends SIGTERM to the whole process group, such as timeout, makes the CLI receive it twice. messages send and messages cancel of several messages treat a second SIGTERM as “stop now”, so they skip their clean stop.
If either case matters to you, for example under a process supervisor, install the binary another way.

Debian and Ubuntu (.deb)

These commands download the package of the latest release for your architecture (amd64 or arm64) and install it. To install another release, replace the first line with that version, such as VERSION=0.3.0.
The package installs /usr/bin/ahasend and shell completion for bash, zsh and fish. There is no apt repository, so apt upgrade does not upgrade it. To upgrade, run the same commands again. To uninstall:

Fedora and RHEL (.rpm)

These commands download the package of the latest release for your architecture (x86_64 or aarch64) and install it. To install another release, replace the first line with that version, such as VERSION=0.3.0.
The package installs /usr/bin/ahasend and shell completion for bash, zsh and fish. There is no dnf repository, so dnf upgrade does not upgrade it. To upgrade, run the same commands again. To uninstall:

Binary Download

Every release has a binary for each system, with the same name in every release:
Set FILE to the binary for your system, then download it and checksums.txt, check it, and install it:
If the check prints OK for the file, install it. If it prints FAILED, delete the file and do not run it.
If ~/.local/bin is not on your PATH, add this line to your shell’s startup file (such as ~/.bashrc or ~/.zshrc):
In fish, run this once instead:
macOS blocks a binary that you download with a browser, because Apple has not notarized it. Remove the download flag from the file before you run it:
A binary downloaded with curl does not get the flag. Homebrew, the install script and npm installs do not need this step.
To upgrade, run the download, check and move commands again; the PATH is already set. To uninstall, delete the binary. On Windows, also remove the folder from your user PATH, as the PowerShell script section describes.

Go Install

Needs Go 1.26 or later.
This installs a binary named ahasend-cli into GOBIN, or $(go env GOPATH)/bin when GOBIN is unset. Rename it to ahasend to use the commands in these docs. With the default Go bin directory:
Make sure that directory is on your PATH. A go install build prints dev as its version, because only release builds carry a version number. To upgrade, run both commands again.

Build from Source

Needs Go 1.26 or later, Git, and Make (optional).
Without Make, run go build -o bin/ahasend . instead of make build. If ~/.local/bin is not on your PATH, add it as the binary download steps show.

Verify the Download

Every release has a checksums.txt with the SHA-256 of each file. The install scripts check it for you, and the binary download steps check it before they move the file. For any other file from a release, such as a .deb or .rpm package, download checksums.txt from the same release into the same folder, then run, before you rename the file:
GitHub also records where each release file was built. With the GitHub CLI, check a file with:

Shell Completion

Homebrew and the .deb and .rpm packages install completion for bash, zsh and fish. For other install methods, or for PowerShell, generate it with ahasend completion.
This needs version 2 of the bash-completion package, which most Linux systems have.

Remove Your Configuration

Uninstalling the CLI leaves your profiles in ~/.ahasend (%USERPROFILE%\.ahasend on Windows). Delete that folder to remove them:

Troubleshooting

Command Not Found

The install folder is not on your PATH. The install scripts print the line to add, unless you ran them with --quiet or -Quiet. To add the folder yourself on macOS and Linux, put this line, with your folder, in your shell’s startup file, such as ~/.bashrc or ~/.zshrc, and open a new terminal:
In fish, run this once instead, with your folder:
On Windows, use the PATH command in the binary download steps, with your folder.

More Than One Copy

If ahasend --version shows an older version than you installed, another copy comes first on your PATH. List every copy:
Remove the copies you do not use, with the tool that installed them. A manual install may also have put a copy in /usr/local/bin on macOS and Linux, or in %LOCALAPPDATA%\AhaSend on Windows; delete it there.

Next Steps

  1. Set up authentication
  2. Start with the quick start guide
  3. Explore available commands