karu is the Quechua word for far.
Batched byte-range reads from local files, HTTP, S3, GCS, Azure, Hugging Face and Source Cooperative.
- URIs or GDAL VSI paths for every backend, such as
s3://bucket/keyor/vsis3/bucket/key. - Batched reads that merge nearby ranges, fetch in parallel and complete one by one.
- Stateless reads that name their object, offset and buffer, so they can be reordered and retried.
- Version pinning with
statandif_match, so a changed object fails instead of mixing versions. - Retries and resumable transfers within a per-request deadline.
- Credential discovery for every backend, plus custom providers.
- Per-path configuration, for example anonymous for one bucket and a profile for another.
#include <karu/karu.hpp>
auto client = karu::Client::create(karu::Config::from_environment().value()).value();
auto object = karu::Object::parse(
"hf://datasets/asterisk-labs/rumi-api-fixtures/data/s2-00-tile.rumi").value();
auto bytes = client.read(object, 0, 4096).value();Prebuilt packages for Linux, macOS and Windows are on the
releases page, and CMake finds them
with find_package.
find_package(karu CONFIG REQUIRED)
target_link_libraries(app PRIVATE karu::karu)Guide · Configuration · Changelog
Coding agents can install the Karu skill with npx skills add asterisk-labs/karu.
MIT. See LICENSE.