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
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.
$ 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.
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.
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
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.
$ conda create -n iowarp -c iowarp -c conda-forge python=3.12 iowarp-core
$ conda activate iowarp
$ clio_run --helpBuild the recipe yourself
To enable other features, build the recipe yourself. IOWARP_PRESET picks a preset from CMakePresets.json:
$ 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-*.condaDocker
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.
$ 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 startPort 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:
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
Install a recent Spack
shell$ git clone --depth=2 https://github.com/spack/spack.git $ . spack/share/spack/setup-env.shAdd the IOWarp repository
shell$ git clone --recurse-submodules https://github.com/iowarp/clio-core.git $ spack repo add clio-core/installers/spackInstall
shell$ spack install iowarp +fuseThe package tracks the
main(default) anddevbranches. Variants include+fuse,+python,+adios2,+mochi,+compress,+encrypt,+cuda,+rocm,+s3and+gcs. HDF5, MPI-IO and ELF interception are on by default in Spack.
Packages
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
You need a C++20 compiler (GCC 11+ or Clang 14+) and CMake 3.20 or newer.
Linux
$ 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 buildAs an alternative to apt, CI/ci-deps.sh --only-deps release builds every dependency into a conda environment.
macOS
$ 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
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 ReleaseDependencies 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
| Preset | Builds |
|---|---|
release, debug | CPU build with all engines, into build |
release-fuse | Adds the FUSE adapter on Linux |
release-mac-fuse | FUSE adapter on macOS, into build-mac-fuse |
release-adapter | MPI, HDF5 VOL, ADIOS2 and FUSE adapters |
vfd | HDF5 VFD plus ELF interception, into build-vfd |
cuda-release, rocm-debug, sycl-debug | NVIDIA, AMD and Intel GPUs |
windows-release, windows-debug | Visual Studio and vcpkg |
asan, ubsan, msan, leak-check | Sanitizer builds for development |
Feature options
| Option | Default | Enables |
|---|---|---|
CLIO_CTE_ENABLE_FUSE_ADAPTER | OFF | clio_cte_fuse (libfuse3, macFUSE or WinFsp) |
CLIO_CORE_ENABLE_PYTHON | OFF | Python bindings |
CLIO_ENABLE_AMAZON_DRIVE | OFF | S3 block devices (AWS SDK) |
CLIO_ENABLE_GOOGLE_CLOUD | OFF | Google Cloud Storage block devices (Poco) |
CAE_ENABLE_S3, CAE_ENABLE_GCS | OFF | Import s3:// and gs:// objects |
CLIO_CORE_ENABLE_ELF | OFF | ELF interception for the POSIX, STDIO and MPI-IO adapters |
CLIO_CTE_ENABLE_HDF5_VOL, CLIO_CTE_ENABLE_VFD | OFF | HDF5 connectors |
CLIO_CTE_ENABLE_ADIOS2 | OFF | ADIOS2 engine plugin |
CLIO_CTE_ENABLE_COMPRESS | OFF | The compressor module |
CLIO_CORE_ENABLE_{CUDA,ROCM,SYCL} | OFF | GPU 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:
$CLIO_SERVER_CONF~/.clio/clio.yaml- 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.