CAPIO-CL — Cross-Application Programmable I/O Coordination Language
Platform support
| OS / Arch | |||
|---|---|---|---|
| YES | YES | YES | |
| No CI/CD support | YES | N.A. |
Documentation
CAPIO-CL is a novel I/O coordination language that enables users to annotate file-based workflow data dependencies with synchronization semantics for files and directories. Designed to facilitate transparent overlap between computation and I/O operations, CAPIO-CL allows multiple producer–consumer application modules to coordinate efficiently using a JSON-based syntax.
For detailed documentation and examples, please visit:
Overview
The CAPIO Coordination Language (CAPIO-CL) allows applications to declare:
- Data objects, I/O dependencies, and access modes
- Synchronization semantics across different processes
- Commit policies for I/O objects
At runtime, CAPIO-CL’s parser and engine components analyze, track, and manage these declared relationships, enabling * transparent data sharing* and cross-application optimizations.
Building
Requirements & dependencies
- C++17 or greater
- Cmake 3.15 or newer
- Python3 to bundle CAPIO-CL json schemas into target binaries
- danielaparker/jsoncons to parse, serialize and validate CAPIO-CL JSON config files
- GoogleTest for automated testing
- pybind11 when building python wheels
- CALF for both logs and CLI messages
jsoncons, GoogleTest and pybind11 are fetched automatically by CMake — no manual setup required.
Steps
Clone
git clone https://github.com/High-Performance-IO/CAPIO-CL.git
mkdir -p CAPIO-CL/build && cd CAPIO-CL/build
cmake ..
make
By default, this will:
- Build the "libcapio_cl" static library
- Build the "CAPIO_CL_tests" executable (GoogleTest-based)
- Build the "py_capio_cl" python bindings (pybind11)
Integration as a Subproject
CAPIO-CL can be included directly into another CMake project using:
include(FetchContent)
#####################################
# External projects
#####################################
FetchContent_Declare(
capio_cl
GIT_REPOSITORY https://github.com/High-Performance-IO/CAPIO-CL.git
GIT_TAG main
)
FetchContent_MakeAvailable(capio_cl)
#####################################
# Include files and directories
#####################################
target_include_directories(${TARGET_NAME} PRIVATE
${capio_cl_SOURCE_DIR}
)
#####################################
# Link libraries
#####################################
target_link_libraries(${PROJECT_NAME} PRIVATE
libcapio_cl
)
When included this way, unit tests and python bindings are not built, keeping integration clean for external projects.
Python Bindings
CAPIO-CL now provides native Python bindings built using pybind11.
These bindings expose the core C++ APIs (Engine, Parser and Serializer), directly
to Python, allowing the CAPIO-CL logic to be used within python projects.
Install from PyPI
CAPIO-CL is available on PyPI! Simply run
pip install py_capio_cl
Building the Bindings
You can build and install the Python bindings directly from the CAPIO-CL source tree using:
pip install --upgrade pip
pip install -r build-requirements.txt
python -m build
pip install dst/*.whl
This will build the Python wheel and install it into your current environment using an ad-hoc build environment, which is downloaded, installed, and configured in isolation. A faster way to build and install CAPIO-CL is to use native system packages and then run from within the CAPIO-CL root directory:
pip install .
This assumes that all build dependencies not fetched by cmake are available.
Runtime TOML Configuration
Runtime behavior is configured with a TOML file loaded into CapioClConfiguration. This is separate from the JSON
coordination-language document: the TOML file selects the JSON document, monitor backends, metadata storage, and dynamic
API settings.
Complete example
# Workflow and optional JSON coordination-language document
[capiocl]
workflow_name = "my-workflow"
config_path = "workflow.json"
resolve_path = "/data/run-42"
store_all_in_memory = false
[capiocl.dynamic_api]
enabled = false
ip = "224.224.224.3"
port = 11223
[capiocl.monitor.filesystem]
enabled = true
metadata_dir = "/shared/trusted/run-42"
[capiocl.monitor.mcast]
enabled = false
delay_ms = 300
[capiocl.monitor.mcast.commit]
ip = "224.224.224.1"
port = 12345
[capiocl.monitor.mcast.homenode]
ip = "224.224.224.2"
port = 12345
Options
| Key | Type | Default | Description |
|---|---|---|---|
capiocl.workflow_name |
string | JSON name, or CAPIO without JSON |
Overrides the workflow name. |
capiocl.config_path |
string/path | empty | JSON CAPIO-CL document to parse. An empty value creates a runtime-only engine. |
capiocl.resolve_path |
string/path | empty | Prefix applied to relative paths in the JSON document. |
capiocl.store_all_in_memory |
boolean | false |
Marks every parsed data path for in-memory storage. |
capiocl.dynamic_api.enabled |
boolean | false |
Starts the dynamic configuration API. |
capiocl.dynamic_api.ip |
string | 224.224.224.3 |
Multicast address used by the dynamic API. |
capiocl.dynamic_api.port |
integer | 11223 |
UDP port used by the dynamic API. |
capiocl.monitor.filesystem.enabled |
boolean | see below | Enables filesystem commit and home-node tokens. |
capiocl.monitor.filesystem.metadata_dir |
string/path | empty | Trusted metadata root for persistent counted ON_CLOSE state. |
capiocl.monitor.mcast.enabled |
boolean | see below | Enables multicast commit and home-node propagation. |
capiocl.monitor.mcast.delay_ms |
integer | 300 |
Delay before multicast status operations, in milliseconds. |
capiocl.monitor.mcast.commit.ip |
string | 224.224.224.1 |
Multicast group for commit state. |
capiocl.monitor.mcast.commit.port |
integer | 12345 |
UDP port for commit state. |
capiocl.monitor.mcast.homenode.ip |
string | 224.224.224.2 |
Multicast group for home-node state. |
capiocl.monitor.mcast.homenode.port |
integer | 12345 |
UDP port for home-node state. |
Every CAPIO-CL option is under the top-level capiocl table. Other top-level tables may coexist in the same TOML file
and are ignored by CAPIO-CL. When parsing a user-provided configuration, omitted
capiocl.monitor.filesystem.enabled and capiocl.monitor.mcast.enabled values are false. Engine() and
CapioClConfiguration.loadDefaults() use the built-in configuration, which enables both monitors. Set both values
explicitly in deployed TOML files to avoid ambiguity.
TOML booleans must be unquoted true or false, and ports/delays must be integers. Relative capiocl.config_path,
capiocl.resolve_path, and capiocl.monitor.filesystem.metadata_dir values are interpreted from the process working
directory. Unknown keys are retained but ignored by CAPIO-CL.
Filesystem metadata
capiocl.monitor.filesystem.metadata_dir is required only when an ON_CLOSE rule commits after more than one close. It
must name a trusted, non-attacker-writable directory unique to the workflow run. CAPIO-CL creates and owns a capiocl
subdirectory beneath it. Multi-process and multi-node producers must share that directory through storage providing
coherent atomic exclusive file creation, rename, and unlink. Ordinary commit and home-node token operations do not
require this option.
Loading configuration
#include "capiocl/configuration.h"
#include "capiocl/parser.h"
using capiocl::configuration::CapioClConfiguration;
CapioClConfiguration config;
config.load("runtime.toml");
std::unique_ptr<capiocl::engine::Engine> engine(capiocl::parser::Parser::parse(config));
import py_capio_cl
config = py_capio_cl.CapioClConfiguration()
config.load("runtime.toml")
engine = py_capio_cl.Parser.parse(config)
Configuration can also be constructed from a string map/dictionary. Values in that form must use their flattened keys
and string representations, for example {"capiocl.monitor.filesystem.enabled": "true"}.
API Snapshot
A simplified example of CAPIO-CL usage in C++:
#include "capiocl.hpp"
int main() {
capiocl::Engine engine;
engine.newFile("Hello_World.txt")
engine.print();
// Dump engine to configuration file
capiocl::Serializer::dump(engine, "my_workflow", "my_workflow.json")
return 0;
}
The py_capio_cl module provides access to CAPIO-CL’s core functionality through a high-level Python interface.
from py_capio_cl import Engine, Serializer
engine = Engine()
engine.newFile("Hello_World.txt")
engine.print()
# Dump engine to configuration file
Serializer.dump(engine, "my_workflow", "my_workflow.json")
Notes
- All GET endpoints expect a JSON body containing the targeted file path.
- The API is intended for local control and orchestration, not public exposure.
Developing team
| Name | Role | Contact |
|---|---|---|
| Marco Edoardo Santimaria | Designer and Maintainer | email | Homepage |
| Iacopo Colonnelli | Workflows Expert and Designer | email | Homepage |
| Massimo Torquati | Designer | email | Homepage |
| Marco Aldinucci | Designer | email | Homepage |
Former Members
| Name | Role | Contact |
|---|---|---|
| Alberto Riccardo Martinelli | Designer | email | Homepage |
Release files for py-capio-cl 2.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| py_capio_cl-2.0.1.tar.gz | 1.2 MB | Details |
Built distributions (wheels)
Total release size: 62.3 MB
Release files / py_capio_cl-2.0.1.tar.gz
| Download URL | py_capio_cl-2.0.1.tar.gz |
|---|---|
| Size | 1.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
87d0ee2c0af3786eea00696f7f8241660313c81babbe098892cf87233f17332d
|
|
BLAKE2b-256 checksum How to use checksums |
cafb1ec702feb3dc1bc5b6728d716a6de5b56922f6d6f9071b27935795733149
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | py_capio_cl-2.0.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.2 MB |
| Tags | CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
8f7356e764fe6bc158214794e09106c6109c6d253ffdc9bcf8a69950069797df
|
|
BLAKE2b-256 checksum How to use checksums |
44d6b032b29b0c981e41057ea7651eae604e91f93da552ded466754b0e4e6d0e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | py_capio_cl-2.0.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.14 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
9c205c7fe14abbc6fd2666b00b9d7febea4d3ee6998cc0ed4ba7c01b4dc44b30
|
|
BLAKE2b-256 checksum How to use checksums |
2e6a7c1f4b2a00052522b6df60e823ab88d6baae0696487fea62a20c213b4483
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp314-cp314-macosx_15_0_arm64.whl
| Download URL | py_capio_cl-2.0.1-cp314-cp314-macosx_15_0_arm64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.14 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5d8caf5bef1dbcaa954fa5ea24af1ebc3c677fefa46331c8ee2338939538d261
|
|
BLAKE2b-256 checksum How to use checksums |
c438716d4e4d11929ea59f4b02ef1f3f97b7174b20419ce88d7f5bcfbf568351
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | py_capio_cl-2.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.2 MB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
974dbf5a54a73dfb137afd425ef535872d8152f6042a94d3d585c2e23ff045e2
|
|
BLAKE2b-256 checksum How to use checksums |
eb1cd08bdf5a13b91ede88ad30ceb674e883810f04bdbcedd691e3c2c627a0de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | py_capio_cl-2.0.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
57814f3d7a9c980dc98d666b07c169c71e921525d6bbfcf40b5dbcd67e953352
|
|
BLAKE2b-256 checksum How to use checksums |
71b2fc1641c820cd08484b833aa14194612e9271a451dc2f5ad6491132e68994
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp313-cp313-macosx_15_0_arm64.whl
| Download URL | py_capio_cl-2.0.1-cp313-cp313-macosx_15_0_arm64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.13 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
01e7f0469dd197caccb2a4711bbd632b4c7fe73f4762cc08426a4082bc3d9066
|
|
BLAKE2b-256 checksum How to use checksums |
75a189fa5c39eb74f1e9108bafc5faaac1e9cb35f71d2f603803e7268b12ccfa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | py_capio_cl-2.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.2 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
7148cf7ec0b7707d03db30b1e06951545d2798326deba0f749ab755e998cc3ff
|
|
BLAKE2b-256 checksum How to use checksums |
d8b0a928a09e1bb231a70f71bdbe4202157f1a4386418d144b24b9d34f16550a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | py_capio_cl-2.0.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
7dd47bcbec05b2ab8338518da70b8598f06d3eade804758af5d181fb6c804c56
|
|
BLAKE2b-256 checksum How to use checksums |
f823009e7f1451635b0f38218db044c074fa0e07c5d43d9dced58ae59b54a74a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp312-cp312-macosx_15_0_arm64.whl
| Download URL | py_capio_cl-2.0.1-cp312-cp312-macosx_15_0_arm64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.12 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d7c773513e905a24480975b36dbbc266d5367e3083b8a6bfa18e13af863bb148
|
|
BLAKE2b-256 checksum How to use checksums |
726d196f44ccbd6f55b1dbccc100f8c623e1e5d074d1b25c3bd2fa5b1db783c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | py_capio_cl-2.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.2 MB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
0dcb198862520b43e3537156fb898591242ba18e28000346eb21d90bf2026626
|
|
BLAKE2b-256 checksum How to use checksums |
768222bbdaa8003d96aa4a5da090958b7b80088e8736fdab04e496004d5d234d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | py_capio_cl-2.0.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
b3a34d4d518c21b7959677bd30327c60efe018207e6ab69989d905dd74ad3a79
|
|
BLAKE2b-256 checksum How to use checksums |
facc7aeea0d8ff775cc66e4dc3557da1f5f29febefe30f3eb6c9098b69de9870
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp311-cp311-macosx_15_0_arm64.whl
| Download URL | py_capio_cl-2.0.1-cp311-cp311-macosx_15_0_arm64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.11 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8b40aef38416d7208f99d3d25c98559d66d5dca29dcae93efd4a933e27bebcdc
|
|
BLAKE2b-256 checksum How to use checksums |
777f265884186fb10754797a86ef9f6d00f7cfeacc914bf46deb39a176014707
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | py_capio_cl-2.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.2 MB |
| Tags | CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
51b86bd4c6a8af9cf9da40f0e3c70410c212b2649263975f9cac67c3023e08d2
|
|
BLAKE2b-256 checksum How to use checksums |
7d4bc57687963c5e7045943a00557fb6d015157632e3a1498eb46190b0bca4fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | py_capio_cl-2.0.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
6bb2ce1fb8d72f361dbf278cb5e808a71ae5e42e8930469a0aa45f3c5024ca6d
|
|
BLAKE2b-256 checksum How to use checksums |
2307d1ec75d08e67988649298fcabff9ad25a8fda4cf59487c7116e8bb55fb7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / py_capio_cl-2.0.1-cp310-cp310-macosx_15_0_arm64.whl
| Download URL | py_capio_cl-2.0.1-cp310-cp310-macosx_15_0_arm64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.10 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
98e71a10003e42cd6e08f2b97bde21adec85666def4c76ebedc46255976c814a
|
|
BLAKE2b-256 checksum How to use checksums |
bca300e0a3488e3b0bb6bd49b7b48ee8c9366ef398da453e81c0e8345ee54d78
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|