Skip to content

Installation

terrio is published on crates.io, PyPI, conda-forge and npm (as terrio-js).

Command-line tool

The installer downloads the standalone terrio binary for your platform (Linux x86_64 and aarch64, static, any distribution; macOS Intel and Apple silicon; Windows x64 and ARM64) from the latest GitHub release, checks its SHA-256 checksum and puts it in $XDG_BIN_HOME if set, otherwise ~/.local/bin (%USERPROFILE%\.local\bin on Windows). No Rust or Python is needed.

# Linux and macOS
curl -LsSf https://terrio.dev/install.sh | sh
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://terrio.dev/install.ps1 | iex"

Set TERRIO_VERSION to install another release, and TERRIO_INSTALL_DIR to install elsewhere:

curl -LsSf https://terrio.dev/install.sh | TERRIO_VERSION=0.6.0 sh
$env:TERRIO_VERSION = "0.6.0"; irm https://terrio.dev/install.ps1 | iex

The Windows installer adds the directory to your PATH (TERRIO_NO_MODIFY_PATH=1 to leave it); the shell installer prints the line to add when it isn't on it. Run the installer again to update terrio, and see Uninstall to remove it.

On macOS and Linux, Homebrew installs the release's binary from the opengeos/terrio tap, updated with each release:

brew install --cask opengeos/terrio/terrio

brew upgrade --cask terrio updates it and brew uninstall --cask terrio removes it. The macOS binaries are not notarized, so the cask removes the quarantine attribute that would make Gatekeeper refuse to run the command. Its checksums come from the same GitHub release as the binaries: they catch a corrupted download, but are not an independent check of the release.

On Arch Linux and its derivatives, the AUR has terrio-bin (the release's binary) and terrio (built from source); on Fedora, COPR has terrio. Both are updated with each release:

# Arch Linux, with an AUR helper such as yay or paru
yay -S terrio-bin

# Fedora
sudo dnf copr enable giswqs/terrio
sudo dnf install terrio

The command also comes with the Python package (python -m terrio runs it too):

pip install terrio      # or: uv tool install terrio, pipx install terrio
conda install -c conda-forge terrio

A Docker image for linux/amd64 and linux/arm64 is published to the GitHub Container Registry with each release after 0.5.0, tagged with the version (X.Y.Z, X.Y) and latest. It runs as a non-root user in /data, so mount your data there and pass your own user to write to it:

docker run --rm --user "$(id -u):$(id -g)" -v "$PWD:/data" ghcr.io/opengeos/terrio info input.tif

With rootless Docker, use --user 0:0 instead: the container's root is your own user there.

cargo-binstall installs the release binaries (cargo binstall terrio-cli), and with Rust installed, cargo install terrio-cli builds it from source.

The optional GDAL backend, for formats terrio doesn't read itself, needs GDAL installed: cargo install terrio-cli --features gdal.

Rust library

cargo add terrio

Python

pip install terrio
# or, from conda-forge, with either of
conda install -c conda-forge terrio
mamba install -c conda-forge terrio

Wheels are built for Linux (x86_64 and aarch64, glibc and musl), macOS (Intel and Apple silicon) and Windows (x64 and ARM64), for Python 3.10 and later. They need only NumPy (and the small affine package).

The conda-forge package needs Python 3.12 or later, as its recipe currently sets. It can follow a new release after a delay, so check terrio.__version__ for the version you have.

Pyodide

A wheel for Pyodide (Python in WebAssembly, in browsers and Node.js) is attached to each GitHub release from 0.2.0 on, built for the Pyodide release it names (0.29, Python 3.13). Install it with micropip, from the release or a copy served next to the page:

import micropip

await micropip.install(
    "https://github.com/opengeos/terrio/releases/download/v0.6.0/"
    "terrio-0.6.0-cp310-abi3-pyemscripten_2025_0_wasm32.whl"
)

Files are read from and written to Pyodide's in-memory file system, or from bytes (terrio.open_bytes); remote URLs are not read (there is no HTTP client in WebAssembly): fetch them with pyodide.http first. Palette functions take Raster objects, bytes or RGBA sequences for their color maps and do not write a dst (use Raster.write). raster_index and vector_index take a mapping of locations to in-memory datasets, and their results serialize with DatasetIndex.to_bytes: these paths rely on native output protection absent from this build.

With the GDAL backend

The wheels on PyPI do not include the GDAL backend. With GDAL 3.4 or later installed (where pkg-config or GDAL_HOME finds it), build terrio with it from source:

git clone https://github.com/opengeos/terrio
cd terrio/python && pip install maturin numpy affine
maturin build --release --features gdal && pip install ../target/wheels/terrio-*.whl

terrio.open_raster, terrio.open_vector and terrio.rio.open then fall back to GDAL for the formats terrio doesn't read itself (NITF, HDF4...). The wheel links the GDAL found at build time, which must stay installed.

JavaScript

npm install terrio-js

The package is built for browsers and bundlers; in Node.js, pass the WebAssembly bytes to init (see JavaScript).

From source

The development version, with Rust installed:

cargo install --git https://github.com/opengeos/terrio terrio-cli

git clone https://github.com/opengeos/terrio
cd terrio/python && pip install maturin numpy && maturin develop --release   # Python
cd ../js && wasm-pack build --target web                                      # JavaScript

Uninstall

Remove terrio the way you installed it:

Installed with Command
install.sh rm "${XDG_BIN_HOME:-$HOME/.local/bin}/terrio"
install.ps1 Remove-Item "$env:USERPROFILE\.local\bin\terrio.exe"
Homebrew brew uninstall --cask terrio
AUR sudo pacman -R terrio-bin (or terrio)
Fedora COPR sudo dnf remove terrio
pip pip uninstall terrio
uv uv tool uninstall terrio
pipx pipx uninstall terrio
conda or mamba conda remove terrio or mamba remove terrio
Cargo or cargo-binstall cargo uninstall terrio-cli
npm npm uninstall terrio-js
Pyodide micropip.uninstall("terrio")
Docker docker image rm ghcr.io/opengeos/terrio:<tag> (latest or the version you pulled)

If you installed with TERRIO_INSTALL_DIR, delete the binary from that directory instead. The Windows installer adds its directory to your PATH if it isn't there already; if it did, you can remove the entry from your user environment variables when nothing else uses that directory.

To find the copies on your PATH, run which -a terrio (where.exe terrio on Windows). Their locations usually show how each was installed.

Requirements

terrio has no system dependencies: no GDAL, PROJ, GEOS or SQLite to install. Building from source needs a Rust toolchain, 1.90 or later.