Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 0.5.1 instead.

rypipe

Format-agnostic data ingestion framework with Rust core and Python bindings.

rypipe is a format- and source-agnostic ingestion framework that provides a common execution runtime for turning arbitrary record-oriented data sources into typed columnar data.

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.

Python Rust License Tests Docs PyPI


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: crxml was the original idea: a fast Crystal Reports XML parser that needed parallel, bounded-memory, and Arrow-native execution. The engine that made crxml fast (Splitter + RecordParser + TableBuilder + ExecutionPlan) was then separated and abstracted into rypipe so any format could reuse it. crxml now lives as a thin adapter (crxml-core + CrystalXMLSource) on top of rypipe-core. See rypipe docs/crxml-adapter.md for the 3 GB/s evolution.

Why rypipe

  • One runtime, many formats. XML, JSON, CSV, HTML, TSV, and any future format share the same parallel scheduler, memory-bounded executor, Arrow export, and pushdown infrastructure. An adapter is two small traits, not a full engine.

  • Performance without compromise. Single-thread ~1 GB/s, parallel ~4.9 GB/s unprojected, ~6.8-7.0 GB/s with projection. Zero-copy Arrow export. Predicate first evaluation. Layout prediction via memcmp.

  • Correctness by construction. Differential testing against an independent oracle, fuzz targets, property tests, and a tier-ladder profiler that decomposes every nanosecond of the hot path.

  • Python-native ergonomics. Chainable pipeline API with automatic fusion of rename/drop/cast/filter into the Rust parse loop. Streaming with bounded memory. Schema discovery. DataFrame and Parquet sinks.

What rypipe is not

  • Not a query engine. It handles projection, renaming, dropping, casting, filtering, and dictionary encoding. It does not do joins, aggregations, window functions, or SQL.

  • Not a one-size-fits-all parser. Each format needs a RecordParser + Splitter adapter from a separate package. The engine provides the runtime; you provide the format knowledge.

  • Not a data warehouse. It ingests data into Arrow; it does not store it, index it, or serve queries over it.

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 rayon scales to many cores.
  • Memory bounded: stream files larger than RAM with a configurable budget.
  • Typed columns: cast strings to int64, float64, or bool during 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 RecordBatch and 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: parallel streaming with frozen schema (parallel Discovery)

crxml (reference adapter) on Ryzen 5800X, 533 MB real / 1 GB synthetic, warm, median-of-7, frozen schema (FrozenSchema crates/rypipe-core/src/schema.rs:21, discovery_ns in get_par_profile()):

Mode 533 MB Table 1 GB Table RssAnon 533 MB Schema
Pipeline::read_path_par par128 (4 MB) 4470 MB/s 4278 MB/s 137 MB N/A
ParallelStreamingExecutor 64MB/16t auto (2 MB) 4497 MB/s 3782* MB/s 88 MB parallel 16×2 MiB sampled Discovery (5.3 ms, was 19 ms serial)
ParallelStreamingExecutor 64MB/16t explicit schema=[10 cols] 4980 MB/s ~4900 MB/s 88 MB from_plan exact, no Discovery
ParallelStreamingExecutor Vec<Batch> auto 4485 MB/s 3863* MB/s 88 MB same

* 1 GB auto still 3782/3863 from before parallel Discovery was re-measured on 533 MB only (parallel 19→5.3 ms). Before frozen schema, auto was 4770/4551 (unstable: batch 2 order FieldG vs Text20 last, pq.ParquetWriter raised). Frozen schema fixes order (every batch same, sparse FieldG 30%/Text21 1% as all-null) via ensure_schema crates/rypipe-core/src/engine.rs:79 but adds 5.3 ms (was 15% at 19 ms, now 4% at 5.3 ms), making auto +0.6% vs par128 (4497 vs 4470, within CoV), unblocking auto default. Explicit still +11% and defines the ceiling. Sweep: par peaks at 4 MB, streaming at 2 MB; one divisor cannot serve both, kept split (par 4 MB, streaming 2 MB via budget/(threads×2)). Cap raised 8×threads→16×threads (256) so 533 MB now hits ideal 133 for 4 MB (was capped 128). See crxml docs/performance.md for like-for-like, chunk-per-cell, fixed-chunk isolation (par 1 MB collapses 3553 vs streaming 3812, +7% via chunk_buf reuse).

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 Python, not pure Rust

Data work lives in Python : pip, notebooks, and the PyArrow/pandas/Polars ecosystem. ETL is glue: S3 → parse → rename/drop/cast/filter → validate → write Parquet. That glue is Python; the hot loop that touches every byte at 700 MB/s (2.5 GB/s parallel) must be Rust.

rypipe is Rust where it counts, Python where it ships:

  • Zero-copy, GIL-free Rust core parses outside the GIL and hands Arrow RecordBatches to pyarrow via the C Data Interface : no copy, no serialization.
  • Python composition : source | RenameFields | FilterRows | CastTypes | .to_dataframe() : lets the same pipeline be explored in a notebook and scaled unchanged in Airflow/Dagster on 100 GB of files.
  • Pure-Rust still works when you need it: rypipe-core has no Python dependency and is usable as a crate (Pipeline::new(Splitter, Parser) → read_path_par).

