Skip to main content

CAPIO-CL Logo

CAPIO-CL — Cross-Application Programmable I/O Coordination Language

CI Python Bindings RISC-V Unit tests codecov

CMake C++ Python Bindings

Platform support

OS / Arch x86_64 ARM RISC-V
Ubuntu YES YES YES
macOS No CI/CD support YES N.A.

Documentation

  • Core Language
  • Metadata Streaming
  • Doxygen 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:

CAPIO Website


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)

Source distribution for py-capio-cl 2.0.1
File Size Uploaded
py_capio_cl-2.0.1.tar.gz 1.2 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for py-capio-cl 2.0.1
File
py_capio_cl-2.0.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
py_capio_cl-2.0.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details
py_capio_cl-2.0.1-cp314-cp314-macosx_15_0_arm64.whl CPython 3.14 CPython 3.14 macOS 15.0+ ARM64 Details
py_capio_cl-2.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
py_capio_cl-2.0.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details
py_capio_cl-2.0.1-cp313-cp313-macosx_15_0_arm64.whl CPython 3.13 CPython 3.13 macOS 15.0+ ARM64 Details
py_capio_cl-2.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
py_capio_cl-2.0.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
py_capio_cl-2.0.1-cp312-cp312-macosx_15_0_arm64.whl CPython 3.12 CPython 3.12 macOS 15.0+ ARM64 Details
py_capio_cl-2.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
py_capio_cl-2.0.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
py_capio_cl-2.0.1-cp311-cp311-macosx_15_0_arm64.whl CPython 3.11 CPython 3.11 macOS 15.0+ ARM64 Details
py_capio_cl-2.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
py_capio_cl-2.0.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
py_capio_cl-2.0.1-cp310-cp310-macosx_15_0_arm64.whl CPython 3.10 CPython 3.10 macOS 15.0+ ARM64 Details

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

Release history Release notifications | RSS feed

This release

2.0.1 This release

16 release files

2.0.0

16 release files

1.5.1

31 release files

1.5.0

31 release files

1.4.1

31 release files

1.3.4

31 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page