qvdrs
v0.7.0
Published
High-performance Qlik QVD file reader/writer — Rust-powered Node.js bindings
Maintainers
Readme
qvd
High-performance Rust library for reading, writing, converting and merging Qlik QVD files.
Disclaimer: This project is not affiliated with Qlik Technologies or QlikTech. QVD is a proprietary format; all trademarks belong to Qlik. This library was built from scratch using publicly available information. See LEGAL.md for details.
Features
- Read/Write QVD with byte-identical roundtrip (tested on 399 files up to 2.8 GB)
- Streaming chunk-based reader for large files
- EXISTS() O(1) index + filtered reads (2.5x faster than Qlik Sense)
- Concatenate — pure append with strict/union schema modes
- PK Merge — upsert/dedup by primary key (replace/skip/error). First QVD library with this
- Parquet/Arrow — bidirectional conversion,
write_arrow()for direct Arrow-to-QVD - DuckDB / DataFusion — register QVD as SQL tables
- Python — PyArrow, pandas, Polars via zero-copy Arrow bridge
- Node.js / TypeScript — native bindings via napi-rs, async I/O
- CLI — inspect, convert, filter, head
Quick Start
# Cargo.toml
qvd = "0.7.0"let table = qvd::read_qvd_file("data.qvd")?;
qvd::write_qvd_file(&table, "copy.qvd")?;pip install qvdrsimport qvd
table = qvd.read_qvd("data.qvd")
table.save("copy.qvd")npm install qvdrsimport { readQvd, saveQvd } from 'qvdrs'
const table = await readQvd('data.qvd')
await saveQvd(table, 'copy.qvd')Documentation
| | | |---|---| | Rust Examples | Read/write, streaming, EXISTS, Parquet, Arrow, concat, PK merge, DataFusion | | Python Examples | Read/write, Arrow, pandas, Polars, DuckDB, concat, PK merge, workflows | | TypeScript Examples | Read/write, EXISTS, concat, PK merge, async patterns | | API Reference | Full API tables for Rust, Python, and TypeScript | | Release Notes | Changelog for all versions |
License
MIT — Stanislav Chernov (@bintocher)
