Download

cherry π is one file. The same commit always builds the same bytes, and each release's hashes are signed, so you can check what you download against what was built. The check on this page runs in your browser, and the file never leaves your machine.

Updated Field manual Extensions What if… Brand kit

Download

Each release offers one file for every platform and one smaller file for each platform on its own. The one for this machine is listed first.

After downloading, make the file executable and run it at a terminal. On first use it unpacks this machine's part, checking each file against the hash in its manifest.

chmod +x cherrypi.ape
./cherrypi.ape

On a Mac with Apple silicon, the first run builds a small loader with the system's C compiler and keeps it in your temporary folder. If the command line tools are missing it says so. Install them once with xcode-select --install. The quarantine mark a browser puts on downloads does not stop the file, because the shell runs it.

Check a copy

Drop a cherry π file here, or choose one. The page reads it in your browser and checks that:

  • its SHA-256 is listed in a release's SHA256SUMS;
  • SHA256SUMS is signed with the release key (below);
  • the release's build record names the same SHA-256 and the same contents;
  • every file it unpacks matches the hash in its own manifest.

Drop cherrypi.ape here

    Reading a whole file takes a moment, and a phone may run out of memory on the larger one.

    Check from a terminal

    Download SHA256SUMS, SHA256SUMS.minisig and minisign.pub beside the file. Check the signature first, then the hash:

    minisign -Vm SHA256SUMS -p minisign.pub
    shasum -a 256 -c SHA256SUMS --ignore-missing     # macOS
    sha256sum -c SHA256SUMS --ignore-missing         # Linux

    The release key is read from minisign.pub.

    A key published on the same site as the files proves nothing against someone who controls the site. Compare the key ID with the one in cherry π's own announcements before you trust it.

    The file is a zip archive behind a small executable header, so you can read its manifest without running it:

    unzip -l cherrypi.ape
    unzip -p cherrypi.ape runtime/extraction-manifest.json

    Build it yourself

    A release's build record says what it was built from: the commit, whether the source was clean, the time stamp written into every file, the pinned base binary and lock files, and the versions of Go and Zig. Build the same commit with the same tool versions and you get the same bytes. The macOS desktop has to be built on a Mac with Apple silicon.

    The source is not public yet, so only people with access to it can rebuild a release today. When a release names where its source is, the steps below start by cloning it.

    git checkout <commit>
    ./build.sh
    shasum -a 256 cherrypi.ape

    The build fixes everything that would otherwise vary. Files go into the archive in sorted order, with fixed modes and the same time stamp. The Go desktop is built without paths or build IDs, the Linux desktops are linked statically with Zig, and the base binary must match the hash pinned in the source before anything is added to it.

    What a release holds

    FileWhat it is
    cherrypi.apecherry π for every platform, with the desktop for each
    cherrypi-<platform>.apecherry π with one platform's desktop and runtimes
    <file>.buildinfoThe build record: what the file was built from and with, its SHA-256 and the content ID of what it unpacks
    licenses/Every licence the file carries, with its full text, as packed in the file itself
    SHA256SUMSThe SHA-256 of every file above
    SHA256SUMS.minisigThe release key's minisign signature over SHA256SUMS
    minisign.pubThe release key, the same for every release

    The content ID is one hash over the manifest inside the file: each file's path, SHA-256, size, whether it is executable and its platform. cherry π checks it before it unpacks anything.

    cherry π is under the Functional Source License, version 1.1, with Apache-2.0 as its future licence (FSL-1.1-ALv2). Two years after each release, that release is also available under Apache-2.0. A release's licenses/ folder holds this licence and the licence of every other part the file carries.