Download client

The Machine client is one small program called machine. Pick your system.

Install

Run this in a terminal.

1
curl https://testflows.com/machine/install -fsS | bash

It verifies the download and puts the client in ~/.local/bin, with machine-env beside it. It never asks for root. Run the same command again to update.

The client needs the OpenSSH client, ssh, which most Linux systems have. If yours does not, run sudo apt install openssh-client on Debian and Ubuntu.

Then

Sign in with machine login, or create an account first. Then run machine account provision to set up account storage. The first session cannot be created until that is done. The docs walk through your first run.

machine-env

The installer also writes machine-env beside machine. It starts a shell in which machine is this client, ahead of any other machine on your PATH. If another command on your system is also named machine, use machine-env. which machine shows which one you get. It is the same file on every system. The prompt starts with (machine), your usual shell setup is loaded, and exit leaves. It supports zsh and bash.

1
2
machine-env
machine-env -- machine --version

The second form runs one command in that environment and starts no shell, for scripts.

Check the download

The installer already verifies every download. To check by hand, download the files without installing them, with your version in place of YYYYMMDD-HHMM (machine --version shows it):

1
2
mkdir machine-check && cd machine-check
curl https://testflows.com/machine/install -fsS | MACHINE_VERSION=YYYYMMDD-HHMM bash -s -- --download

That fetches machine, its checksum, and two signatures of the checksum. We sign only the checksum, so verify the signature first, with either tool.

With GPG, the key's fingerprint must match the GPG fingerprint. gpg then prints Good signature; its warning that the key is not certified is normal.

1
2
3
4
curl -fsSO https://testflows.com/machine/keys/machine-client-gpg.asc
gpg --show-keys --fingerprint machine-client-gpg.asc
gpg --import machine-client-gpg.asc
gpg --verify machine.sha256.asc machine.sha256

With openssl, a good signature prints Verified OK:

1
2
curl -fsSO https://testflows.com/machine/keys/machine-client-rsa.pub.pem
openssl dgst -sha256 -verify machine-client-rsa.pub.pem -signature machine.sha256.sig machine.sha256

Last, check the file against the checksum, and against the client you installed. If a check fails, delete the client and install again.

1
2
sha256sum -c machine.sha256
cmp machine "$(command -v machine)"

To read the installer before you run it, pipe it to less instead of bash.

Uninstall

Sign out, then delete the client and what it stored.

1
2
3
machine logout
rm ~/.local/bin/machine ~/.local/bin/machine-env
rm -rf ~/.cache/machine ~/.testflows/machine

Install

Run this in a terminal.

1
curl https://testflows.com/machine/install -fsS | bash

It verifies the download and puts the client in ~/.local/bin, with machine-env beside it. It never asks for root. Run the same command again to update.

The client needs the OpenSSH client, ssh, which most Linux systems have. If yours does not, run sudo apt install openssh-client on Debian and Ubuntu.

Then

Sign in with machine login, or create an account first. Then run machine account provision to set up account storage. The first session cannot be created until that is done. The docs walk through your first run.

machine-env

The installer also writes machine-env beside machine. It starts a shell in which machine is this client, ahead of any other machine on your PATH. If another command on your system is also named machine, use machine-env. which machine shows which one you get. It is the same file on every system. The prompt starts with (machine), your usual shell setup is loaded, and exit leaves. It supports zsh and bash.

1
2
machine-env
machine-env -- machine --version

The second form runs one command in that environment and starts no shell, for scripts.

Disks hold x86_64 programs

A machine is an x86_64 computer, so its disks hold linux/amd64 programs. Docker on ARM builds arm64 images by default, so ask for linux/amd64:

1
2
docker build --platform linux/amd64 -t myapp:latest .
docker pull --platform linux/amd64 myapp:latest

The docs cover Compose projects and binaries.

Check the download

The installer already verifies every download. To check by hand, download the files without installing them, with your version in place of YYYYMMDD-HHMM (machine --version shows it):

1
2
mkdir machine-check && cd machine-check
curl https://testflows.com/machine/install -fsS | MACHINE_VERSION=YYYYMMDD-HHMM bash -s -- --download

That fetches machine-linux-arm64, its checksum, and two signatures of the checksum. We sign only the checksum, so verify the signature first, with either tool.

With GPG, the key's fingerprint must match the GPG fingerprint. gpg then prints Good signature; its warning that the key is not certified is normal.

1
2
3
4
curl -fsSO https://testflows.com/machine/keys/machine-client-gpg.asc
gpg --show-keys --fingerprint machine-client-gpg.asc
gpg --import machine-client-gpg.asc
gpg --verify machine-linux-arm64.sha256.asc machine-linux-arm64.sha256

With openssl, a good signature prints Verified OK:

1
2
curl -fsSO https://testflows.com/machine/keys/machine-client-rsa.pub.pem
openssl dgst -sha256 -verify machine-client-rsa.pub.pem -signature machine-linux-arm64.sha256.sig machine-linux-arm64.sha256