A pure-Rust library would save ~0.1 ms of orchestration and cost the 90% of users who have never run cargo build their workflow. For data teams, a pip install beats a toolchain install every time.

polars didn’t win by being pure Rust : it won with a Rust engine behind pl.DataFrame. rypipe does the same for ingestion. See the full data-driven justification in Why Python?.

License

MIT

Metadata

Release files for rypipe 2.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rypipe 2.2.0
File Size Uploaded
rypipe-2.2.0.tar.gz 149.1 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for rypipe 2.2.0
File
rypipe-2.2.0-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
rypipe-2.2.0-cp310-abi3-musllinux_1_2_x86_64.whl CPython 3.10 abi3 Linux musl 1.2+ x86-64 Details
rypipe-2.2.0-cp310-abi3-musllinux_1_2_aarch64.whl CPython 3.10 abi3 Linux musl 1.2+ ARM64 Details
rypipe-2.2.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details
rypipe-2.2.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 abi3 Linux glibc 2.17+ ARM64 Details
rypipe-2.2.0-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
rypipe-2.2.0-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

Total release size: 1.9 MB

Release files / rypipe-2.2.0.tar.gz

Download URL rypipe-2.2.0.tar.gz
Size 149.1 kB
Tags Source
SHA-256 checksum
How to use checksums
486506ef749fb43cc234f077f227d1a6f36f73dc5c48a1ad8822d3d3ce9c23b0
BLAKE2b-256 checksum
How to use checksums
aff6e7ba1569231ab15c69a05c2663f08c960dc857433ee5143314c8731b3056
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 Sep 4, 2026.

Transparency log

Release files / rypipe-2.2.0-cp310-abi3-win_amd64.whl

Download URL rypipe-2.2.0-cp310-abi3-win_amd64.whl
Size 121.4 kB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
85a6a897625556611300ade301b4f7ca9bc044f03cca909918f0bc73722164f7
BLAKE2b-256 checksum
How to use checksums
5638a2c7c92730e614ab77681aa6acdf5b0307c5c77dec625173310b304f9262
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 Sep 4, 2026.

Transparency log

Release files / rypipe-2.2.0-cp310-abi3-musllinux_1_2_x86_64.whl

Download URL rypipe-2.2.0-cp310-abi3-musllinux_1_2_x86_64.whl
Size 423.4 kB
Tags CPython 3.10 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
9cb72344fa8e8199aa072125691a009ca1b558f33c1908f2ba8a5a22a99b6cba
BLAKE2b-256 checksum
How to use checksums
9a95225f603e1174ef3fcb2e9c2278f1c40119004870738fbeaf6d458ad9501f
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 Sep 4, 2026.

Transparency log

Release files / rypipe-2.2.0-cp310-abi3-musllinux_1_2_aarch64.whl

Download URL rypipe-2.2.0-cp310-abi3-musllinux_1_2_aarch64.whl
Size 384.2 kB
Tags CPython 3.10 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
bc63253aece45878584af875923c352c1fd244c28682c656c5e6cc51350bbde2
BLAKE2b-256 checksum
How to use checksums
9fc77e6b6423c9aa326b5b8991dad863c8fe79939575c6b107da5faf7e8aa93d
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 Sep 4, 2026.

Transparency log

Release files / rypipe-2.2.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL rypipe-2.2.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 211.2 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
7b6ace8efe7598513e337bb6c62602df5d28c3d70148d9eea9b72e4263cc22e4
BLAKE2b-256 checksum
How to use checksums
6cc9b68cbea8ad1f153f3e68fb683f897cb6e918f5ed88e052a7b0ae7838a3a1
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 Sep 4, 2026.

Transparency log

Release files / rypipe-2.2.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL rypipe-2.2.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 215.1 kB
Tags CPython 3.10 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
c6cafeeb9716d530e04b7983e3dbb39d26face221be9a8d22bff8ee69a1042ed
BLAKE2b-256 checksum
How to use checksums
fe2501fd408c59375443f942fe050b0913a4ef0c234d73dc2699bf90d39cf397
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 Sep 4, 2026.

Transparency log

Release files / rypipe-2.2.0-cp310-abi3-macosx_11_0_arm64.whl

Download URL rypipe-2.2.0-cp310-abi3-macosx_11_0_arm64.whl
Size 197.8 kB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1e9c500e3edbfbe6fbad67097c56a6a13994381d7279c5f5e43077699787955e
BLAKE2b-256 checksum
How to use checksums
fbcc81dd567e21e129ba994a1465b0f4678e27add74dc09899460daa016b81d9
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 Sep 4, 2026.

Transparency log

Release files / rypipe-2.2.0-cp310-abi3-macosx_10_12_x86_64.whl

Download URL rypipe-2.2.0-cp310-abi3-macosx_10_12_x86_64.whl
Size 204.4 kB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
32f0479c9cb764bad8b9a8ff39682258de7a876fdf83724b87dd001b8677d7e4
BLAKE2b-256 checksum
How to use checksums
515f3ebcc772e51eaeec92c2c2b2a35249f189bbdc62020edf294d634c5476fa
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 Sep 4, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.2.0 This release

8 release files

0.5.1

8 release files

0.5.0

8 release files

0.4.0

8 release files

0.3.1

8 release files

0.3.0

8 release files

0.1.0

8 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