rypipe
Format-agnostic columnar ingestion engine with Rust core and Python bindings.
Parse row-oriented byte streams into Apache Arrow record batches with parallel scheduling, memory-bounded execution, query pushdown, and a chainable pipeline API. Format adapters live in separate packages.
What is rypipe
rypipe is a pure ingestion-to-Arrow engine. It separates format-specific
parsing (splitting, row extraction) from format-agnostic execution (typed
column builders, filtering, projection, dictionary encoding, parallel
scheduling, memory-bounded execution, and Arrow export). Add a new format by
implementing two small traits: Splitter and RecordParser.
rypipe itself does not ship parsers for XML, JSON, CSV, HTML, or any
other format. Those live in separate adapter packages. Install the engine plus
the adapters you need.
Note: the engine model is taken from emiliano-go/crxml, abstracted away from any single format.
Features
- Zero-copy friendly: decoders emit borrowed strings; the engine copies only when necessary.
- GIL-free parsing: heavy work runs outside Python's GIL.
- Parallel by default: chunked parsing with
rayonscales to many cores. - Memory bounded: stream files larger than RAM with a configurable budget.
- Typed columns: cast strings to
int64,float64, orboolduring parse. - Pushdown filters: rename, drop, type, and filter rows while parsing.
- Pipeline API: chainable rename/drop/cast/filter stages with automatic fusion.
- Dictionary encoding: explicit or automatic low-cardinality encoding.
- Arrow native: produces
RecordBatchand exports via the C Data Interface.
Crates
| Crate | Purpose |
|---|---|
rypipe-core |
Pure Rust engine: Value, ExecutionPlan, TableBuilder, ColumnarSink, RecordParser, Splitter, Pipeline, parallel/bounded drivers, Arrow export |
rypipe-python |
PyO3 bindings and helper functions for adapter packages; exposes the rypipe package |
Python quick start
pip install rypipe my-adapter
Wheels are built against CPython's stable ABI (abi3, 3.10+), so one wheel per
platform covers every supported interpreter, including versions released after
a given rypipe release. Prebuilt wheels ship for manylinux (glibc 2.17+),
musllinux, macOS (x86_64 and arm64), and Windows x64; anything else builds from
the sdist and needs a Rust toolchain.
Optional DataFrame sinks pull their own dependencies:
pip install "rypipe[pandas]" # to_pandas / to_dataframe
pip install "rypipe[polars]" # to_polars
pip install "rypipe[all]" # both
import rypipe
import my_adapter
table = rypipe.read(
"data.myfmt",
fields={"amount": "float64", "qty": "int64"},
filter={"field": "status", "op": "==", "value": "active"},
)
print(table.num_rows, table.num_columns)
# Bounded-memory streaming.
table = rypipe.read_stream("huge.myfmt", memory="256MiB")
Pipeline API
Adapters that expose a rypipe.Adapter subclass give you a chainable pipeline
with automatic fusion of rename, drop, cast, and filter stages into the Rust
parse loop. Subclasses only implement read(path, **kwargs)::
from rypipe import RenameFields, DropFields, CastTypes, FilterRows
import my_adapter
source = my_adapter.MySource("data.myfmt")
df = (
source
| RenameFields({"old_name": "new_name"})
| DropFields(["internal_id"])
| CastTypes({"amount": float, "qty": int})
| FilterRows(field="status", op="==", value="active")
).to_dataframe()
The same operations work as kwargs on rypipe.read when you only need a table.
Rust quick start
use rypipe_core::{ExecutionPlan, FieldType, Pipeline};
use my_adapter::{MySplitter, MyDecoder}; // separate adapter crate
let batch = Pipeline::new(MySplitter::new(), MyDecoder::new())
.with_plan(
ExecutionPlan::new()
.type_as("amount", FieldType::Float64)
.type_as("qty", FieldType::Int64)
.filter_eq("status", "active"),
)
.read_path("data.myfmt", false, false)?;
Building
# Rust only
cargo build --workspace --release
# Python extension
maturin develop --release
Testing
# Rust
cargo test --workspace --all-features
cargo clippy --workspace --all-targets --all-features -- -D warnings
# Python (against an installed build)
pip install -e ".[dev]"
pytest crates/rypipe-python/tests/
Tests covering optional dependencies (pandas, polars) skip when those
packages are absent. Set RYPIPE_REQUIRE_OPTIONAL_DEPS=1 to turn a missing
optional dependency into a hard failure instead. CI sets it so that optional
coverage cannot silently disappear from a green run.
Benchmark
Run the engine throughput benchmark:
cargo run --release -p rypipe-core --example bench_throughput
Documentation
Full docs and integration guides are in the docs/ directory:
Why rypipe
The engine started out welded to a single format. Abstracting it keeps that speed while making the same execution model available for JSON, CSV, HTML, and other formats through a small adapter interface. Format-specific code now lives in separate packages; this repository contains only the engine and its Python bindings.
License
MIT
Metadata
Release files for rypipe 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rypipe-0.1.0.tar.gz | 51.0 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| rypipe-0.1.0-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details |
| rypipe-0.1.0-cp310-abi3-musllinux_1_2_x86_64.whl | CPython 3.10 | abi3 | Linux musl 1.2+ x86-64 | Details |
| rypipe-0.1.0-cp310-abi3-musllinux_1_2_aarch64.whl | CPython 3.10 | abi3 | Linux musl 1.2+ ARM64 | Details |
| rypipe-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| rypipe-0.1.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| rypipe-0.1.0-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details |
| rypipe-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl | CPython 3.10 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 1.8 MB
Release files / rypipe-0.1.0.tar.gz
| Download URL | rypipe-0.1.0.tar.gz |
|---|---|
| Size | 51.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
20fd195fbc79aa90dd0133d2046945861426989356acce037ba3481d3ac8d169
|
|
BLAKE2b-256 checksum How to use checksums |
afd180f722408f50708ba703362b35fef098384d83e2cd7b61a77c3b43c95f67
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.
Transparency logRelease files / rypipe-0.1.0-cp310-abi3-win_amd64.whl
| Download URL | rypipe-0.1.0-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 114.4 kB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
419088f3e961034f99661d9a61b4acf9c5f540083b274db394d28d4e90438675
|
|
BLAKE2b-256 checksum How to use checksums |
b5b540f9d70734c73e33dd65620041311a77d61a55cba3e6db1e39c0aeee0580
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.
Transparency logRelease files / rypipe-0.1.0-cp310-abi3-musllinux_1_2_x86_64.whl
| Download URL | rypipe-0.1.0-cp310-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 414.7 kB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
10cd90cba012ee8d31f4e4d57d473ea389d0bc40179ab2dbd46e7f93076ed80b
|
|
BLAKE2b-256 checksum How to use checksums |
780c994ca815af3cbee8c33eed45a69d0380c4fcdca025f0ae8de3b4e7b8bfb5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.
Transparency logRelease files / rypipe-0.1.0-cp310-abi3-musllinux_1_2_aarch64.whl
| Download URL | rypipe-0.1.0-cp310-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 375.3 kB |
| Tags | CPython 3.10 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
450b93fad8df84884085fd24d0c2bf1c0f9d599d08fcc57f77411ee51001d056
|
|
BLAKE2b-256 checksum How to use checksums |
359ddfd484756b29bc4deea8f4639ff5d54176670e91b65005715870389dc15c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.
Transparency logRelease files / rypipe-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | rypipe-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 202.6 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
8fe918758844cfa544d77c67339944ef9e9b37b2c7e9c8834c3264f61ca2ea87
|
|
BLAKE2b-256 checksum How to use checksums |
35f0e1028e6a4d0335c56b557c541c63714e883d27895ab7148e491442065b9c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.
Transparency logRelease files / rypipe-0.1.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | rypipe-0.1.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 206.1 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
f7960177162afcf009467cfc1b968814111a09ea1796c633f7fcb00c59bd9acd
|
|
BLAKE2b-256 checksum How to use checksums |
e1c3964a94e5f16dff060f63bf0f0be287754c8ef98ebb8763db608527e216a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.
Transparency logRelease files / rypipe-0.1.0-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | rypipe-0.1.0-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 189.0 kB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
444cd64d79e0f349caf2418b953c3d2082df638a4f15bb0d4c4025690a53cfd6
|
|
BLAKE2b-256 checksum How to use checksums |
4cad4c5b97b2da15630439d0f2f2a6c78a7162bb843f19bc95d017386a06d26d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.
Transparency logRelease files / rypipe-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | rypipe-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 197.4 kB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
13a1b127a178bb8b3be1fd6e825a09e14cc6b48b996f7de5d4db6480267b0f57
|
|
BLAKE2b-256 checksum How to use checksums |
3225ecba23cbfb86d2a25ba8b60e393042f5d3249d7b9b36f6dc441aeeb93ce8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.
Transparency log