Skip to content
Molto

Install and platforms

One command per platform, what it verifies before it writes anything, and exactly which targets the releases publish today.

Two binaries: molto, the build system, and pickup, the toolchain manager it asks for a compiler. One command installs both, checks them against the SHA256SUMS published beside the release, and writes them into a directory you already own. No root, no administrator, nothing to unpack.

Linux and macOS

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

Installs into ~/.local/bin and prints the export PATH line to add if that directory is not on your PATH yet. Arguments go after --:

curl -fsSL https://moltobuild.dev/install.sh | sh -s -- --dir /usr/local/bin --no-pickup
Choice Flag Environment variable
Where to install --dir <path> MOLTO_INSTALL_DIR
A specific molto --molto-version <v> MOLTO_VERSION
A specific pickup --pickup-version <v> PICKUP_VERSION
Install molto only --no-pickup —
Install pickup only --no-molto —
Turn the colours off — NO_COLOR

On macOS the same line installs both: pickup publishes an arm64 macOS binary since 0.9.4. What pickup finds there is the compiler Xcode’s command line tools ship, so install those first if the Mac does not have them yet:

xcode-select --install

A --pickup-version older than 0.9.4 has no macOS binary, and the install stops at the download that names it.

Apple Silicon only. An Intel Mac is refused by name rather than handed a binary that would not run.

Windows

irm https://moltobuild.dev/install.ps1 | iex

Installs into %LOCALAPPDATA%\Programs\molto, which needs no administrator rights and, unlike %APPDATA%, does not roam onto other machines. The directory is added to your user PATH if it is not there already, so open a new terminal afterwards: a running shell keeps the environment it started with.

Piping into iex leaves nowhere to put arguments, so that form is configured with environment variables:

$env:MOLTO_INSTALL_DIR = 'C:\tools\molto'
irm https://moltobuild.dev/install.ps1 | iex

To pass the parameters instead — -Dir, -MoltoVersion, -PickupVersion, -NoPickup, -NoMolto, -Help — build a scriptblock out of the script:

& ([scriptblock]::Create((irm https://moltobuild.dev/install.ps1))) -NoPickup

Windows PowerShell 5.1 is enough; nothing else has to be installed first.

What the installer verifies

Both scripts do the same three things, in this order, for each binary:

  1. Resolve the version — the redirect of /releases/latest names the newest tag without spending an API call, so a rate-limited GitHub does not break the install.
  2. Download the binary and the SHA256SUMS published beside it in the same release.
  3. Compute the SHA-256 of the file on disk and compare it against the line that names that exact asset.

Only a file that matched is moved into the install directory. A mismatch, or an asset the checksums do not list, aborts before anything is written — and neither script has a flag that skips the check.

Platform status

Target Status What a release publishes
x86-64 Linux Supported A static binary in every release.
x86-64 Windows Supported An .exe in every release, cross-compiled and then run against the whole test suite on a Windows runner before publishing.
arm64 macOS Supported A binary in every release, built on a Mac — Darwin cannot be cross-compiled — and run there before publishing. Not static, and unsigned.
x86-64 macOS (Intel) Not measured Nothing. It is neither tested nor promised.

Anything not in that table has no published binary. The source builds with any C compiler recent enough, so a platform that is not listed is a matter of nobody having measured it, not of a refusal.

The compiler is not part of this

Installing Molto installs no compiler, and Molto never chooses one. Your manifest states the capabilities the code needs, pickup answers which local driver provides them, and it proves each capability by compiling a program that uses it.

If the machine has nothing recent enough, pickup fetches a toolchain into ~/.pickup — again without root:

pickup doctor            # what this machine can build with, and what is missing
pickup install clang     # a toolchain of your own, under ~/.pickup

Without pickup, C_COMPILER and CPP_COMPILER name the drivers directly. That route skips pickup entirely, and with it the verification of requires, so Molto prints a warning when a compiler was chosen by hand.

macOS: two things worth knowing

The binary is not signed or notarized. If you download it with a browser, macOS attaches com.apple.quarantine to the file and Gatekeeper refuses to run it. Remove the attribute, or open it once from the Finder with a right click and Open:

xattr -d com.apple.quarantine molto pickup

Downloading it with curl — which is what the installer does — sets no quarantine attribute, so this only affects a manual download through a browser.

The macOS binary is not static, unlike the Linux one. It cannot be: Apple ships no static libSystem and does not support linking one. It links against libSystem instead, which is part of every macOS, so there is still nothing to install beside it.

After it installs

molto --version
pickup doctor

If the shell answers command not found, the install directory is not on your PATH — the POSIX installer prints the line to add, and the PowerShell one adds it for you but only for terminals opened afterwards.