Last, check the file against the checksum, and against the client you installed. If a check fails, delete the client and install again.

1
2
sha256sum -c machine-linux-arm64.sha256
cmp machine-linux-arm64 "$(command -v machine)"

To read the installer before you run it, pipe it to less instead of bash.

Uninstall

Sign out, then delete the client and what it stored.

1
2
3
machine logout
rm ~/.local/bin/machine ~/.local/bin/machine-env
rm -rf ~/.cache/machine ~/.testflows/machine

Install

Run this in Terminal.

1
curl https://testflows.com/machine/install -fsS | bash

It verifies the download, installs the client under ~/.local/share/machine/, and links it from ~/.local/bin, with machine-env beside the link. It never asks for your password. Run the same command again to update.

Macs with an Intel processor are not supported.

macOS already has a machine command. Use machine-env, below, to run this one.

Then

Sign in with machine login, or create an account first. Then run machine account provision to set up account storage. The first session cannot be created until that is done. The docs walk through your first run.

macOS has its own machine command

macOS ships /usr/bin/machine, which prints the processor type, such as arm64. Typing machine runs that one unless this client comes first on your PATH, and putting it first hides the system one for every other program. machine-env avoids both. It starts a shell in which machine is this client and leaves the rest of your system alone. The prompt starts with (machine), your usual shell setup is loaded, and exit leaves. It supports zsh and bash.

1
2
machine-env
machine-env -- machine --version

The second form runs one command in that environment and starts no shell, for scripts and CI. To see which machine you get, run which machine: ~/.local/bin/machine is this client and /usr/bin/machine is the system's. If machine --version prints a processor type instead of a version, you are running the system command. If your shell cannot find machine-env either, run ~/.local/bin/machine-env. Linux and every other system get the same file.

Disks hold x86_64 programs

A machine is an x86_64 computer, so its disks hold linux/amd64 programs. Docker on ARM builds arm64 images by default, so ask for linux/amd64:

1
2
docker build --platform linux/amd64 -t myapp:latest .
docker pull --platform linux/amd64 myapp:latest

The docs cover Compose projects and binaries.

Check the download

The installer already verifies every download. To check by hand, download the files without installing them, with your version in place of YYYYMMDD-HHMM (machine --version shows it):

1
2
mkdir machine-check && cd machine-check
curl https://testflows.com/machine/install -fsS | MACHINE_VERSION=YYYYMMDD-HHMM bash -s -- --download

That fetches machine-darwin-arm64.tar.gz, its checksum, and two signatures of the checksum. We sign only the checksum, so verify the signature first, with either tool. Macs ship with openssl but not gpg.

With GPG, the key's fingerprint must match the GPG fingerprint. gpg then prints Good signature; its warning that the key is not certified is normal.

1
2
3
4
curl -fsSO https://testflows.com/machine/keys/machine-client-gpg.asc
gpg --show-keys --fingerprint machine-client-gpg.asc
gpg --import machine-client-gpg.asc
gpg --verify machine-darwin-arm64.tar.gz.sha256.asc machine-darwin-arm64.tar.gz.sha256

With openssl, a good signature prints Verified OK:

1
2
curl -fsSO https://testflows.com/machine/keys/machine-client-rsa.pub.pem
openssl dgst -sha256 -verify machine-client-rsa.pub.pem -signature machine-darwin-arm64.tar.gz.sha256.sig machine-darwin-arm64.tar.gz.sha256

Last, check the archive against the checksum. If it fails, delete it and install again.

1
shasum -a 256 -c machine-darwin-arm64.tar.gz.sha256

To read the installer before you run it, pipe it to less instead of bash.

Uninstall

Sign out, then delete the client and what it stored.

1
2
3
machine logout
rm ~/.local/bin/machine ~/.local/bin/machine-env
rm -rf ~/.local/share/machine ~/.testflows/machine

Install

The client runs inside WSL, the Linux that comes with Windows. If you don't have WSL yet, install it from PowerShell, then restart:

1
wsl --install

Open your Linux distribution and follow the steps for Linux (x64), or Linux (ARM64) on Windows on ARM. Not sure which? uname -m prints x86_64 or aarch64.

Then

Sign in with machine login, or create an account first. Then run machine account provision to set up account storage. The first session cannot be created until that is done. The docs walk through your first run.

Other systems

Linux (x64 and ARM64) and Macs with Apple Silicon are supported. On Windows, use WSL.

Need another platform? Tell us which one.

Release keys

Every release's checksum is signed with two keys: a GPG key, whose fingerprint is published as the GPG fingerprint, and an RSA key for openssl.

If the keys change, this page and the installer carry the new ones. A check that fails with an old key should pass once you download again.

A specific version

The installer gets the latest release. To install a particular one, set MACHINE_VERSION:

1
curl https://testflows.com/machine/install -fsS | MACHINE_VERSION=YYYYMMDD-HHMM bash

Set MACHINE_INSTALL_DIR to install somewhere other than ~/.local/bin. --no-signature and --no-checksum skip checks; a normal install needs neither.