Docs

Install CLIO Core.

The pip wheel is the quickest start. Build from source only for GPUs, MPI, HDF5, ADIOS2, the I/O interceptors, or FUSE on macOS.

Time
2 to 20 minutes
Python
3.10 to 3.13 for pip
Needs root
Only for FUSE drivers and system installs

Choose a method

Pick the method that fits your machine. Only its instructions are shown. Most people should start with pip.

pip

Platforms: Linux x86_64 and aarch64 (glibc 2.28+), Windows x64, macOS 14+ on Apple Silicon

The wheel is self-contained. Its dependencies are linked statically on Linux and bundled on macOS and Windows. The only extra software you might need is a FUSE driver to mount the filesystem.

shell
$ pip install iowarp-core
$ python -c "import iowarp_core; print(iowarp_core.get_version())"

The wheel puts these commands on your PATH: clio_run, clio_cte_fuse (Linux and Windows), clio_cte_bench and clio_run_thrpt_bench. It also gives you the Python modules iowarp_core, clio_cee and clio_cte_core_ext.

The first time Python imports iowarp_core, it copies the default configuration to ~/.clio/clio.yaml. It never overwrites an existing file.

To mount the filesystem

Linux needs the system FUSE 3 package (sudo apt install fuse3 libfuse3-3). Windows needs WinFsp. The macOS wheel has no FUSE binary, so build from source on macOS to mount.

Other Python versions

Wheels are published for CPython 3.10 to 3.13 only, and there is no source distribution. On Python 3.14, or any other platform, pip reports "no matching distribution". Use another method there.

conda

Platforms: linux-64, Python 3.12

Packages are published to the iowarp channel on Anaconda.org for linux-64 and Python 3.12. They are built from the release preset and do not include the FUSE adapter.

shell
$ conda create -n iowarp -c iowarp -c conda-forge python=3.12 iowarp-core
$ conda activate iowarp
$ clio_run --help

Build the recipe yourself

To enable other features, build the recipe yourself. IOWARP_PRESET picks a preset from CMakePresets.json:

