-   [](https://platform.exaloop.io/)
-   Get started
-   Install and Update

# Install and Update

The Exaloop distribution packages the Codon compiler, CLI, native tools, and SDKs as a compatible set. Install it from the platform-specific archive supplied by Exaloop, then verify the installation before creating your first project. The archive includes the installation tools, so setup requires neither network access nor a separate Python installation.

**Prerequisites:** the tarball and SHA-256 checksum supplied by Exaloop for your platform. Database servers and Kafka brokers are installed separately.

Choose the archive for your development machine:

| Target | Minimum host |
| --- | --- |
| `darwin-arm64` | Apple Silicon, macOS 14, Apple Command Line Tools |
| `linux-x86_64` | x86-64 Linux with glibc 2.39, such as Ubuntu 24.04 |
| `linux-aarch64` | AArch64 Linux with glibc 2.39, such as Ubuntu 24.04 |

Each archive includes **all eight SDKs**: Data, DuckDB, PostgreSQL, MySQL, Redis, Kafka, optimizer, and profiling. The CLI and code generators are ready to use; you do not need to install Python or register SDKs separately. On macOS, install Apple's command-line tools first with `xcode-select --install`.

Database servers and Kafka brokers are separate. When building a server extension, check the [database compatibility requirements](https://platform.exaloop.io/db/reference/#compatibility) against the server where you will deploy it.

## First Installation

Set `ARCHIVE` to the absolute path of your tarball and `SHA256` to the checksum supplied with it. The values below are placeholders:

```sh title="Terminal"
ARCHIVE="$HOME/Downloads/exaloop-RELEASE-PLATFORM.tar.gz"
SHA256="CHECKSUM_SUPPLIED_BY_EXALOOP"
```

Verify the archive before extracting or running its contents. On macOS:

```sh title="macOS"
printf '%s  %s\n' "$SHA256" "$ARCHIVE" | shasum -a 256 --check -
```

On Linux:

```sh title="Linux"
printf '%s  %s\n' "$SHA256" "$ARCHIVE" | sha256sum --check -
```

A successful check prints the archive name followed by `OK`. A mismatch means the archive or checksum is incorrect; installation should stop at this point.

After verification, extract the tarball to a temporary directory and run its bundled installer:

```sh title="Terminal"
UNPACK=$(mktemp -d)
tar -xzf "$ARCHIVE" -C "$UNPACK"
"$UNPACK"/exaloop-*/bin/exaloop --no-project distribution install \
	--archive "$ARCHIVE" --sha256 "$SHA256"
export PATH="$HOME/.exaloop/bin:$PATH"
exaloop distribution verify
exaloop doctor --json
```

The installer verifies the archive again, installs a managed copy, and activates it. The temporary extraction directory is no longer needed afterward. Adding the `PATH` setting to your shell configuration makes `exaloop` available in new terminals. macOS binaries are ad-hoc signed, not notarized.

## Use and Updates

Check the installed SDKs:

```sh title="Terminal"
exaloop plugin list
```

Then follow the [quickstart](https://platform.exaloop.io/start/quickstart/) to create and build a project. The [CLI guide](https://platform.exaloop.io/start/cli/) covers builds, code generation, and SDK management.

Installations live under `~/.exaloop/releases/`; `EXALOOP_HOME` selects another location. Each release contains a compatible compiler and SDK set. Replacing individual components can introduce binary incompatibilities even when version numbers appear to match.

Choose an installation path without spaces: PGO and profiling builds do not support spaces in this path.

To update, use the new tarball and checksum supplied by Exaloop. Set `ARCHIVE` and `SHA256` to those values, then install through the existing CLI:

```sh title="Terminal"
exaloop --no-project distribution install --archive "$ARCHIVE" --sha256 "$SHA256"
```

To return to the previously active release:

```sh title="Terminal"
exaloop distribution rollback
```

Or activate a specific installed release using its tag and platform:

```sh title="Terminal"
exaloop distribution activate RELEASE_TAG-PLATFORM
```

If verification fails, your active release stays unchanged. Previous releases remain installed, allowing rollback without downloading another archive. A stale `.install-lock` after an interrupted installation can be removed once no installer is running.

## Project Lock

Pin a project to the active distribution so that subsequent builds use the same compiler and SDKs:

```sh title="Terminal"
exaloop distribution lock
```

`lock` records the active release, platform, and manifest digest in `exaloop.lock`. Builds fail if a different distribution is active. To activate the release recorded in an existing project lock:

```sh title="Terminal"
exaloop distribution sync
```

Install that release first if it is missing; `sync` only activates an installed, verified release. Each lock describes one platform, so use separate locks for different target platforms. Use `--no-project` for commands that should ignore the project configuration.

## Runtime-Only Packages

From a project with a configured `app` target, collect the executable and its native libraries:

```sh title="Terminal"
exaloop --target app package --bundle-runtime
exaloop --target app package --bundle-runtime --runtime-library /absolute/path/libextra.so
```

The package contains your application, its non-system native libraries, integrity hashes, and license inventory. Move the complete directory, including `lib/`, to the destination. The development compiler and Python interpreter are not included.

Use `--runtime-library` for additional libraries your code loads dynamically. Supply application data, credentials, external services, and any Python interoperability environment separately. Configure TLS certificates for the destination: the package does not include a CA bundle or make the build machine's certificate paths portable.

Without `--bundle-runtime`, `package` includes only the build artifacts. The destination must meet the package's OS, libc, and database compatibility requirements. For server extensions, review the registration SQL and deployment instructions for your database installation; an extension still needs its host database to run.

## Next Steps

-   [Build your first application](https://platform.exaloop.io/start/quickstart/) and write a Parquet file.
-   [Configure project targets](https://platform.exaloop.io/start/cli/#projects) for an existing codebase.

Source: https://platform.exaloop.io/start/distribution/
