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 |
Metadata
Release files for py-capio-cl 2.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| py_capio_cl-2.0.2.tar.gz | 1.2 MB | Without provenance | Details for py_capio_cl-2.0.2.tar.gz |
Built distributions (wheels)
Total release size: 45.4 MB
Release files / py_capio_cl-2.0.2.tar.gz
| Download URL | py_capio_cl-2.0.2.tar.gz |
|---|---|
| Size | 1.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c684dada0d7b7463388e2cbca89a1e36893bcc0430b0bacc276a8fa844b0c2f5
|
|
BLAKE2b-256 checksum How to use checksums |
a4e386d969cb791b80c9e8fbd21f1d032300c7659bc2aee4d69004f0c5ba45ae
|
| 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.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | py_capio_cl-2.0.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 3.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 |
f18c66c5733c8849b511d5cc25fc1927574d3c1517f12bcd13d711c0be3689fb
|
|
BLAKE2b-256 checksum How to use checksums |
5f39cc3b080be93219bcccc9ecfd5a0a226a360208f6fceea357ac7da1e53aab
|
| 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.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | py_capio_cl-2.0.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.1 MB |
| Tags | CPython 3.14 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
53e25b7b81fdbd0e7f5e8b479765f358d3a08af24b5b1327477a7f6afd317c88
|
|
BLAKE2b-256 checksum How to use checksums |
f25f3ce9490790785b3045b6f899e2bb930a407a7adbab3f6b03dc427875c7a1
|
| 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.2-cp314-cp314-macosx_15_0_arm64.whl
| Download URL | py_capio_cl-2.0.2-cp314-cp314-macosx_15_0_arm64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.14 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
bbfcf23a360a1b0b3fd3739c5efec6bc6e64893d8b66c3bac69478ad15003518
|
|
BLAKE2b-256 checksum How to use checksums |
f2bcc8c1cb514b71ec119857beb3c19cbf7e91220234fd099a45d93ac8ac6a25
|
| 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.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | py_capio_cl-2.0.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 3.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 |
3520fa7b9d128c98faed8bb6074b99985af34e6787468ba661a6af9f9414d6c5
|
|
BLAKE2b-256 checksum How to use checksums |
b4428fbae6498a5e90b7187dfa430bd82c87fdfec62b7a6d630cbeebbfa0c639
|
| 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.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | py_capio_cl-2.0.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.1 MB |
| Tags | CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
fe5dc6d154b5013140971ba466f2c6aaf841a3bf7deb7f755976e276b3b7f182
|
|
BLAKE2b-256 checksum How to use checksums |
b408449e5f7839625aebccbd1beae5d27df7a7ab0f69e4de8bf5d2157510306c
|
| 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.2-cp313-cp313-macosx_15_0_arm64.whl
| Download URL | py_capio_cl-2.0.2-cp313-cp313-macosx_15_0_arm64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.13 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
94472d0d46bca6c8345d1954f69719af2f83a790344809174f2385c874456dcc
|
|
BLAKE2b-256 checksum How to use checksums |
6ff2b5201c5e0cdfc88ac04617d8b3fae3b06cec1e45b6a0a7a4ab74005a7edb
|
| 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.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | py_capio_cl-2.0.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 3.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 |
c6aa3175507b874d67bcf17c59c4ac5924762e7ee05e34971d9f2d829e3a179d
|
|
BLAKE2b-256 checksum How to use checksums |
10f65dfdc2bc61311e3c9ef58d7069137dc5a2767d7b2952ac1689d0266447af
|
| 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.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | py_capio_cl-2.0.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.1 MB |
| Tags | CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
8d4c354a7f2b8d9432e443a4d6edb30226c24de8387ac595d56e46b0a79ac5f7
|
|
BLAKE2b-256 checksum How to use checksums |
c86a39e22c432d81e37991e0555bca5d7b2e3f2592c5c879afd657b461a79f3e
|
| 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.2-cp312-cp312-macosx_15_0_arm64.whl
| Download URL | py_capio_cl-2.0.2-cp312-cp312-macosx_15_0_arm64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.12 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
153a33c412ac945369f1c6ebcf1ba14cf8854e9e5d03214ae7720d4056416ac8
|
|
BLAKE2b-256 checksum How to use checksums |
69dc821a7318173d992be8eb8487010d2a8a8728928e520bbafe1507b1d614c1
|
| 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.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | py_capio_cl-2.0.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 3.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 |
f68ac53c98c46e55c03b77a305e20971419aaff3e83bab6357b7b3aa9add9d07
|
|
BLAKE2b-256 checksum How to use checksums |
86f4014ba8628381171d3984990806ec3afe5ef145ba2fc3ec1358f7863979a2
|
| 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.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | py_capio_cl-2.0.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.1 MB |
| Tags | CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
741893c99153fcc70f1fbb2f0c4d9cc94dfe0a71157257f469461602a4dcd04d
|
|
BLAKE2b-256 checksum How to use checksums |
bbd01301a3778f9257037d3dd9ea377a6c8d9ba83dfc913c49c9d315bb4bd372
|
| 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.2-cp311-cp311-macosx_15_0_arm64.whl
| Download URL | py_capio_cl-2.0.2-cp311-cp311-macosx_15_0_arm64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.11 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ea6e2f6d8f158b701152541e1371ae98421c46a73c25e674b0dec8c94f72d531
|
|
BLAKE2b-256 checksum How to use checksums |
4b802d95f3c75e4bdbe8829e76e6fff9ed44789d94716b5b26ff48b763892dd7
|
| 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.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | py_capio_cl-2.0.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 3.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 |
05a9a783b648bb1c9cf072f4a20579e6e1c2c59c02df40eb22eeceb08d52d4e7
|
|
BLAKE2b-256 checksum How to use checksums |
3c2fa13d9f9df39b77fb6edeb9861ccf88998a083bd82af8e07210778d66c423
|
| 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.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | py_capio_cl-2.0.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.1 MB |
| Tags | CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
fee480e0f288d08c5e4c009a81de1680efe03e56f71cfe730d28e308c0efbfe1
|
|
BLAKE2b-256 checksum How to use checksums |
8ec9c84271d154a17d1da64de0ceb0960c3e05d9c4d01fae3ebc49c5b7d28871
|
| 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.2-cp310-cp310-macosx_15_0_arm64.whl
| Download URL | py_capio_cl-2.0.2-cp310-cp310-macosx_15_0_arm64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.10 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f9e5eea967db858e1aebc2233f32fe2bf9c7c495cf476e8779c649648cffbdb7
|
|
BLAKE2b-256 checksum How to use checksums |
a10d30563d380456c7fb4dd0cc9399c80797e9141abe54f2004453a13ade546c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Security for py-capio-cl 2.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.