shell
$ git clone --recurse-submodules https://github.com/iowarp/clio-core.git
$ cd clio-core
$ conda install -n base -y conda-build -c conda-forge
$ IOWARP_PRESET=release conda build installers/conda/ -c conda-forge --output-folder build/conda-output
$ conda install -c conda-forge build/conda-output/*/iowarp-core-*.conda

Docker

Platforms: amd64, arm64

The iowarp/deploy-cpu image is multi-arch (amd64 and arm64). It includes MPI, the HDF5 VOL connector, ADIOS2 and compression. It runs as the iowarp user. Its default command is a shell, so pass clio_run start yourself.

shell
$ docker pull iowarp/deploy-cpu:latest
$ docker run -d -p 9413:9413 -p 8080:8080 -e CLIO_VIZ_BIND=0.0.0.0 \
    --memory=8g --name iowarp iowarp/deploy-cpu:latest clio_run start

Port 9413 is the runtime RPC port and 8080 is the dashboard. :latest is rebuilt from the main branch.

As a long-running service

For a long-running service, mount your own config and a volume for state. That keeps the persistent tier, the metadata log and the search index across docker compose down:

docker-compose.yml
services:
  iowarp:
    image: iowarp/deploy-cpu:latest
    volumes:
      - ./clio.yaml:/etc/iowarp/clio.yaml:ro
      - iowarp-state:/home/iowarp/.clio
    environment:
      - CLIO_SERVER_CONF=/etc/iowarp/clio.yaml
      - CLIO_VIZ_BIND=0.0.0.0
    ports:
      - "9413:9413"
      - "8080:8080"
    mem_limit: 8g
    command: ["clio_run", "start"]
    restart: unless-stopped
volumes:
  iowarp-state:

CLIO Core uses memfd_create() for shared memory on Linux, so /dev/shm needs no tuning. Only mem_limit matters.

Spack

Platforms: Linux x86_64 and aarch64

  1. Install a recent Spack

    shell
    $ git clone --depth=2 https://github.com/spack/spack.git
    $ . spack/share/spack/setup-env.sh
  2. Add the IOWarp repository

    shell
    $ git clone --recurse-submodules https://github.com/iowarp/clio-core.git
    $ spack repo add clio-core/installers/spack
  3. Install

    shell
    $ spack install iowarp +fuse

    The package tracks the main (default) and dev branches. Variants include +fuse, +python, +adios2, +mochi, +compress, +encrypt, +cuda, +rocm, +s3 and +gcs. HDF5, MPI-IO and ELF interception are on by default in Spack.

Packages

Platforms: Ubuntu 24.04, Fedora 40, Windows x64

Each tagged release on GitHub Releases carries .deb (Ubuntu 24.04) and .rpm (Fedora 40) packages and an AppImage for x86_64 and arm64, plus a ZIP and an installer for Windows x64. They include the FUSE adapter but not the Python bindings. They do not create ~/.clio/clio.yaml. Without that file the runtime uses built-in defaults. Set CLIO_SERVER_CONF to use your own file.

Source

Platforms: Linux, macOS, Windows

You need a C++20 compiler (GCC 11+ or Clang 14+) and CMake 3.20 or newer.

Linux

shell
$ sudo apt install -y build-essential cmake ninja-build pkg-config git \
    python3 python3-pip python3-venv libfuse3-dev fuse3 \
    libyaml-cpp-dev libcereal-dev libmsgpack-dev libsodium-dev libzmq3-dev
$ git clone --recurse-submodules https://github.com/iowarp/clio-core.git
$ cd clio-core
$ cmake --preset release-fuse
$ cmake --build build -j"$(nproc)"
$ sudo cmake --install build

As an alternative to apt, CI/ci-deps.sh --only-deps release builds every dependency into a conda environment.

macOS

shell
$ brew install --cask macfuse
$ git clone --recurse-submodules https://github.com/iowarp/clio-core.git
$ cd clio-core
$ ./CI/ci-deps.sh --only-deps release
$ conda activate iowarp
$ cmake --preset release-mac-fuse -DCLIO_CORE_ENABLE_CONDA=ON
$ cmake --build build-mac-fuse -j"$(sysctl -n hw.ncpu)"

The release-mac-fuse preset builds into build-mac-fuse. macFUSE needs a one-time approval in System Settings. See FUSE on macOS.

Windows

powershell
PS> git clone --recurse-submodules https://github.com/iowarp/clio-core.git
PS> cd clio-core
PS> cmake --preset windows-release -DCLIO_CTE_ENABLE_FUSE_ADAPTER=ON
PS> cmake --build build --config Release

Dependencies come from vcpkg. Set VCPKG_ROOT first; the manifest is installers/vcpkg/vcpkg.json. The FUSE adapter uses WinFsp. Install the WinFsp MSI with its developer files (ADDLOCAL=ALL).

Presets

PresetBuilds
release, debugCPU build with all engines, into build
release-fuseAdds the FUSE adapter on Linux
release-mac-fuseFUSE adapter on macOS, into build-mac-fuse
release-adapterMPI, HDF5 VOL, ADIOS2 and FUSE adapters
vfdHDF5 VFD plus ELF interception, into build-vfd
cuda-release, rocm-debug, sycl-debugNVIDIA, AMD and Intel GPUs
windows-release, windows-debugVisual Studio and vcpkg
asan, ubsan, msan, leak-checkSanitizer builds for development

Feature options

OptionDefaultEnables
CLIO_CTE_ENABLE_FUSE_ADAPTEROFFclio_cte_fuse (libfuse3, macFUSE or WinFsp)
CLIO_CORE_ENABLE_PYTHONOFFPython bindings
CLIO_ENABLE_AMAZON_DRIVEOFFS3 block devices (AWS SDK)
CLIO_ENABLE_GOOGLE_CLOUDOFFGoogle Cloud Storage block devices (Poco)
CAE_ENABLE_S3, CAE_ENABLE_GCSOFFImport s3:// and gs:// objects
CLIO_CORE_ENABLE_ELFOFFELF interception for the POSIX, STDIO and MPI-IO adapters
CLIO_CTE_ENABLE_HDF5_VOL, CLIO_CTE_ENABLE_VFDOFFHDF5 connectors
CLIO_CTE_ENABLE_ADIOS2OFFADIOS2 engine plugin
CLIO_CTE_ENABLE_COMPRESSOFFThe compressor module
CLIO_CORE_ENABLE_{CUDA,ROCM,SYCL}OFFGPU backends

When an adapter's dependency is missing, the build skips it with a warning rather than failing. Check the configure output for the features you need.

After installing

The runtime reads its configuration from the first of these that exists:

  1. $CLIO_SERVER_CONF
  2. ~/.clio/clio.yaml
  3. Built-in defaults: port 9413, a RAM tier sized from system memory, and persistent state under ~/.clio

Upgrades never touch an existing ~/.clio/clio.yaml. If a release adds modules to the default configuration, merge them from <prefix>/etc/clio/clio_default.yaml, or delete your copy so it is created again. Uninstall with the package manager you installed with.

Next, start the runtime and mount the filesystem.